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中定义好Mapmapoptions

// 获取到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的例子来查看全部代码。

更多相关文章

  1. android 右上角添加菜单
  2. 通过GridView仿微信动态添加本地图片
  3. android 小练习(一) ---仿微信UI主界面
  4. Android(安卓)显示SVG格式图片
  5. Android(安卓)SDK安装无法识别jdk(JAVA_HOME)的核心原因【尼玛一
  6. AS升级到3.1.1之后【ZXingScannerView 二维码扫描】error: resou
  7. Android(安卓)Studio 项目添加或导入第三方库 jar 文件
  8. Android(安卓)窗口添加机制系列1-Activity
  9. [置顶] AndroidStudio与eclipse打包的时候报错。Error:(4) Error

随机推荐

  1. android EditText中inputType的属性列表
  2. android中的测试
  3. 在Android平台下失去的机会
  4. Android(安卓)开发手记一 NDK编程实例
  5. Android动画学习Demo(2) 关于Property An
  6. Anbox:容器中的_Android
  7. EditText横屏时,弹出软件盘时不进行全屏
  8. android 连接远程数据库
  9. Android(安卓)事件处理
  10. Android(安卓)HAL 层框架分析以及代码示