手记

ArcGis开发 android 填坑之旅

对于众多android开发者来说地图服务API熟悉的或者使用较多就是高德、百度和腾讯了但是业界还有一翘楚就是ArcGIS android,没用过的可能比较陌生,用过的可能也被坑得面目全非,今天我们就一起开始ArcGis开发的填坑之路吧……



最近接手一个项目,要求要用arcgis进行开发,刚开始一脸懵逼啊先百度一下(你懂的),尼玛啊怎么全是外文儿,像我这样英语过3级的程序猿多半是看不懂啊,怎么办?幸好百度文库还有一些相关文章虽然很陈旧但是还是能凑合着用,这里附一个还不错的链接https://wenku.baidu.com/view/866a09fc7c1cfad6195fa788.html




接下来就开始我们的填坑之旅吧


一 :加载的地图显示英文

 

先普及一下Arcgis 地图展示是以图层形式展示的,底层是地图图层往上是用户按需求添加的GraphicsLayer图层:如marker(标示)line(线条)等;

如果出现英文地图说明你使用的默认地图图层,只需换一下图层即可。代码如下:

String mapUrl=””
mapUrl

 

坑 2:加载了中文地图

   细心的你可能会发现每次启动地图页面也闪屏一下,对,没错。
我也为此烦恼许久,最后发现MapView 有一个StatusChangedListener监听器
无奈之下把数据处理放到OnStatusChangedListener回调方法来做,
哟!! 果然凑效,页面再也不闪屏了,代码如下:

public void onStatusChanged(Object source, STATUS status) {
   
if (source == mMapView && status == STATUS.INITIALIZED) {
       
//你的数据操作
    }
}
 
坑3:

  项目中有这样一个需求,地图上的marker点击后弹出一个气泡展示详细信
息,做过地图开发的都知道这是一个再常规不过的功能,可是Arcgis却没有相应的
API研究许久发现SingleTapListener更贴近需求,首先在SingleTapListener回调
中获取marker所在图层,然后设置一个容差值20(大小根据需求来定,值越小容
差越小反之则越大)获取到marker的ID数组,如果数组不为空则表示点击到了
marker,代码如下:
public void onSingleTap(float x, float y) {
       GraphicsLayer mGraphicsLayer= (GraphicsLayer)
mMapView.getLayer(1);
   
int[] graphicIDs =mGraphicsLayer.getGraphicIDs(x, y,20);
   
if (graphicIDs != null && graphicIDs.length > 0) {
              //点击marker,做相应处理
       }
}
 


坑4:Callout隐藏不了
用过的ArcGis 的应该都知道callout显示调用show隐藏调用hide

没错,不过这是一般情况下,如果你想在地图缩小或放大到莫个比例尺的时候隐
藏掉callout呢?这时候不管你怎么调用hide都没用,这应该是API的一个bug吧
,目前还没有更好的解决办法,我只是在缩放结束后延迟一段时间后再调用hide
,如果有好的解决办法或建议的希望我们一起交流。代码如下:

public void hideCallout(){
   
handler.postDelayed(new Runnable() {
       
@Override
       
public void run() {
           
if(mCallout.isShowing()){
               
mCallout.animatedHide();
            }
        }
    },
2000);
}


原文链接:http://www.apkbus.com/blog-914653-68516.html

0人推荐
随时随地看视频
慕课网APP