Преобразования ArcGIS WebMercator и Wgs84 - PullRequest
0 голосов
/ 17 февраля 2020

Я использую ArcGIS. NET, чтобы предоставить карту, на которой можно рисовать полигоны. Изначально я использовал только точки WebMercator по умолчанию, но мне пришлось интегрировать существующую базу данных, которая использует координаты широты и долготы Wgs84.

Итак, теперь, когда нарисован многоугольник, я конвертирую его точки из WebMercator в Wgs84, прежде чем сохранить его в базе данных. Когда этот многоугольник снова загружается из базы данных, я преобразую его обратно в WebMercator перед его отображением. Но я замечаю, что точки многоугольника теперь немного смещены. Wkid для моих преобразований я нашел здесь ; 1505 год оказался самым близким из четырех, которые я нашел для Южной Африки.

Это Wgs84 для WebMercator, и я делаю нечто похожее наоборот.

MapPoint point = new MapPoint(lon, lat, SpatialReference.Create(4326));  

GeographicTransformationStep geoStep = new GeographicTransformationStep(1505);
GeographicTransformation geoTransform = new GeographicTransformation(geoStep);  

MapPoint convertedPoint = (MapPoint)GeometryEngine.Project(point, SpatialReference.Create(3857), geoTransform);

return new double[] { convertedPoint.X, convertedPoint.Y };

Так что это точки WebMercator полигона, прежде чем он будет сохранен в базе данных. [+3121076,7072101468, -3057977,9195277137], [+3121229,5809632977, -3055226,1919710007], [+3127268,0942127509, -3054767,5707115484], [+3127726,7154722032, -3058512,9776637414], [+3121076,7072101468, -3057977,9195277137]

1011 * Теперь многоугольник превращается в WGS84 и сохраняются на база данных. Когда он появится снова, я преобразовать обратно из WGS84 в WebMercator.
[+3121076,7072101426, -3057977,9195277165], [+3121229,5809632982, -3055226,1919709952], [+3127268,094212749, -3054767,5707115442], [+3127726,7154722032, -3058512,9776637396], [+3121076,7072101426, -3057977,9195277165 ]

Так что есть небольшая разница. Есть ли способ, чтобы я мог получить эти координаты точно такими же после преобразований? Или я подумала, может быть, эти различия настолько малы, что они даже не будут заметны. Я отобразил первый многоугольник под вторым многоугольником (из координат выше), и при очень большом увеличении я не увидел никакой разницы между точками.

Я проверял первое преобразование перед сохранением в базу данных (WebMercator для Wgs84), и этот кажется мертвым. Но второе преобразование (Wgs84 в WebMercator), по-видимому, в этом и заключается небольшая разница.

1 Ответ

0 голосов
/ 17 февраля 2020

Как уже упоминалось в комментарии для проецирования из WGS84 в Web Mercator, просто используйте метод Project с двумя параметрами. Я предполагаю, что Runtime API

Хотя я бы сказал, что разница, как вы видите, незначительна.

MapPoint wmPoint= (MapPoint) GeometryEngine.Project(wgs84Point, SpatialReferences.WebMercator);
MapPoint wgs84Point = (MapPoint) GeometryEngine.Project(wmPoint, SpatialReferences.Wgs84);
...