目前官网的arcgisfor android最新的版本已经更新至100.3,今天使用最新版本的sdk来创建一个地图demo应用,使用配置下载的sdk的方式使用API。注意如前面提到下载用到的sdk需要注册一个开发者账号。在如下图的界面下载即可。
其中链接地址如下:https://developers.arcgis.com/downloads/apis-and-sdks?product=android
下载的压缩文件有如下的东西。
其中lib中有如下的sdk:
将aar目录下的arcgis-android-100.3.0.aar复制到android工程的lib目录下。将android工程切换到Project模式下。在里面的gradle做如下的配置。
packagingOptions {
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
最后完整的配置文件如下。
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.arcroid.arcroidfirstdemo"
minSdkVersion 19
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
}
dependencies {
implementation(name: 'arcgis-android-100.3.0', ext: 'aar')
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.android.support:design:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
在外面的gradle做相关配置,如下所示:
flatDir {
dirs 'libs'
}
完整的文件如下:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
flatDir {
dirs 'libs'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
因为加载网络地图需要配置网络权限,因此需要在权限清单中加入网络权限。
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
整个配置过程算是结束了,下面来创建一个点、线、面图形。这些内容摘自esri的github源代码。具体实现代码如下。
代码如下。
package com.example.arcroid.arcroidfirstdemo;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.PolygonBuilder;
import com.esri.arcgisruntime.geometry.PolylineBuilder;
import com.esri.arcgisruntime.geometry.SpatialReferences;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.view.Graphic;
import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
import com.esri.arcgisruntime.mapping.view.MapView;
import com.esri.arcgisruntime.symbology.SimpleFillSymbol;
import com.esri.arcgisruntime.symbology.SimpleLineSymbol;
import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol;
import com.esri.arcgisruntime.symbology.SimpleRenderer;
public class MainActivity extends Activity {
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView=findViewById(R.id.mapView);
ArcGISMap mMap = new ArcGISMap(Basemap.Type.TOPOGRAPHIC,
15.169193, 16.333479, 2);
addGraphicsOverlay();
mapView.setMap(mMap);
}
private void addGraphicsOverlay(){
Point pointGeometry = new Point(40e5, 40e5, SpatialReferences.getWebMercator());
SimpleMarkerSymbol pointSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.DIAMOND,
Color.RED, 10);
Graphic pointGraphic = new Graphic(pointGeometry);
GraphicsOverlay pointGraphicOverlay = new GraphicsOverlay();
SimpleRenderer pointRenderer = new SimpleRenderer(pointSymbol);
pointGraphicOverlay.setRenderer(pointRenderer);
pointGraphicOverlay.getGraphics().add(pointGraphic);
mapView.getGraphicsOverlays().add(pointGraphicOverlay);
PolylineBuilder lineGeometry = new PolylineBuilder(SpatialReferences.getWebMercator());
lineGeometry.addPoint(-10e5, 40e5);
lineGeometry.addPoint(20e5, 50e5);
SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID,
Color.BLUE, 5);
Graphic lineGraphic = new Graphic(lineGeometry.toGeometry());
GraphicsOverlay lineGraphicOverlay = new GraphicsOverlay();
SimpleRenderer lineRenderer = new SimpleRenderer(lineSymbol);
lineGraphicOverlay.setRenderer(lineRenderer);
lineGraphicOverlay.getGraphics().add(lineGraphic);
mapView.getGraphicsOverlays().add(lineGraphicOverlay);
PolygonBuilder polygonGeometry = new PolygonBuilder(SpatialReferences.getWebMercator());
polygonGeometry.addPoint(-20e5, 20e5);
polygonGeometry.addPoint(20e5, 20e5);
polygonGeometry.addPoint(20e5, -20e5);
polygonGeometry.addPoint(-20e5, -20e5);
SimpleFillSymbol polygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID,
Color.YELLOW, null);
Graphic polygonGraphic = new Graphic(polygonGeometry.toGeometry());
GraphicsOverlay polygonGraphicOverlay = new GraphicsOverlay();
SimpleRenderer polygonRenderer = new SimpleRenderer(polygonSymbol);
polygonGraphicOverlay.setRenderer(polygonRenderer);
polygonGraphicOverlay.getGraphics().add(polygonGraphic);
mapView.getGraphicsOverlays().add(polygonGraphicOverlay);
}
@Override
protected void onPause() {
super.onPause();
mapView.pause();
}
@Override
protected void onResume() {
super.onResume();
mapView.resume();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.dispose();
}
}
最后效果如下:
更多内容,微信扫二维码关注公众号
公众号:GIS计算机信息技术