我正在使用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();
}
}
禁用精度圆时不会出现此问题,但在我的情况下,我会要求启用它。
非常感谢任何帮助。
答案 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