Open masiton opened 5 years ago
Had the same problem, resolved by making my own MapProvider with grayscale styling:
using System; using GMap.NET;
namespace ParkingSpace.IndustrialSolution.Map
{
///
GoogleGrayscaleMapProvider()
{
}
static GoogleGrayscaleMapProvider()
{
Instance = new GoogleGrayscaleMapProvider();
}
public string Version = "m@333000000";
#region GMapProvider Members
readonly Guid id = new Guid("48C90477-4EF8-460D-8AAA-681B0EF640F2");
public override Guid Id
{
get
{
return id;
}
}
readonly string name = "GoogleMapGrayscale";
public override string Name
{
get
{
return name;
}
}
public override PureImage GetTileImage(GPoint pos, int zoom)
{
try
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
return GetTileImageUsingHttp(url);
}
catch (Exception e)
{
return null;
}
}
#endregion
void GetSecureWords(GPoint pos, out string sec1, out string sec2)
{
sec1 = string.Empty; // after &x=...
sec2 = string.Empty; // after &zoom=...
int seclen = (int)((pos.X * 3) + pos.Y) % 8;
sec2 = SecureWord.Substring(0, seclen);
if (pos.Y >= 10000 && pos.Y < 100000)
{
sec1 = Sec1;
}
}
static readonly string Sec1 = "&s=";
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty; // after &x=...
string sec2 = string.Empty; // after &zoom=...
GetSecureWords(pos, out sec1, out sec2);
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, language, pos.X, sec1, pos.Y, zoom, sec2, Server, apiStyle);
}
static readonly string UrlFormatServer = "mt";
static readonly string UrlFormatRequest = "vt";
static readonly string UrlFormat = "https://{0}{1}.{10}/maps/{2}/lyrs={3}&hl={4}&x={5}{6}&y={7}&z={8}&s={9}&{11}";
//styling docs: https://stackoverflow.com/questions/29692737/customizing-google-map-tile-server-url
static readonly string apiStyle = "apistyle=" +
"s.t:0|s.e:g|p.c:fff5f5f5," + //geometry
"s.t:0|s.e:l.i|p.v:off," + //labels.icon off
"s.t:0|s.e:l.t.f|p.c:ff616161," + //labels.text.fill
"s.t:0|s.e:l.t.s|p.c:fff5f5f5," + //labels.text.stroke
"s.t:21|s.e:l.t.f|p.c:ffbdbdbd," + //administrative.land_parcel - labels.text.fill
"s.t:2|s.e:g|p.c:ffeeeeee," + //poi - geometry
"s.t:2|s.e:l.t.f|p.c:ff757575," + //poi - labels.text.fill
"s.t:40|s.e:g|p.c:ffe5e5e5," + //poi.park - geometry
"s.t:40|s.e:l.t.f|p.c:ff9e9e9e," + //poi.park - labels.text.fill
"s.t:3|s.e:g|p.c:ffffffff," + //road - geometry
"s.t:50|s.e:l.t.f|p.c:ff757575," + //road.arterial - labels.text.fill
"s.t:49|s.e:g|p.c:ffdadada," + //road.highway - geometry
"s.t:49|s.e:l.t.f|p.c:ff616161," + //road.highway - labels.text.fill
"s.t:51|s.e:l.t.f|p.c:ff9e9e9e," + //road.local - labels.text.fill
"s.t:65|s.e:g|p.c:ffe5e5e5," + //transit.line - geometry
"s.t:66|s.e:g|p.c:ffeeeeee," + //transit.station - geometry
"s.t:6|s.e:g|p.c:ffc9c9c9," + //water - geometry
"s.t:6|s.e:l.t.f|p.c:ff9e9e9e" //water - labels.text.fill
;
}
}
It seems the WPF version is lacking the option to use negative and grayscale effects. Can this please be introduced?