这是我在地图上的点击监听器:
@覆盖 public boolean onSingleTap(MotionEvent point){ Point mapPoint = view.toMapPoint(point.getX(),point.getY()); SpatialReference sp = …
不要将这一点投射到WGS 1984中。使用点 MapView.toMapPoint(double, double) 回到你的身边。
MapView.toMapPoint(double, double)
在ArcGIS Runtime 10.2.x for Android中,a Point 对象不跟踪其空间参考。它实际上只是一个x值和一个y值。如果你给一个 Point 到了 MapView , MapView 将假设 Point 与地图位于相同的空间参考中,默认情况下通常位于Web Mercator中。
Point
MapView
这是您的代码正在做的事情:
Point mapPoint=view.toMapPoint(point.getX(), point.getY());
mapPoint 现在是一个重点 MapView 空间参考,可能是Web Mercator。这个点可能距离(0,0)数百万米,但自从 Point class幸福地没有意识到空间引用,它只包含数百万的x值和数百万的y值, 的 没有单位 强> 。
mapPoint
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之间, 的 没有单位 强> 。
p1Done
UtilsMapa.addPoint(p1Done, view, "Marker",view.getGraphicLayer());
使用调用辅助方法 p1Done , 这就是所谓的 point 在你的帮助方法中。
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)。
如果您使用过Runtime 100.x,则可能已经避免了此问题,因为Runtime 100.x几何包括 Point ,确实跟踪他们的空间参考。