最近在学习GIS地图在Android中的应用,刚开始看ArcGIS官方文档,使用的SDK版本是10.2.9的。之前参照的版本是100.3的,但是OpenGL总是运行不来,报GLThread 2015的错误。后来查看网上的解决方法不多,大多都是因为虚拟机才会出现这种情况的。我就放弃了100.3版本。改用10.2.9版本,从配置到运行成功花了一番功夫,毕竟我还是小白。下面我将自己遇到的问题归纳为以下几点。
1、在配置中找不到SDK
按照官网在build.gradle里面配置的,但是忽略了build.gradle(Project)中有buildscript{}和allprojects{}两者的区别。我直接就将
// add the esri arcgis maven repo
maven { url 'http://esri.bintray.com/arcgis' }
添加到buildscript {repositories {}}这个里面,之后依赖的结果就是一直找不到包。因为添加的是项目中库所需要的地址,本身的项目就会找不到。就是如下错误的添加方式:
buildscript { //项目中所添加库需要的依赖 repositories { google() jcenter() // add the esri arcgis maven repo maven { url 'http://esri.bintray.com/arcgis' } } dependencies { classpath 'com.android.tools.build:gradle:3.1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } }
正确的添加方式应该是:
allprojects { //支持项目本身的 repositories { google() jcenter() // Add the following ArcGIS repository maven { url 'https://esri.bintray.com/arcgis' } } }
2、mapoptions属性找不到
官方文档就描述到XML布局,其中的MapVIew的mapoptions属性是编译环境识别不了的,所以是一个一个手敲上去的。等到一步一步按照按照官方文档做出来之后运行发现会闪退,根本就打不开。猜想可能是mapoptions属性在XML布局中写不起作用。需要在Activity中去声明,经过查找了一番资料。发现确实很多人是在Activity中设置MapOptions然后再添加到MapView中的。只不过没有找到完整的代码,为了便于以后查看,贴出一下完整代码。
activity_main.xml布局文件代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <com.esri.android.map.MapView android:layout_width="match_parent" android:layout_height="match_parent" mapoptions.MapType="STREETS" mapoptions.center="116.0, 54.0" mapoptions.ZoomLevel="16" android:id="@+id/map" /> </LinearLayout>
MainActivity代码如下:
package klona.com.startproject; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.esri.android.map.MapOptions; import com.esri.android.map.MapView; public class MainActivity extends AppCompatActivity { private MapView mMapView; private MapOptions mapOptions; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMapView = (MapView) findViewById(R.id.map); mapOptions = new MapOptions(MapOptions.MapType.STREETS,116.0,54.0,16);//其中的经纬度是我自己随便写的 mMapView.setMapOptions(mapOptions); } @Override protected void onPause() { super.onPause(); if(mMapView != null) { mMapView.pause(); } } @Override protected void onResume() { super.onResume(); if(mMapView != null) { mMapView.unpause(); } } }
效果图如下:
我写博客的主要的目的就是做笔记,想尽力写的规范一些,记载的详细一些。没有到还是挺乱的,不喜勿喷。如果我写的东西有错误,欢迎指出来。