《ArcGIS Runtime SDK for Android開發筆記》——(9)、空間數據的容器-地圖MapView

一、前言

在上一篇內容裏介紹了 關於ArcGIS Android開發的將來(「Quartz」版Beta)相關內容,期間也提到了關於API接口的重構,開發思路的調整,根據2015UC資料也能夠知道新版預計將在明年的時候推出。屆時在開發思路上將會往新版遷移。html

總的來講,雖然「Quartz」版的開發思路有所變化,但整體變化不大,這裏我將繼續以現有正式發佈版本爲主梳理ArcGIS Runtime SDK for Android 開發內容。java

參考API版本號:version 10.2.7。後續內容若不作特殊說明,均爲此版本。android

轉載請註明出處: http://www.cnblogs.com/gis-luq/p/4941715.htmlapi

 

二、空間數據的容器

2.一、地圖組件MapView概述

地圖組件是全部空間數據的容器,是ArcGIS Runtime SDK的核心組件,也是全部GIS應用開發中的入口和基礎。在ArcGIS Runtime SDK for Android中,地圖組件的類名是MapView,它是Android中ViewGroup的子類,它與不少ArcGIS API中的Map、MapControl類做用是同樣的。佈局

MapView提供了完善的地圖顯示與控制功能:post

  • Ÿ   MapView具備呈現數據的能力,它能夠添加一個或多個圖層,全部圖層只有添加到MapView容器中才能進行顯示;
  • Ÿ   MapView能夠設置地圖的顯示範圍和比例尺、旋轉角度、地圖背景、地圖的最大/最小分辨率,以及指定當前顯示的分辨率/比例尺;
  • Ÿ   MapView提供了豐富的手勢監聽接口,經過這些監聽能夠實現各類手勢動做,如點擊、雙擊、移動或長按等操做。

特殊說明:MapView默認空間參考及空間範圍爲所添加的第一個圖層的相關信息。動畫

2.二、地圖組件MapView的使用

有兩種方式能夠將MapView添加到應用當中:一個是XML方式,另外一個是硬編碼方式;通常多采用XML方式,方便調整佈局及其屬性相關設置。this

2.2.一、XML方式添加MapView及初始化底圖

<!-- MapView with MapOptions settings for Topo basemap,zoom level, and centered in Costa Mesa, CA. -->
<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"/>

MapOptions是用來初始化地圖的一些屬性的,包括預約義底圖類型(MapType)、放大的級別和地圖的中心點,它在10.2版本的API中第一次引入。MapOptions的MapType是一個枚舉型變量,有GRAY、HYBRID、NATIONAL_GEOGRAPHIC、OCEANS、OSM、SATALLITE、STREETS、TOPO這8個值,分別表明不一樣風格的底圖,這樣Android開發者們就不用每次都經過定義ArcGISTiledMapServiceLayer和底圖的url來加載底圖,也不用每次在初始化的時候費勁的定義底圖的放大級別和地圖中心點,而是僅用MapOptions的三個屬性就能夠完成初始化,代碼更省,效率更高。編碼

2.2.二、XML方式添加MapView及初始化底圖

一樣的,MapOptions也能夠經過xml和java兩種代碼的方式使用。上面示例中就是使用xml方式使用MapOptions,下列示例代碼是使用Java硬編碼的方式使用MapOptions以及將MapView控件添加到應用中。url

public class MapViewActivity extends Activity {
   MapView mapView;
   MapOptions opt= new  MapOptions(MapType.STREETS,33.666354, -117.903557,13);

   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.mapviewcenterat);
   //利用MapOption初始化MapView
     mapView = new MapView(this,opt);
   //也能夠利用實例化ArcGISTiledMapServiceLayer添加底圖圖層 mapView.addLayer(
        
new ArcGISTiledMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"));
}
}

2.三、地圖的方法

地圖組件MapView是全部空間數據的容器,同時也是控制操做地圖的對象,能夠在MapView中實現對地圖的放大、縮小、平移、單擊、長按、以及一些狀態的變化時的操做,例如當地圖的範圍變化時、地圖的加載狀態改變時等等。下面針對API中關於MapView的公有方法作一個詳細說明。

MapView中的公有方法
int addLayer(Layer layer, int index)
添加圖層在給定的索引。
int addLayer(Layer layer)
添加一個圖層
void addLayers(Layer[] layerArray)
添加圖層列表
void centerAndZoom(double lat, double lon, float levelOrFactor)
MapView初始化時,縮放到給定的座標及顯示級別。
void centerAt(double lat, double lon, boolean animated)
MapView初始化時,縮放到指定 座標,animated表示是否顯示動畫效果。
void centerAt(Point centerPt, boolean animated)
MapView初始化時,縮放到指定Point,animated表示是否顯示動畫效果。
Bitmap createSymbolImage(Symbol symbol, Geometry geometry, int width, int height, int color)
這個方法在API  級別10.2.2 被棄用。請使用 getLegendImage(Symbol, Geometry, int, int, int) 替代。
Bitmap[] createSymbolImages(Symbol[] symbol, Geometry[] geometry, int width, int height, int color)
這個方法在API  級別10.2.2 被棄用。請使用 getLegendImages(Symbol[], Geometry[], int, int, int) 替代。
void enableWrapAround(boolean enable)
啓用或禁用旋轉地圖功能。
ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs)
Callout getCallout()
返回一個氣泡彈窗窗口。
Point getCenter()
放回當前MapView的中心點。
Bitmap getDrawingMapCache(float x, float y, int w, int h)
經過屏幕座標和長寬獲取MapView截圖。
Polygon getExtent()
返回當前可視區域範圍。
Grid getGrid()
返回地圖格網信息,格網的顯示狀態經過該實例控制。
Layer getLayer(int index)
經過給定索引獲取圖層。
Layer getLayerByID(long layerID)
經過圖層ID獲取圖層。
Layer getLayerByURL(String url)
經過在線地圖服務的Url獲取圖層。
Layer[] getLayers()
獲取MapView中全部圖層。
LocationDisplayManager getLocationDisplayManager()
獲取位置管理類  LocationDisplayManager.
Envelope getMapBoundaryExtent()
該方法在API 級別 10.2.2被棄用。使用getMaxExtent() 代替。
Envelope getMaxExtent()
獲取MapView的最大範圍。
double getMaxResolution()
該方法在API 級別  10.2.2被棄用。使用 getMinScale() 代替。
double getMaxScale()
返回最大比例尺。
double getMinResolution()
該方法在API 級別 10.2.2 被棄用。使用 
double getMinScale()
返回最小比例尺。
OnLongPressListener getOnLongPressListener()
獲取長按事件 OnLongPressListener。
OnPanListener getOnPanListener()
獲取平移事件 OnPanListener。
OnPinchListener getOnPinchListener()
獲取捏恰事件 OnPinchListener。
OnSingleTapListener getOnSingleTapListener()
獲取單擊事件 onSingleTapListener。
OnStatusChangedListener getOnStatusChangedListener()
獲取 MapView狀態改變事件 OnStatusChangedListener 。
OnZoomListener getOnZoomListener()
獲取縮放事件 OnZoomListener。
double getResolution()
返回 MapView的分辨率。
double getRotationAngle()
返回當前地圖的旋轉角度,逆時針方向。
double getScale()
獲取地圖比例尺。
SpatialReference getSpatialReference()
返回MapView空間座標系統。
boolean isAllowOneFingerZoom()
返回true ,是否容許一個手指縮放地圖。
boolean isAllowRotationByPinch()
返回true ,若是旋轉縮放是容許的。
boolean isLoaded()
返回true ,若是MapView初始化完成。
boolean isRecycled()
返回true ,若是MapView已回收。
boolean isShowMagnifierOnLongPress()
檢查地圖放大鏡功能是否啓用。
void onChildViewAdded(View parent, View child)
void onChildViewRemoved(View parent, View child)
void pause()
暫停地圖。
void recycle()
釋放 MapView引用的資源,以便他們能夠回收。
void removeAll()
刪除全部圖層。
void removeLayer(int index)
刪除指定索引圖層。
void removeLayer(Layer layer)
刪除指定圖層。
void restoreState(String state)
利用保存的地圖的中心的座標,當前地圖的分辨率,和LocationDisplayManager狀態(是否活躍和是否autopan)字符串恢復信息。
String retainState()
保存地圖的中心的座標,當前地圖的分辨率,和LocationDisplayManager狀態(是否活躍和是否autopan)做爲一個字符串。
void setAllowMagnifierToPanMap(boolean allow)
設置當放大鏡顯示時,是否可以平移地圖。
void setAllowOneFingerZoom(boolean allowOneFingerZoom)
容許/不容許一個手指縮放。
void setAllowRotationByPinch(boolean allowRotationByPinch)
容許/不容許縮放旋轉。
void setEsriLogoVisible(boolean visible)
打開或關閉ESRI的logo。
void setExtent(Geometry geometry, int padding)
設置空間範圍。
void setExtent(Geometry geometry)
設置當前地圖顯示的空間範圍。
void setExtent(Geometry geometry, int padding, boolean animated)
設置空間範圍。
void setMapBackground(int bkColor, int gridColor, float gridSize, float gridLineSize)
設置地圖背景顏色和網格。
boolean setMapOptions(MapOptions options)
設置地圖底圖參數 MapOptions。
void setMaxExtent(Envelope env)
設置地圖顯示的邊界範圍
void setMaxResolution(double maxResolution)
void setMaxScale(double maxScale)
設置地圖最大比例尺。
void setMinResolution(double minResolution)
 setMaxScale(double)  替代。
void setMinScale(double minScale)
設置底圖最小比例尺。
void setOnLongPressListener(OnLongPressListener onLongPressListener)
設置長按監聽事件。
void setOnPanListener(OnPanListener onPanListener)
設置平移監聽事件。
void setOnPinchListener(OnPinchListener onPinchListener)
設置捏掐監聽事件。
void setOnSingleTapListener(OnSingleTapListener onSingleTapListener)
設置單擊監聽事件。
void setOnStatusChangedListener(OnStatusChangedListener onStatusChangedListener)
設置地圖狀態改變監聽事件。
void setOnZoomListener(OnZoomListener onZoomListener)
設置放大縮小監聽事件。
void setResolution(double res)
設置分辨率。
void setRotationAngle(double degree, Point centerPt, boolean animated)
在給定點居中顯示,並旋轉到給定角度。 animated 是否啓用動畫效果。
 
void setRotationAngle(double degree, boolean animated)
旋轉地圖到給定角度, animated 是否啓用動畫效果。
void setRotationAngle(double degree)
旋轉地圖到給定角度。
void setRotationAngle(double degree, float pivotX, float pivotY)
以某個點爲中心旋轉地圖。
void setScale(double scale, boolean animated)
設置地圖比例尺; animated是否啓用動畫效果。
void setScale(double scale)
設置底圖比例尺。
void setShowMagnifierOnLongPress(boolean showMagnifier)
設置是否長按啓用放大鏡功能。
Future<Boolean> switchBaseMap(BaseMap basemap, Portal portal, OnBaseMapSwitchListener listener)
切換底圖。
Point toMapPoint(float screenx, float screeny)
將屏幕上的點轉換成地理座標點。
Point toMapPoint(Point src)
將屏幕上的點轉換成地理座標點。
Point toScreenPoint(Point src)
將地理座標點轉換成屏幕上的點。
void unpause()
取消暫停地圖。
void zoomTo(Point centerPt, float factor)
縮放到給定點。
void zoomToResolution(Point centerPt, double res)
設定中心點,縮放到給定分辨率水平。
void zoomToScale(Point centerPt, double scale)
設定中心點,縮放到指定比例尺。
void zoomin()
放大地圖。
void zoomin(boolean animated)
放大地圖。
void zoomout()
縮小地圖。
void zoomout(boolean animated)
縮小地圖。

 

以上內容翻譯如有錯誤,歡迎你們留言批評指出!

相關文章
相關標籤/搜索