1、前言
在上一篇內容里介紹了 關於ArcGIS Android開發的未來(“Quartz”版Beta)相關內容,期間也提到了關於API接口的重構,開發思路的調整,根據2015UC資料也可以知道新版預計將在明年的時候推出。屆時在開發思路上將會往新版遷移。
總的來說,雖然“Quartz”版的開發思路有所變化,但總體變化不大,這里我將繼續以現有正式發布版本為主梳理ArcGIS Runtime SDK for Android 開發內容。
參考API版本號:version 10.2.7。后續內容若不做特殊說明,均為此版本。
轉載請注明出處: http://www.cnblogs.com/gis-luq/p/4941715.html
2、空間數據的容器
2.1、地圖組件MapView概述
地圖組件是所有空間數據的容器,是ArcGIS Runtime SDK的核心組件,也是所有GIS應用開發中的入口和基礎。在ArcGIS Runtime SDK for Android中,地圖組件的類名是MapView,它是Android中ViewGroup的子類,它與很多ArcGIS API中的Map、MapControl類作用是一樣的。
MapView提供了完善的地圖顯示與控制功能:
- MapView具有呈現數據的能力,它可以添加一個或多個圖層,所有圖層只有添加到MapView容器中才能進行顯示;
- MapView可以設置地圖的顯示范圍和比例尺、旋轉角度、地圖背景、地圖的最大/最小分辨率,以及指定當前顯示的分辨率/比例尺;
- MapView提供了豐富的手勢監聽接口,通過這些監聽可以實現各種手勢動作,如點擊、雙擊、移動或長按等操作。
特殊說明:MapView默認空間參考及空間范圍為所添加的第一個圖層的相關信息。
2.2、地圖組件MapView的使用
有兩種方式可以將MapView添加到應用當中:一個是XML方式,另一個是硬編碼方式;一般多采用XML方式,方便調整布局及其屬性相關設置。
2.2.1、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.2、XML方式添加MapView及初始化底圖
同樣的,MapOptions也可以通過xml和java兩種代碼的方式使用。上面示例中就是使用xml方式使用MapOptions,下列示例代碼是使用Java硬編碼的方式使用MapOptions以及將MapView控件添加到應用中。
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.3、地圖的方法
地圖組件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) | ||||||||||
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)
縮小地圖。
|
以上內容翻譯若有錯誤,歡迎大家留言批評指出!