代码: using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Maps.MapControl; using Microsoft.Maps.MapControl.Core; namespace BingMaps { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); MapTileLayer tileLayer = new MapTileLayer(); WMSTileSourse wmsts = new WMSTileSourse(); tileLayer.TileSources.Add(wmsts); myMap.Children.Add(tileLayer); this.myMap.Mode = new MercatorMode(); } public class WMSTileSourse : TileSource { // Fields public const int TILE_SIZE = 0x100; // Methods public WMSTileSourse() : base("http://localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=GuangZhou&styles=&BBox={0},{1},{2},{3}&Width={4}&Height={4}&srs=EPSG:4326&format=image/png") { } public override Uri GetUri(int tilePositionX, int tilePositionY, int tileLevel) { int zoom = tileLevel; double num2 = 0.00135; double num3 = 0.00058; double num4 = TileToWorldPosX((double)tilePositionX, zoom) + num2; double num5 = TileToWorldPosY((double)tilePositionY, zoom) + num3; double num6 = TileToWorldPosX((double)(tilePositionX + 1), zoom) + num2; double num7 = TileToWorldPosY((double)(tilePositionY + 1), zoom) + num3; return new Uri(string.Format(base.UriFormat, new object[] { num4, num7, num6, num5, 0x100 })); } public static double TileToWorldPosX(double tile_x, int zoom) { return (double)((float)(((tile_x / Math.Pow(2.0, (double)zoom)) * 360.0) - 180.0)); } public static double TileToWorldPosY(double tile_y, int zoom) { double num = 3.1415926535897931 - ((6.2831853071795862 * tile_y) / Math.Pow(2.0, (double)zoom)); return (double)((float)(57.295779513082323 * Math.Atan(Math.Sinh(num)))); } } } } 注:地图我是用geoserver发布的 在geoserver可预览
