Отображение значений широты / долготы на статической карте изображений с использованием.NET

Я использую Google Maps Image API для получения статического изображения карты. У меня есть координаты расположения центра и уровень масштабирования.

То, что я хочу сделать, это поместить другие координаты широты / долготы на статическое изображение карты, поэтому я должен преобразовывать координаты широты / долготы в координаты XY.

Мой подход:

Сначала я вычисляю мировые координаты центральной точки, используя проекцию Меркатора, подобную этой. Затем я выясняю границы статического изображения, используя формулы ниже:

PointF SWPoint = new PointF((float)(centerPointWorldCoordinates.X - (mapWidth / 2.0f) / scale), (float)(centerPointWorldCoordinates.Y + (mapHeight / 2.0f) / scale));

 PointF NEPoint = new PointF((float)(centerPointWorldCoordinates.X + (mapWidth / 2.0f) / scale), (float)(centerPointWorldCoordinates.Y - (mapHeight / 2.0f) / scale));

SWPoint и NEPoint являются мировыми координатами юго-западной точки и северо-восточной точки (границы карты изображения). Затем я вычисляю пиксельные координаты этих точек по следующей формуле:

pixelCoordinate = worldCoordinate * 2^zoomLevel

После выборки координат пикселей границ я также вычисляю координаты пикселей каждой точки широты / долготы (которую я хочу построить на карте), используя те же формулы.

Чтобы разместить определенную точку на изображении, я использую:

PointF point = new PointF((float)(pointPixelCoordinates.X - SWpixelCoordinate.X), (float)(pointPixelCoordinates.Y - NEpixelCoordinate.Y));

Таким образом, я могу определить количество пикселей для перемещения точки (из верхнего левого угла).

Этот подход работает, однако он не совсем точен, особенно когда уровень масштабирования очень высок. Точка смещена на недопустимое расстояние.

Как я могу сделать эту работу? Я что-то здесь упускаю? Буду очень признателен за помощь:)

1 ответ

Решение

Вы можете попробовать другое уравнение для широты. Я думаю, что это единственная ошибка. Попробуйте использовать проекцию меркатора на широту, как в этом вопросе: Преобразовать широту / долготу в пиксельные координаты? и не меняйте уравнение долготы.

Другие вопросы по тегам