1

我正在使用带有新加坡 OneMap 服务器的 ESRI Android SDK 作为底图。当我启动地图的定位服务时,由于无效的 SpatialReference,精度圈导致异常。

Could not update the active symbol
java.lang.RuntimeException: Invalid SpatialReference.
at com.esri.core.geometry.SpatialReference.nativeGetUnit(Native Method)
at com.esri.core.geometry.SpatialReference.getUnit(Unknown Source)
at com.esri.android.map.LocationService$a.k(Unknown Source)
at com.esri.android.map.LocationService$a$a.onLocationChanged(Unknown Source)

我的代码如下

map = (MapView) view.findViewById(R.id.map);

basemap = new ArcGISTiledMapServiceLayer
            ("http://e1.onemap.sg/arcgis/rest/services/SM128/MapServer");

map.addLayer(basemap);

map.setOnStatusChangedListener(new OnStatusChangedListener()
{

    private static final long serialVersionUID = 1L;

    @Override
    public void onStatusChanged(Object source, STATUS status) {
        if (OnStatusChangedListener.STATUS.INITIALIZED == 
                            status && source == map) 
         { 

            //Start location service
            LocationService ls = map.getLocationService();

            ls.setLocationListener(new LocationListener(){

                 @Override
                 public void onLocationChanged(Location location) {
                                 // Do something                            

                            }

                 @Override
                 public void onProviderDisabled(String provider) {
                                // TODO Auto-generated method stub

                            }

                 @Override
                 public void onProviderEnabled(String provider) {
                                // TODO Auto-generated method stub

                            }

                 @Override
                 public void onStatusChanged(String provider,
                                    int status, Bundle extras) {
                                // TODO Auto-generated method stub

                            }

                   });

                   ls.start();
        }

}

禁用精度圈时不会发生此问题,但在我的情况下,我需要启用它。

任何帮助将非常感激。

4

2 回答 2

0

使用自定义空间参考时,SpatialReference.getUnit 似乎可能存在问题,就像您的地图服务一样。您可能希望将其报告给 Esri 支持人员,因为这看起来像是他们需要修复的问题。

同时,有两种可能的解决方法:

  • 在添加之前ArcGISTiledMapServiceLayer,添加一个GraphicsLayer空间参考 3414。这应该使 MapView 的空间参考为 3414,以便LocationService可以启动。

  • 在众所周知的空间参考中发布您的服务。看起来您正在尝试3414,因此可以在您发布的地图文档中使用它,而不是使用您现在使用的自定义 SR。

于 2013-11-06T14:42:56.167 回答
0

地图中的所有几何图形必须位于同一坐标系 (SpatialReference) 中。尝试将位置坐标投影(使用 GeometryEngine 类)到与底图相同的空间参考。检查此处的评论之一 将纬度和经度转换为 esri arcGIS MapPoint

于 2013-11-07T06:27:18.070 回答