如果你们采用GoogleMap做地图,然后想通过GPS将位置在地图上显示,不经过任何转换直接在GoogleMap上显示是不行的,因为他们的坐标系不统一。所以在显示之前就必须将GPS获取点进行坐标转换到WGS_1984_Web_Mercator,然后在GoogleMap上显示。arcgis api for silverlight中提供了两种坐标系的转换方法,首先要引入ESRI.ArcGIS.Client.Bing的dll,然后调用ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator方法就搞定。如果,你要自己写方法将两坐标系转可以借鉴下面的方法:
//经纬度转墨卡托
public MapPoint lonLat2Mercator(MapPoint lonLat)
{
MapPoint mercator = new MapPoint();
double x = lonLat.X * 20037508.34 / 180;
double y = Math.Log(Math.Tan((90 + lonLat.Y) * Math.PI / 360)) / (Math.PI / 180);
y = y * 20037508.34 / 180;
mercator.X = x;
mercator.Y = y;
return mercator;
}
//墨卡托转经纬度
public MapPoint Mercator2lonLat(MapPoint mercator)
{
MapPoint lonLat = new MapPoint();
double x = mercator.X / 20037508.34 * 180;
double y = mercator.Y / 20037508.34 * 180;
y = 180 / Math.PI * (2 * Math.Atan(Math.Exp(y * Math.PI / 180)) - Math.PI / 2);
lonLat.X = x;
lonLat.Y = y;
return lonLat;
}
public MapPoint lonLat2Mercator(MapPoint lonLat)
{
MapPoint mercator = new MapPoint();
double x = lonLat.X * 20037508.34 / 180;
double y = Math.Log(Math.Tan((90 + lonLat.Y) * Math.PI / 360)) / (Math.PI / 180);
y = y * 20037508.34 / 180;
mercator.X = x;
mercator.Y = y;
return mercator;
}
//墨卡托转经纬度
public MapPoint Mercator2lonLat(MapPoint mercator)
{
MapPoint lonLat = new MapPoint();
double x = mercator.X / 20037508.34 * 180;
double y = mercator.Y / 20037508.34 * 180;
y = 180 / Math.PI * (2 * Math.Atan(Math.Exp(y * Math.PI / 180)) - Math.PI / 2);
lonLat.X = x;
lonLat.Y = y;
return lonLat;
}