代码:
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可预览