您的位置:首页 > 移动开发

【10.2移动新特性】好用的Application Framework for ArcGIS Android,简化制图和地理编码流程!

2013-12-13 16:02 543 查看
         ArcGIS移动产品开发包Android和iOS 10.2版于前段时间正式发布,除了众所周知的强劲的离线支持,新版本中还有哪些激动人心的增强呢?请看“新特性系列博客”为您揭秘。

 

ApplicationFramework for ArcGIS Android

         Application framework for ArcGIS Android提供了各种简化的类来辅助Mapping和Locator工作流,通过“右键”android工程,选择“ArcGIS”>“Add Application Framework”将其加入到已有的Eclipse工程中,会有一个名为arcgis-android-app-framework.jar的文件添加到工程中。如果您没有使用Eclipse开发环境,也可以在SDK的<arcgis-install-dir>/libs/目录下找到该文件并手动添加到工程中来。

 

MapViewHelper类

        MapViewHelper类用来简化程序的工作流,比如轻松显示callout、添加几何图形、创建popups等,通过该类的构造函数可以创建类的对象,之后就可以调用MapViewHelper类的各种方法了:

MapViewHelper mvHelper = new MapViewHelper(mMapView);

 


添加Callout

         可以为几何图形添加Callout。点击图形会自动弹出callout,callout默认包含了标题、摘要信息,以及几何图形的默认图标。也可以通过以下方法关闭Callout的显示:

mvHelper.setShowGraphicCallout(false);

 

         开发者也可以通过为几何图形添加监听事件,通过执行onGraphicClick()方法来与几何图形进行交互:

mvHelper.setOnGraphicClickListener(new OnGraphicClickListener(){

        public void onGraphicClick(graphic){

                // 在此添加代码

    }

});

 


显示Popup

         当点击地图上的某个具体位置时,MapViewHelper会查询所有图层, 并使用以下方法为选定的要素创建和返回popups。Webmap中的图层不需要通过代码定义popups的样式,会自动使用popups的默认配置信息:

mvHelper.createPopup(screenX, screenY, new PopupCreateListener(){

        public void onResult(popupContainer){

           
//在此添加代码

        }

});

 

         使用MapViewHelper类可以让您无需使用GraphicsLayer,无需定义空间参考,而直观的添加简单的图形到MapView中。如,使用MapViewHelper类添加一个自定义图标的点要素到GraphicsLayer中,并为该要素设置一个具备标题和文本内容的Callout的代码如下:

// 在xml中定义好Map和mapoptions

// 获取到mapview

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

//创建 MapViewHelper对象

mvHelper = new
MapViewHelper(mMapView);

// 创建icon

icon = getResources().getDrawable(R.drawable.route_destination);

// 确保增加geometry之前map已经加载完成

mMapView.setOnStatusChangedListener(new OnStatusChangedListener() {

  private staticfinal long serialVersionUID = 1L;

  public void onStatusChanged(Object source, STATUS status) {

    // Add a graphic to represent ESRI Headquarters

    int loaded = mvHelper.addMarkerGraphic(34.056695, -117.195693,

                 "ESRI", "World Headquarters", null, icon, false, 0);

    if (loaded < 0) {

      Log.d("TAG", "Marker Graphic not added to MapView");

    }

  }

});

 

         上述代码的执行结果,会在指定的经纬度(34.056695,-117.195693)上绘制一个点,点的符号就是icon图片。当点击该图形,会弹出一个具备指定标题和文本内容的callout。返回的int值是新增的Graphic的id,如果添加失败,返回-1。

GeocodeHelper类

         除了MapViewHelper之外,ApplicationFramework还提供了一个名为GeocodeHelper,用来支持地理编码和反地理编码。GeocodeHelper提供了一些静态方法来进行地理编码和反地理编码,这些方法简化了使用Locator时的参数设置和返回结果设置,通过Future接口可以取消地理编码和反地理编码操作,对应的callback事件也将不会被激发。但是,操作请求在被取消之前仍会被发送。使用方法如下:

GeocodeHeloper geocodeHelper = new GeocodeHelper();

// 反地理编码

Future<LocatorReverseGeocodeResult> = geocodeHelper.findAddress(screenX, screenY, locator, mMapView, callback)

 

         下列代码进行了如下操作:当我们点击地图上的某点时,会首先在地图上绘制出该点,点击该点的图标,会弹出callout,展示参数中设计好的地址字段。

// 初始化online locator

locator = Locator.createOnlineLocator();

// callout中将要显示的字段

final String[] fields = { "Address", "City", "Region", "Postal" };

 

// 单击地图获取该点的地址,即反地理编码

mMapView.setOnSingleTapListener(new OnSingleTapListener() {

  private staticfinal long serialVersionUID = 1L;

 

  public void onSingleTap(float x, float y) {

    // 删除已有的图形

    mvHelper.removeAllGraphics();

    // 使用屏幕坐标显示地址

    Future result = GeocodeHelper.showAddress(x, y, locator, mvHelper, null, fields,

            new CallbackListener() {

                // 处理失败

                public void onError(Throwable e) {

               Toast.makeText(SimpleMapActivity.this,"Error",

Toast.LENGTH_LONG).show();}

                // 处理成功

                public void onCallback(LocatorReverseGeocodeResult objs) {

                            Log.d("TAG", "Reverse Geocode success!"); }

                         });

    }

});

        可加载名为SimpleMap的例子来查看全部代码。

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: