我的点是在 0 纬度、0 经度绘制的



这是我在地图上的点击监听器:

@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 个坐标处绘制的......为什么?如何在正确的位置绘制点?

谢谢。

答案

不要将这一点投影到 WGS 1984 中。使用MapView.toMapPoint(double, double)返回给您的点。

详细说明

在适用于 Android 的 ArcGIS Runtime 10.2.x 中,Point对象不会追踪其空间参考。它实际上只是一个 x 值和一个 y 值。如果对MapView进行Point,则MapView将假定Point与地图位于同一空间参考中,默认情况下,地图通常位于 Web 墨卡托中。

以下是您的代码正在执行的操作:

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

mapPoint现在是MapView的空间参考中的一个点,可能是Web 墨卡托。该点可能距离 (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 墨卡托。地图正确显示了 (0, 0( 以西的点 -3.024672029738955 米和 (0, 0( 以北的 40.83564363734672

旁注:升级到 ArcGIS Runtime 100.x

如果您使用的是运行时 100.x,则可能已经避免了此问题,因为运行时 100.x 几何(包括Point(会跟踪其空间参考。

最新更新