ArcGIS for Android:地图应用开发的最佳拍档

发布时间:2023-12-08

ArcGIS for Android:地图应用开发的最佳拍档

更新:2023-05-14 00:40

一、ArcGIS for Android的简介

ArcGIS是由Esri公司开发的一套地理信息系统软件,ArcGIS for Android则是其Android平台下的应用程序。ArcGIS for Android提供了一系列帮助开发人员构建具有丰富地图功能的Android应用程序的工具和API,不但可以呈现地图、地理位置和位置感知数据,还可以处理各种交互行为、可定制化样式和控件,总之,ArcGIS for Android为开发人员提供了丰富的地图应用开发工具。

二、ArcGIS for Android的主要功能

  1. 地图:ArcGIS for Android支持加载和显示各种符号、标记、线条和图形,还可以在地图上添加影像、标记、图层及交互控件等。它还支持在地图上添加事件和处理各种地图事件。
  2. 位置感知:支持获取设备的详细位置信息,包括高程、经纬度等,并可以将其结合到地图上进行显示。还可以使用位置服务来查询所需的离线地图和其他资源。
  3. 交互:ArcGIS for Android支持各种交互操作,例如放大、缩小、平移、旋转、倾斜等,还支持添加自定义工具栏和控件、执行分析和查询。还可以轻松实现多点触摸和手势识别等操作。
  4. 可定制化:ArcGIS for Android具有可定制化样式和控件,可以轻松定制应用程序界面的外观和行为。同时也可以添加自定义的样式和符号。
  5. 离线:ArcGIS for Android支持在无网络环境下使用,可以使用预先下载的地图数据和资源。

三、ArcGIS for Android的代码示例

1、地图显示示例

MapView mMapView = findViewById(R.id.mapView);
ArcGISMap map = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 34.056295, -117.195800, 16);    
mMapView.setMap(map);

2、位置感知示例

LocationDisplay mLocationDisplay = mMapView.getLocationDisplay();
mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.RECENTER);
mLocationDisplay.startAsync();

3、交互示例

mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mMapView) {
    @Override public boolean onSingleTapConfirmed(MotionEvent e) {
        android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()),
                Math.round(e.getY()));
        Point mapPoint = mMapView.screenToLocation(screenPoint);
        ...
        return true;
    }
});

4、可定制化示例

SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLUE, 3.0f);
mSwatch.setImageDrawable(new SimpleLineSymbolSwatchGenerator(lineSymbol).generateSwatchDrawable(this));
mapView.setViewpoint(new Viewpoint(GraphicsUtils.getEnvelope(-38.145, 144.827, -38.039, 144.991),
                new SpatialReference(102100)));
mapView.setViewpointScaleAsync(100000);
mapView.setBackgroundColor(Color.rgb(255,246,229));

5、离线示例

OfflineMapTask mOfflineMapTask = new OfflineMapTask(mMapView.getMap(), mAreaOfInterest,
                mMinimumScale, mMaximumScale);
OfflineMapParameters parameters = mOfflineMapTask.createDefaultOfflineMapParameters();
parameters.setMinScale(mMinimumScale);
parameters.setMaxScale(mMaximumScale);
parameters.setScale(mInitialScale);
parameters.setAreaOfInterest(mAreaOfInterest);
parameters.setOutPath(mOutputMapPath);
mOfflineMapTask.performOfflineMap(parameters, mPortalItem);