1.Google地图
public class GoogleTile : TileSource { // Fields private const string charPhysical = "t"; private const string charPhysicalHybrid = "p"; private const string charSatellite = "s"; private const string charSatelliteHybrid = "y"; private const string charStreet = "m"; private const string charStreetOverlay = "h"; private const string charStreetWaterOverlay = "r"; private GoogleMapModes MapMode = GoogleMapModes.SatelliteHybrid; private int server_rr = 0; private const string TilePathBase = "http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}"; // Methods public override Uri GetUri(int tilePositionX, int tilePositionY, int tileLevel) { int zoom = tileLevel; string uriString = string.Empty; this.server_rr = (this.server_rr + 1) % 4; switch (this.MapMode) { case GoogleMapModes.Street: uriString = XYZUrl("http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}", this.server_rr, "m", zoom, tilePositionX, tilePositionY); break; case GoogleMapModes.Satellite: uriString = XYZUrl("http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}", this.server_rr, "s", zoom, tilePositionX, tilePositionY); break; case GoogleMapModes.SatelliteHybrid: uriString = XYZUrl("http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}", this.server_rr, "y", zoom, tilePositionX, tilePositionY); break; case GoogleMapModes.Physical: uriString = XYZUrl("http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}", this.server_rr, "t", zoom, tilePositionX, tilePositionY); break; case GoogleMapModes.PhysicalHybrid: uriString = XYZUrl("http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}", this.server_rr, "p", zoom, tilePositionX, tilePositionY); break; case GoogleMapModes.StreetOverlay: uriString = XYZUrl("http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}", this.server_rr, "h", zoom, tilePositionX, tilePositionY); break; case GoogleMapModes.StreetWaterOverlay: uriString = XYZUrl("http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}", this.server_rr, "r", zoom, tilePositionX, tilePositionY); break; } return new Uri(uriString); } private static string XYZUrl(string url, int server, string mapmode, int zoom, int tilePositionX, int tilePositionY) { url = string.Format(url, new object[] { server, mapmode, zoom, tilePositionX, tilePositionY }); return url; } }
public enum GoogleMapModes { Street, Satellite, SatelliteHybrid, Physical, PhysicalHybrid, StreetOverlay, StreetWaterOverlay } |
2.OpenStreetMap
public class OpenStreetMapTileSource : TileSource { // Methods public OpenStreetMapTileSource() : base("http://tile.openstreetmap.org/{2}/{0}/{1}.png") { } public override Uri GetUri(int x, int y, int zoomLevel) { return new Uri(string.Format(base.UriFormat, x, y, zoomLevel)); } }