这是我在地图上的点击侦听器:
@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);
}
已添加图形IS(红点),但以0,0坐标绘制...为什么?如何在适当的位置绘制点?
谢谢。
答案 0 :(得分:0)
不要将点投影到WGS 1984中。请使用MapView.toMapPoint(double, double)
返回给您的点。
在适用于Android的ArcGIS Runtime 10.2.x中,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。该地图正确显示(0,0)以西-3.024672029738955 米和(0,0)以北40.83564363734672 米。
如果您使用的是Runtime 100.x,则可能会避免此问题,因为Runtime 100.x的几何图形(包括Point
确实要跟踪其空间参考。