Android ESRI SDK地图无法更新活动符号

时间:2013-11-06 10:30:33

标签: android map arcgis esri

我正在使用ESRI Android SDK和新加坡的OneMap服务器作为底图。 当我启动地图的位置服务时,由于无效的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();
        }

}

禁用精度圆时不会出现此问题,但在我的情况下,我会要求启用它。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

使用自定义空间参考时,看起来像SpatialReference.getUnit可能存在问题,如your map service所示。您可能希望将其报告给Esri支持,因为它看起来像是他们需要修复的东西。

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

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

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

答案 1 :(得分:0)

地图中的所有几何图形必须位于同一坐标系(SpatialReference)中。尝试将位置坐标投影(使用GeometryEngine类)到与底图相同的空间参考。 检查其中的一条评论 Convert latitude and longitude into esri arcGIS MapPoint