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


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)
 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)
縮小地圖。

 

以上內容翻譯若有錯誤,歡迎大家留言批評指出!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM