好的,我想通了。我试图抓住 MapsUI 的 MapView.Map 的“信封”
我真正需要的是 MapView.Viewport.Extent。
我遇到了第二个问题,我试图在加载地图之前获取这些信息。这就是为什么我总是在左下角得到 X: -20037508.342789 Y: -20037508.342789。
该符号采用 EPSG:3857 格式,这些坐标等同于南极。我想要传统的“lat/lng”,即 EPSG:4326。
所以首先我等到加载地图以获取坐标,然后我找到了从 EPSG:3857 转换为 EPSG:4326 的公式,并在 C# 中实现了它:
private double[] Convert3857To4326(double X, double Y)
{
double lng = X * 180 / 20037508.34;
double lat = Y / (20037508.34 / 180);
lat = ((Math.Atan(Math.Pow(Math.E, ((Math.PI / 180) * lat))))/(Math.PI / 360)) - 90;
return new double[] { lng, lat };
}
如果您需要另辟蹊径,则相反:
private double[] Convert4326To3857(double lat, double lng)
{
double x = lng * 20037508.34 / 180;
double y = Math.Log(Math.Tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180);
y = y * 20037508.34 / 180;
return new double[] { x, y };
}