天天看點

ArcGIS for android 執行個體應用(2)之使用ArcGIS底圖

本文主要添加ArcGIS底圖操作,在第一篇的ArcGIS for android 執行個體應用之前期準備(http://blog.csdn.net/u012224838/article/details/46366375)的基礎上實作添加包含多個圖層的地圖控件并通過按鈕選擇顯示。

文章主體引用官網:https://developers.arcgis.com/android/guide/use-arcgis-basemaps.htm

1、在Android項目視圖視窗中,選擇app>res>layout>activity_main.xml。

2、在視窗左下方選擇Text按鈕檢視xml文檔。

3、将其中Textview段替換為以下map段。

<com.esri.android.map.MapView 
  android:id="@+id/map" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  mapoptions.MapType="Topo" 
  mapoptions.ZoomLevel="13" 
  mapoptions.center="33.666354, -117.903557" />
           

4、在Android項目視圖視窗中,選擇

app>java>com.**.android.samples.sample1>MainActivity,在 MainActivity類下的第一行添加map控件申明:

// The MapView.
    MapView mMapView = null;
           

此時會出現報錯,因為mapview控件還不能被識别,需要引入esri的接口包。将滑鼠停止剛加的代碼上會出現ALT+Enter 提示,即可自動引入包。或者可以手動粘貼代碼

import com.esri.android.map.MapView;

即可。

ArcGIS for android 執行個體應用(2)之使用ArcGIS底圖

5、在onCreat下添加以下代碼以完成mapview控件定義:

// *Retrieve the map and initial extent from XML layout*
mMapView = (MapView) findViewById(R.id.map);
// *Enable map to wrap around date line.*
mMapView.enableWrapAround(true);
           

6、在onPause和onResume方法下添加以下代碼以設定當暫停或繼續時的mapview響應

protected void onPause() {
  super.onPause();
  mMapView.pause();
}

protected void onResume() {
  super.onResume();
  mMapView.unpause();
}
           

至此,代碼段定義完畢,下面添加相應的布局及菜單控件。

7、打開app>res>menu>menu_main.xml文檔, 将其中的Item内的内容全部替換為以下代碼:

<group android:checkableBehavior="single">
  <item
    android:id="@+id/World_Street_Map"
    android:showAsAction="never"
    android:title="@string/StreetMapMenu" />
  <item 
    android:id="@+id/World_Topo"
    android:showAsAction="never"
    android:title="@string/TopoMenu" />
  <item 
    android:id="@+id/Gray"
    android:showAsAction="never" 
    android:title="@string/GrayMenu" />
  <item
    android:id="@+id/Ocean_Basemap"
    android:showAsAction="never"
    android:title="@string/OceanMenu" />
</group>
           

此時肯定報錯,因為各個字元串并未定義,下面定義字元串。

8、打開app>res>values>string.xml,添加以下字元串定義語句:

<!-- basemap menu items -->
<string name="StreetMapMenu">Streets</string> 
<string name="TopoMenu">Topographic</string> 
<string name="GrayMenu">Gray</string> 
<string name="OceanMenu">Oceans</string>
           

9、在代碼段内添加以上的選擇功能。首先在MainActivity類下添加一下代碼申明:

// The basemap switching menu items.
MenuItem mStreetsMenuItem = null;
MenuItem mTopoMenuItem = null;
MenuItem mGrayMenuItem = null;
MenuItem mOceansMenuItem = null;

// Create MapOptions for each type of basemap.
final MapOptions mTopoBasemap = new MapOptions(MapOptions.MapType.TOPO);
final MapOptions mStreetsBasemap = new MapOptions(MapOptions.MapType.STREETS);
final MapOptions mGrayBasemap = new MapOptions(MapOptions.MapType.GRAY);
final MapOptions mOceansBasemap = new MapOptions(MapOptions.MapType.OCEANS);
           

同時需要引入import com.esri.android.map.MapOptions;

在onCreateOptionsMenu下的兩行代碼之間插入以下控件定義

// Get the basemap switching menu items.
mStreetsMenuItem = menu.getItem(0);
mTopoMenuItem = menu.getItem(1);
mGrayMenuItem = menu.getItem(2);
mOceansMenuItem = menu.getItem(3);

// Also set the topo basemap menu item to be checked, as this is the default.
mTopoMenuItem.setChecked(true);
           

在onOptionsItemSelected方法中用以下代碼替換其中的所有代碼

// Handle menu item selection.
switch (item.getItemId()) {
  case R.id.World_Street_Map:
    mMapView.setMapOptions(mStreetsBasemap);
    mStreetsMenuItem.setChecked(true);
    return true;
  case R.id.World_Topo:
    mMapView.setMapOptions(mTopoBasemap);
    mTopoMenuItem.setChecked(true);
    return true;
  case R.id.Gray:
    mMapView.setMapOptions(mGrayBasemap);
    mGrayMenuItem.setChecked(true);
    return true;
  case R.id.Ocean_Basemap:
    mMapView.setMapOptions(mOceansBasemap);
    mOceansMenuItem.setChecked(true);
    return true;
  default:
    return super.onOptionsItemSelected(item);
}
           

另在代碼段的開頭部分,本篇所需引入的包如下:

import android.os.Bundle;

import android.support.v7.app.ActionBarActivity;

import android.view.Menu;

import android.view.MenuItem;

import com.esri.android.map.MapOptions;

import com.esri.android.map.MapView;

import com.esri.android.map.event.OnStatusChangedListener;

import com.esri.core.geometry.Polygon;

至此所有代碼及定義申明添加完畢,運作如下:

ArcGIS for android 執行個體應用(2)之使用ArcGIS底圖