我的点是在0纬度,0经度处绘制的

时间:2018-09-10 11:20:02

标签: arcgis arcgis-android-api

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

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

谢谢。

1 个答案:

答案 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

旁注:升级到ArcGIS Runtime 100.x

如果您使用的是Runtime 100.x,则可能会避免此问题,因为Runtime 100.x的几何图形(包括Point确实要跟踪其空间参考。