Мои точки нарисованы на 0 широте, 0 долготе - PullRequest
0 голосов
/ 10 сентября 2018

Это мой клик слушатель на карте:

@Override
    public boolean onSingleTap(MotionEvent point) {
        Point mapPoint=view.toMapPoint(point.getX(), point.getY());
        SpatialReference sp = SpatialReference.create(SpatialReference.WKID_WGS84);
        Point p1Done=(Point) GeometryEngine.project(mapPoint, view.getSpatialReference(), sp);
        UtilsMapa.addPoint(p1Done, view, "Marker",view.getGraphicLayer());
        return super.onSingleTap(point);
    }

Метод addPoint:

public static void addPoint(Point point, MapViewExt mView, String textMarker, GraphicsLayer gLayer){
    SimpleMarkerSymbol simpleMarker = new SimpleMarkerSymbol(Color.RED, 10, SimpleMarkerSymbol.STYLE.CIRCLE);
    TextSymbol bassRockTextSymbol = new TextSymbol(10, textMarker, BLUE, TextSymbol.HorizontalAlignment.LEFT,
            TextSymbol.VerticalAlignment.BOTTOM);
    //When reaching this line, point has 0=-3.0246720297389555 1=40.83564363734672, which is where I tapped the screen
    Graphic graphic=new Graphic(point,simpleMarker);
    gLayer.addGraphic(graphic);
}

Графическое изображение добавлено (красное пятно), но оно нарисовано с координатами 0,0 ... Почему это так? Как я могу получить точку в правильном месте?

Спасибо.

1 Ответ

0 голосов
/ 12 сентября 2018

Ответ

Не проецируйте точку в WGS 1984. Используйте точку, которую вам возвращает MapView.toMapPoint(double, double).

Подробное объяснение

В ArcGIS Runtime 10.2.x для Android объект Point не отслеживает свою пространственную привязку. На самом деле это просто значение x и значение y. Если вы зададите Point для MapView, MapView будет предполагать, что Point находится в той же пространственной привязке, что и карта, которая по умолчанию обычно используется в Web Mercator.

Вот что делает ваш код:

Point mapPoint=view.toMapPoint(point.getX(), point.getY());

mapPoint теперь является точкой в ​​пространственной привязке MapView, которая, вероятно, является Web Mercator. Эта точка, вероятно, находится на расстоянии нескольких миллионов метров от (0, 0), но поскольку класс Point блаженно не знает о пространственных привязках, он просто содержит значение x в миллионах и значение y в миллионах, без единиц измерения .

SpatialReference sp = SpatialReference.create(SpatialReference.WKID_WGS84);
Point p1Done=(Point) GeometryEngine.project(mapPoint, view.getSpatialReference(), sp);

p1Done теперь является точкой в ​​WGS 1984, которая является некоторым числом градусов от (0, 0). У вас есть комментарий, в котором говорится, что значение x равно -3.0246720297389555, а значение y равно 40.83564363734672, или, может быть, наоборот, но важно отметить, что значение x находится в диапазоне от -180 до 180, а значение y равно от -90 до 90 без единиц измерения .

UtilsMapa.addPoint(p1Done, view, "Marker",view.getGraphicLayer());

Ваш вспомогательный метод вызывается с p1Done, который называется point в вашем вспомогательном методе.

Graphic graphic=new Graphic(point,simpleMarker);

Рисунок создается с точкой, значение x которой равно -3.0246720297389555, а значение y равно 40.83564363734672.

gLayer.addGraphic(graphic);

Графика добавляется в графический слой, который имеет пространственную привязку карты, на которой он находится, - вероятно, это Web Mercator. На карте правильно отображаются точки -3.024672029738955 метров к западу от (0, 0) и 40,83564363734672 метров к северу от (0, 0).

Примечание: обновление до ArcGIS Runtime 100.x

Если бы вы использовали Runtime 100.x, вы могли бы избежать этой проблемы, поскольку геометрии Runtime 100.x, включая Point, отслеживают их пространственную привязку.

...