【问题标题】:My points are drawn at 0 latitude, 0 longitude我的点绘制在 0 纬度,0 经度
【发布时间】:2018-09-10 11:20:01
【问题描述】:

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

@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 坐标处绘制的……这是为什么呢?我怎样才能把点画在合适的地方?

谢谢。

【问题讨论】:

    标签: arcgis arcgis-android-api


    【解决方案1】:

    回答

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

    详细说明

    在 ArcGIS Runtime 10.2.x for Android 中,Point 对象不会跟踪其空间参考。它实际上只是一个 x 值和一个 y 值。如果您将Point 分配给MapViewMapView 将假定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。地图正确显示点 -3.024672029738955 meters 以西 (0, 0) 和 40.83564363734672 meters (0, 0) 以北。

    附注:升级到 ArcGIS Runtime 100.x

    如果您使用过 Runtime 100.x,则可能会避免此问题,因为 Runtime 100.x 几何体(包括 Point)会跟踪其空间参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多