在UWP中获取地图上一个元素的像素坐标

本文关键字:元素 像素 坐标 上一个 地图 UWP 获取 | 更新日期: 2023-09-27 18:04:10

我有一个地图。在它上面,我有一些XAML元素通过地理位置定位。我需要找到它们的像素坐标,以便检测它们何时相互重叠(出于分组目的)。我似乎找不到办法。如果我得到MyMap.MapItems,我只得到我绑定到映射上的对象的集合。有什么办法吗?

在UWP中获取地图上一个元素的像素坐标

问得好。我现在就有这样一个问题。这里有一篇文章详细描述了你需要做什么。https://msdn.microsoft.com/en-us/library/bb259689.aspx?f=255& MSPPError = -2147217396

如果你没有时间阅读它:

    private const double EarthRadius = 6378137;
    private const double MinLatitude = -85.05112878;
    private const double MaxLatitude = 85.05112878;
    private const double MinLongitude = -180;
    private const double MaxLongitude = 180;
private static double Clip(double n, double minValue, double maxValue)
            {
                return Math.Min(Math.Max(n, minValue), maxValue);
            }
public static uint MapSize(int levelOfDetail)
        {
            return (uint) 256 << levelOfDetail;
        }
public static void LatLongToPixelXY(double latitude, double longitude, int levelOfDetail, out int pixelX, out int pixelY)
        {
            latitude = Clip(latitude, MinLatitude, MaxLatitude);
            longitude = Clip(longitude, MinLongitude, MaxLongitude);
            double x = (longitude + 180) / 360; 
            double sinLatitude = Math.Sin(latitude * Math.PI / 180);
            double y = 0.5 - Math.Log((1 + sinLatitude) / (1 - sinLatitude)) / (4 * Math.PI);
            uint mapSize = MapSize(levelOfDetail);
            pixelX = (int) Clip(x * mapSize + 0.5, 0, mapSize - 1);
            pixelY = (int) Clip(y * mapSize + 0.5, 0, mapSize - 1);
        }

为什么不使用@Clemens建议的GetOffsetFromLocationmethod?

它为你做了所有的计算,即使MapControl从墨卡托投影移开,它仍然会工作。