我的点绘制在 0 纬度,0 经度
My points are drawn at 0 latitude, 0 longitude
这是我在地图上的点击监听器:
@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)
returns 给你的点。
详细解释
在 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 墨卡托。该点可能距 (0, 0) 数百万米,但由于 Point
class 幸福地不知道空间参考,它只包含数百万的 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 墨卡托。地图正确显示点 -3.024672029738955 米 以西 (0, 0) 和 40.83564363734672 米 以北 (0, 0).
旁注:升级到 ArcGIS Runtime 100.x
如果您使用过运行时 100.x,您可能会避免这个问题,因为运行时 100.x 几何图形(包括 Point
)会跟踪它们的空间参考。
这是我在地图上的点击监听器:
@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)
returns 给你的点。
详细解释
在 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 墨卡托。该点可能距 (0, 0) 数百万米,但由于 Point
class 幸福地不知道空间参考,它只包含数百万的 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 墨卡托。地图正确显示点 -3.024672029738955 米 以西 (0, 0) 和 40.83564363734672 米 以北 (0, 0).
旁注:升级到 ArcGIS Runtime 100.x
如果您使用过运行时 100.x,您可能会避免这个问题,因为运行时 100.x 几何图形(包括 Point
)会跟踪它们的空间参考。