SuperMap iMobile for Android常见问题解答集锦(十三)

来源:互联网 发布:同花顺软件乱码 编辑:程序博客网 时间:2024/06/06 02:57

作者:皇皇

问:SuperMap iMobile for Android中是否支持实时GPS定位,怎么实现?
答:可以支持;通过LocationManagePlugin管理插件类,开启GPS设备,并设置定位时间间隔,默认为1000毫秒,最后添加位置改变监听器addLocationChangedListener()来监听获取定位的经纬度。

问:SuperMap iMobile 8C for Android中怎么求两点间的距离,返回结果单位是什么?
答:可以通过Geometrist.distance()实现,该方法中的参数是Geometry1和Geometry2,得到的结果单位和数据集的单位一致,即如果数据集是经纬度的,返回的结果单位就是度,如果数据集是平面投影坐标系,返回的结果单位就是米。

问:SuperMap iMobile 8C for Android中刚申请的试用许可,但是运行工程时还是报许可已过期,怎么回事?
答:首先,确认申请的试用许可放在测试机的位置和工程中设置的许可路径是否一致;其次,查看测试机的系统时间是否为当前时间,如果不是应改为当前时间。

问:移动端开发,我把数据和许可拷贝到外挂卡上的,能读取到嘛?
答:能读取到的,其代码跟读取存储卡的一样,android系统本身会根据代码路径先去内存找,如果没找到再去外挂卡找对应的路径。

问:怎么限制地图的移动只是在地图范围内,不想地图窗口移动到空白区域?
答:可以设置其地图的锁定可视范围。setViewBoundsLocked问true,setLockedViewBounds的可视范围。

问:SuperMap iMobile 8C for Android的行业导航中GPS定位点作为当前起始点,导航时起始点会发生很大偏移,是什么原因,怎么办?
答:在行业导航中有个一个setIsEncryptGPS(boolean)方法,是用来设置是否加密GPS数据,如果在导航前没有添加这句代码,默认是true,而GPS定位的点在设置为导航的起始点前没有设置其加密;解决方案就是确保导航的地图数据和起始点加密与否保持一致即可。

问:SuperMap iMobile 8C中打开iServer发布的WMS服务数据失败,怎么回事?
答:一般是WMS服务地址的参数设置不对或者服务发布的WMS版本与代码中setWebVersion()参数不一致造成的。

问:我的地图里有一个图层是CAD数据,把地图打开在iDesktop能显示正常,但是用移动端程序打开地图,唯独CAD数据显示不出来是什么原因啊?
答:出现这种情况,是因为你的CAD数据是直接作为数据源的方式打开的,而目前移动端不支持CAD类型的外部数据源显示,如果需要CAD数据显示出来,请用导入数据集的方式,将CAD文件导入到数据源里,然后对CAD图层重新指定数据集即可。

问:SuperMap iMobile 8C(2017) for Android设置固定比例尺在怎么没效果?
答:通过mapControl.getMap().setVisibleScales(比例尺数组)设置固定比例尺,数组里面的值是1除以比例尺的值,不能是1:70000或者1/70000,需要是1.428571428571429e-5

问:我要在动态图层里添加一个面对象,怎样让其面填充区域透明,边线颜色不透明呢?
答:可以做到。首先制作一个带有透明风格图片,步骤:1.把纯色图片插入PPT里–双击图片–在左上角点击设置透明色–然后点图片另存为PNG格式。2.对动态元素风格设置背景图片DynamicStyle.setBackground(),设置动态元素边线颜色DynamicStyle.setLineColor()。3.把动态元素风格再赋给动态面对象DynamicPolygon.setStyle(DynamicStyle)。

问:在Android端访问iServer发布的rest地图服务,该服务在iServer那边更新后,能让Android端也实时更新,动态出图啊?
答:可以做到Android端实时更新,动态出图,只需清除数据集和该图层的缓存即可,代码如下:
Layer imageLayer=mapControl.getMap().getLayers().get(“rest”);
DatasetImage image=(DatasetImage) imageLayer.getDataset();
imageLayer.removeCache();
image.getMapCacheService().removeCache();

问:在Android移动端开发里,通过代码创建了标签专题图,怎么可以让一部分标签不显示啊?
答:分两种情况:
1.如果只是让一些小对象的标签不显示的话,可以设置themeLabel.setSmallGeometryLabeled(false)属性。
2.如果让某些特定的标签对象不显示的话,可以做如下设置:
QueryParameter parameter=new QueryParameter();
parameter.setAttributeFilter(“SMID=5”);
themeLabelLayer.setDisplayFilter(parameter);
mapcontrol.getMap().refresh();

问:已知一个点和待画直线的斜率,怎么绘制出该直线?
答:可以根据已知点、线斜率和另取待画线的长度L,通过三角形中的正弦和余弦求出由已知点和L长的斜边构成的水平长度和竖直长度,然后根据已知点坐标得到在直线上的另一个点坐标,最后通过两个点画线。

问:SuperMap iClient for Android如何用气泡在地图显示详细信息?
答:在MapView上面添加view,如下显示点的坐标信息:
View view = LinearLayout.inflate(MainActivity.this, R.layout.overlay_view, null);
TextView text=(TextView)view.findViewById(R.id.textView);
text.setText(“当前坐标 X:”+arg1.getPoint().x+” Y:”+arg1.getPoint().y);
MapView.LayoutParams lp = new MapView.LayoutParams(172, 172, arg1.getPoint(), LayoutParams.CENTER);
mapView.addView(view, lp);
mapView.invalidate();

问:SuperMap iClient for Android中如何获取点击屏幕时的地图坐标信息?
答:继承Overlay(class PointTouchOverlay extends Overlay)在onTouchEvent(MotionEvent event, final MapView mapView)方法中获取屏幕坐标X(event.getX())和Y(event.getY())值,再把屏幕坐标转地图坐标mapView.getProjection().fromPixels(x,y)。把PointTouchOverlay 添加到mapView的Overlays里面(mapView.getOverlays().add(pointTouchOverlay))。

0 0
原创粉丝点击