當前位置:首頁 » 安卓系統 » android地圖開發實例

android地圖開發實例

發布時間: 2025-01-28 11:04:41

1. ArcGIS for Android入門(kotlin):環境配置與地圖顯示

本文介紹基於ArcGIS Runtime API for Android的開發方法,重點在於環境配置與地圖顯示。開發環境為Android Studio,使用語言為Kotlin。

在Android Studio新建項目後,添加依賴庫和數據綁定。

在build.gradle(project)中加入以下代碼:

隨後,在build.gradle(Mole)中添加以下依賴:

dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'com.esri.arcgisruntime:arcgis-android:100.12.0 '}

開啟databinding功能:

buildFeatures { viewBinding true }

在AndroidManifest.xml中為應用添加網路訪問許可權,以支持谷歌地圖的下載。

在activity_main.xml中添加mapview組件,用於顯示地圖與用戶交互。

databinding用於數據綁定,減少布局與邏輯耦合,使代碼邏輯清晰。可以直接綁定數據到xml中,並實現自動刷新,減少findviewbyId的使用,降低Activity代碼量。

在MainActivity中實現地圖顯示功能,包括設置API密鑰,獲取谷歌地圖訪問許可權。

至此,完成了app中的地圖顯示功能。下文將主要講解繪圖和定位功能。

2. android百度地圖怎麼開發

網路地圖

一、基本概念:
(一)、網路地圖:
網路地圖 Android SDK是一套基於Android 2.1及以上版本設備的應用程序介面。 您可以使用該套 SDK開發適用於Android系統移動設備的地圖應用,通過調用地圖SDK介面,您可以輕松訪問網路地圖服務和數據, 構建功能豐富、交互性強的地圖類應用程序。
網路地圖Android SDK提供的所有服務是免費的,介面使用無次數限制。您需申請密鑰(key)後, 才可使用網路地圖Android SDK。
(二)、LBS:(Location based Service)基於位置的服務
基於位置的服務,它是通過電信移動運營商的無線電通訊網路(如GSM網、CDMA網)或外部定位方式(如GPS)獲取移動終端用戶的位置信息(地理坐標,或大地坐標),在地理信息系統(外語縮寫:GIS、外語全稱:Geographic Information System)平台的支持下,為用戶提供相應服務的一種增值業務。

二、網路地圖使用步驟:【參照(http://developer..com/map/sdk-android.htm)】
(一)、HelloBaiMap:
1、第一步:申請網路地圖密鑰(API_KEY):
http://developer..com/map/sdk-android.htm

2、第二步:在工程里新建libs文件夾,將開發包里的mapapi_vX_X_X.jar拷貝到libs根目錄下,將libBaiMapSDK_vX_X_X.so拷貝到libs\armeabi目錄下(官網demo里已有這兩個文件,如果要集成到自己的工程里,就需要自己添加),拷貝完成後的工程目錄如下圖所示;

註:liblocSDK3.so和locSDK_3.1.jar為網路定位SDK所使用資源,開發者可根據實際需求自行添加。

3、第三步:在AndroidManifest中添加開發密鑰、所需許可權等信息;
<application

<meta-data

android:name="com..lbsapi.API_KEY"

android:value="P3G69b5s87YG5M31f8A7oyLW"/>

</application>

<uses-permissionandroid:name="android.permission.GET_ACCOUNTS"/>

<uses-permissionandroid:name="android.permission.USE_CREDENTIALS"/>

<uses-permissionandroid:name="android.permission.MANAGE_ACCOUNTS"/>

<uses-permissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"/>

<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permissionandroid:name="android.permission.INTERNET"/>

<uses-permissionandroid:name="com.android.launcher.permission.READ_SETTINGS"/>

<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>

<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permissionandroid:name="android.permission.BROADCAST_STICKY"/>

<uses-permissionandroid:name="android.permission.WRITE_SETTINGS"/>

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
4、第四步:在布局文件中添加地圖控制項:
<com..mapapi.map.MapView

android:id="@+id/mapView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:clickable="true"/>
5、第五步:在應用程序創建時初始化 SDK引用的Context 全局變數:
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 在使用SDK各組件之前初始化context信息,傳入ApplicationContext
// 注意該方法要再setContentView方法之前實現
SDKInitializer.initialize(getApplicationContext());

// 裝載布局文件
setContentView(R.layout.activity_main);
}
6、第六步:創建地圖Activity,管理地圖生命周期:
publicclass MainActivity extends Activity {

private MapView mapView;

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 在使用SDK各組件之前初始化context信息,傳入ApplicationContext

// 注意該方法要再setContentView方法之前實現

SDKInitializer.initialize(getApplicationContext());

// 裝載布局文件

setContentView(R.layout.activity_main);

mapView = (MapView) findViewById(R.id.mapView);

}

@Override

protectedvoid onResume() {

super.onResume();

mapView.onResume();

}

@Override

protectedvoid onPause() {

super.onPause();

mapView.onPause();

}

@Override

protectedvoid onDestroy() {

super.onDestroy();

mapView.onDestroy();

}

}
(二)、基礎地圖:
1、實現基礎地圖的操作步驟:
布局文件中使用MapView;
初始化SDK,並檢查Key的合法性;
SDKInitializer.initialize(getApplicationContext());
checkKEY();
初始化BaiMap對象;
對MapView進行findViewById();
MapView對象調用getMap(),返回BaiMap;
設置BaiMap;
setMapType();
setTrafficEnabled();
(三)、POI搜索:
1、實現POI搜索的操作步驟:
布局文件中使用fragment,用來實現對BaiMap的載入;
class="com..mapapi.map.SupportMapFragment"
當前Activity繼承於FragementActivity;
初始化SDK,並檢查Key的合法性;
SDKInitializer.initialize(getApplicationContext());
checkKEY();
備註:該兩句話必須放在setContentView()之前。
初始化BaiMap對象;
Map = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.fragment_poi_map)).getBaiMap();
初始化PoiSearch對象;
PoiSearch.newInstance();
給PoiSearch對象設置監聽器;
(),重寫onGetPoiResult()方法;
自定義PoiOverlay類,實現對每個標記的單擊監聽;
通過onPoiClick()方法,獲取每個PoiInfo中的信息。如果這個對象中包含有明細,可以打開一個新頁面來展示興趣點的詳細介紹。
在AndroidManifest.xml文件中配置PlaceCaterActivity頁面;
該頁面是Bai提供的POI的明細介紹頁面。
PoiSearch對象調用searchInBound()、searchInCity() 、 searchNearby()方法實現興趣點查詢。
【總結:】核心步驟:
實例化BaiMap,PoiSearch對象;
PoiSearch對象設置OnGetPoiSearchResultListener()監聽;
PoiSearch對象調用searchInCity()方法觸發監聽。
(四)、線路規劃:
1、實現路線規劃的操作步驟:
布局文件中使用MapView,用來實現對BaiMap的載入;
初始化SDK,並檢查Key的合法性;
SDKInitializer.initialize(getApplicationContext());
checkKEY();
初始化MapView;
調用findViewById()
初始化BaiMap對象;
Map = MapView對象.getMap();
初始化RoutePlanSearch對象;
RoutePlanSearch.newInstance();
給RoutePlanSearch對象設置監聽器;
(),重寫onGetWalkingRouteResult()、onGetTransitRouteResult()、onGetDrivingRouteResult()方法;
自定義三種RouteOverlay類(WalkingRouteOverlay、TransitRouteOverlay、DrivingRouteOvelray);
調用RoutePlanSearch對象的三種方法(drivingSearch()、transitSearch()、walkingSearch())實現路線規劃。
【總結:】核心步驟:
實例化BaiMap,RoutePlanSearch對象;
RoutePlanSearch對象設置OnGetRoutePlanResultListener監聽;
RoutePlanSearch對象調用drivingSearch()、transitSearch()、walkingSearch()方法觸發監聽。
(五)、公交查詢:
1、實現公交查詢的操作步驟:
布局文件中使用fragment,用來實現對BaiMap的載入;
class="com..mapapi.map.SupportMapFragment"
初始化SDK,並檢查Key的合法性;
SDKInitializer.initialize(getApplicationContext());
checkKEY();
當前Activity繼承於FragementActivity;
初始化BaiMap對象;
Map = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.fragment_poi_map)).getBaiMap();
初始化PoiSearch對象/初始化BusLineSearch對象;
PoiSearch.newInstance();
BusLineSearch.newInstance();
給BusLineSearch對象設置監聽器;
(),重寫onGetBusLineResult()方法;
給PoiSearch對象設置監聽器;
(),重寫onGetPoiResult()方法;
在這個監聽器中調用BusLineSearch對象的searchBusLine()方法;
給按鈕增加單擊監聽事件,實現PoiSearch對象的searchInBound()、searchInCity() 、 searchNearby()方法實現興趣點查詢。
【總結:】核心步驟:
實例化BaiMap、PoiSearch對象及BusLineSearch對象;
PoiSearch對象設置OnGetPoiSearchResultListener()監聽;BusLineSearch對象設置監聽;
在PoiSearch對象的監聽回調方法onGetPoiResult()中調用busLineSearch對象的searchBusLine()方法;
PoiSearch對象調用searchInCity()方法觸發整個監聽。

【備註:】
整體思路:先調用POI查詢,在POI查詢中的監聽器中執行BusLine查詢。

3. Android騫沖彴楂樺痙API緇忛獙錛氶暱鎸夊湴鍥捐幏鍙栦綅緗淇℃伅

Android寮鍙戣繃紼嬩腑,鏈夊緢澶氭墜鍔挎搷浣滈兘寰堣╀漢鍙堢埍鍙堟仺銆備竴鏂歸潰鍙浠ユ洿渚挎嵎鐨勪綋鐜版洿澶氬姛鑳,鎻愬崌搴旂敤鐨勪綋楠,涓鏂歸潰綣佸嶅氬彉鐨勬搷浣滆儗鍚庢湁鐫璁稿氬紑鍙戞妧宸у拰闅鵑樸傝繖閲屽垎浜涓涓闀挎寜鍦板浘鑾峰彇浣嶇疆淇℃伅鐨勬墜鍔褲 涓轟簡鏇存槑浜,鍏堜笂涓灞曠ず鏁堟灉:闀挎寜鍦板浘鏌愮偣鏄劇ず璇ョ偣鍦扮悊浣嶇疆淇℃伅鍔熻兘 閫氳繃鏋勯犱竴涓猯ocationSelectOverlay綾繪潵瀹氫箟璇ュ姛鑳,鍦ㄥ湴鍥句笂瀵歸暱鎸夋墜鍔胯繘琛岀洃鍚,涓鏃︽湁榪欎釜浜嬩歡鍙戠敓灝辮皟鐢╣etAddressFromServer()鏂規硶鏉ユ樉紺哄湴鍧淇℃伅銆 鍦ㄨュ伐紼嬩腑鍒嗗埆瀹氫箟4涓綾籰ongPressMap.java,locationSelectOverlay.java,popUpPanel.java,Constants.java longPressMap.java涓烘樉紺轟竴涓鍦板浘綾,閫氳繃瀹炰緥鍖栦竴涓猯ocationSelectOverlay綾誨疄鐜伴暱鎸夊湴鍥炬樉紺哄湴鐞嗕綅緗淇℃伅鍔熻兘浠g爜濡備笅: //longPressMap 綾葷戶鎵縈apActivity瀵筸apview璧勬簮榪涜岀$悊 public class longPressMap extends MapActivity { private MapView mMapView; locationSelectOverlay mSelectLay; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //浣跨敤setContentView鏂規硶璋冪敤R.layout.activity_regeocoder甯冨矓鏂囦歡,鏄劇ず鍦板浘 setContentView(R.layout.geocoder); //鑾峰彇鍦板浘瑙嗗浘鐨剗d,璧嬪肩粰mMapView mMapView = ((MapView) findViewById(R.id.geocode_MapView)); // 璁劇疆鍚鐢ㄥ唴緗鐨勭緝鏀炬帶浠 mMapView.setBuiltInZoomControls(true); //瀹炰緥鍖栦竴涓猯ocationSelectOverlay綾 mSelectLay = new locationSelectOverlay(this, mMapView, new popUpPanel(this, mMapView)); //灝嗚ュ姛鑳藉姞杞藉埌姝ゅ湴鍥句笂,鍚鐢ㄩ暱鎸夊湴鍥炬樉紺鴻ョ偣鍦板潃淇℃伅鐨勫姛鑳 mMapView.getOverlays().add(mSelectLay); } } 澶嶅埗浠g爜 locationSelectOverlay紺轟緥浠g爜濡備笅: //locationSelectOverlay綾葷戶鎵縊verlay鎺ュ彛,瀹炵幇OnGestureListener鎵嬪娍鐩戝惉 public class locationSelectOverlay extends Overlay implements OnGestureListener { public popUpPanel mTipPanel;  //澹版槑涓涓寮瑰嚭妗嗗硅薄 GeoPoint mSelectPoint;    //澹版槑涓涓鍦扮悊鍧愭爣鐐瑰硅薄 MapView mMapView;    //澹版槑涓涓鍦板浘瑙嗗浘瀵硅薄 Context mContext;     //媧誨姩瀵硅薄 TextView mTipText=null;   //澹版槑涓涓鏂囨湰瀵硅薄 private static String nearbystr=""; private GestureDetector gestureScanner; //澹版槑涓涓鎵嬪娍鐩戝惉瀵硅薄 privateGeocoder coder;   //澹版槑涓涓閫嗗湴鐞嗙紪鐮佸硅薄 private String addressName="";   //澹版槑涓涓鍦板潃鍚嶇О瀛楃︿覆 //闀挎寜鍦板浘鏌愮偣鑾峰彇淇℃伅鐨勬瀯閫犲嚱鏁般 public locationSelectOverlay(Activity context,MapView mapView,popUpPanel panel) { this.mContext=context; this.mMapView=mapView; this.mTipPanel=panel; gestureScanner = new GestureDetector(this); //澹版槑涓涓鎵嬪娍鐩戝惉瀵硅薄 coder = new Geocoder(context);   //澹版槑涓涓閫嗗湴鐞嗙紪鐮佸硅薄 } //鐢℉andler鍑芥暟澶勭悊浼犻掓潵鐨勫湴鍧淇℃伅,鏄劇ず鍦ㄦ枃鏈妗嗕腑 private Handler mGeocoderHandler = new Handler() { public void handleMessage(Message msg) { //濡傛灉鏈夊湴鍧淇℃伅鐨勬秷鎮鍙戦佽繃鏉,灝嗘枃鏈妗嗕腑璁劇疆涓鴻ュ湴鍧淇℃伅 if(msg.what == Constants.REOCODER_RESULT) { if(mTipText!=null) mTipText.setText(addressName); } //濡傛灉鏄劇ず閿欒,鍒欐枃鏈妗嗕腑璁劇疆鎶ラ敊淇℃伅 else if(msg.what == Constants.ERROR) { Toast.makeText(mContext, "鑾峰彇鍦板潃澶辮觸,璇烽噸璇", Toast.LENGTH_SHORT).show(); removeTipPanel(); } } }; //鏄劇ず寮瑰嚭紿楀彛 public boolean showTap(GeoPoint p) { View view = mTipPanel.getView(); mMapView.removeView(view); //甯冨矓鍙傛暟璁劇疆 MapView.LayoutParams geoLP = new MapView.LayoutParams( MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT, p, MapView.LayoutParams.BOTTOM_CENTER); //寮瑰嚭紿楀彛鐨勬枃鏈鏄劇ず mTipText = (TextView) view.findViewById(R.id.GeoName); mTipText.setText("姝e湪鍔犺澆鍦板潃..."); mTipText.setOnClickListener(new OnClickListener() { public void onClick(View v) { } }); //鍦ㄥ湴鍥捐嗗浘涓婃坊鍔犺ュ脊鍑虹獥鍙h嗗浘 mMapView.addView(view, geoLP); return false; } //浠庣粡綰搴﹀潗鏍囩偣鑾峰彇瀵瑰簲鐨勫湴鍧淇℃伅 publicvoid getAddressFromServer(final GeoPoint point,final Handler handler) { //澹版槑涓涓綰跨▼ new Thread(){ public void run() { try { // 閫嗗湴鐞嗙紪鐮乬etFromLocation()鍑芥暟鑾峰彇璇ョ偣瀵瑰簲鐨勫墠3涓鍦板潃淇℃伅 ListAddress address = coder.getFromLocation((double)point.getLatitudeE6()/1E6, (double)point.getLongitudeE6()/1E6, 3); if (address != null) { //鑾峰彇絎涓涓鍦板潃淇℃伅 Address addres = address.get(0); addressName = ""; if(addres.getAdminArea()!=null) addressName+=addres.getAdminArea(); if(addres.getSubLocality()!=null) addressName += addres.getSubLocality(); if(addres.getFeatureName()!=null) addressName += addres.getFeatureName(); addressName += "闄勮繎"; handler.sendMessage(Message .obtain(handler, Constants.REOCODER_RESULT)); } } catch (AMapException e) { // TODO Auto-generated catch block handler.sendMessage(Message .obtain(handler, Constants.ERROR)); } } }.start(); //綰跨▼鍚鍔 } //縐昏蛋寮瑰嚭紿楀彛 public void removeTipPanel() { View view = mTipPanel.getView(); mMapView.removeView(view); } //鑾峰彇鎵嬪娍鎿嶄綔 public boolean onTouchEvent(MotionEvent event, MapView mapView) { return gestureScanner.onTouchEvent(event); } @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub return false; } //闀挎寜鍦板浘,寮瑰嚭鎻愮ず妗,鏄劇ず璇ョ偣鍦板潃淇℃伅 @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub int x = (int)e.getX(); int y = (int)e.getY(); mSelectPoint = mMapView.getProjection().fromPixels(x, y); //璋冪敤鏄劇ず鎻愮ず妗嗗嚱鏁 showTap(mSelectPoint); //璋冪敤浠庣粡綰搴︾偣鑾峰彇鍦板潃淇℃伅鍑芥暟 getAddressFromServer(mSelectPoint,mGeocoderHandler); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub return false; } 澶嶅埗浠g爜 pouUpPanel瀹氫箟浜嗗脊鍑虹獥鍙g被 public class popUpPanel { private boolean isVisible = false; private MapView mMapView; private View popup; public popUpPanel(Activity paramActivity, MapView paramMapView) { this.mMapView = paramMapView; ViewGroup localViewGroup = (ViewGroup)this.mMapView.getParent(); //璁劇疆寮瑰嚭鐨勮嗗浘鏄痠d涓篟.layout.activity_long_press_map鐨勮嗗浘 this.popup = paramActivity.getLayoutInflater().inflate(R.layout.activity_long_press_map, localViewGroup, false); 鈥 澶嶅埗浠g爜 Constants 瀹氫箟浜嗕紶閫掔殑甯擱噺瀵瑰簲鐨勫礆紝濡俻ublic static finalint REOCODER_RESULT=3000; 琛ㄧず閫嗗湴鐞嗙紪鐮佺粨鏋滃父閲忥紝public staticfinal int ERROR=1001; 琛ㄧず鍑虹幇閿欒甯擱噺銆

4. android開發如何用高德地圖進行模擬定位

一、 要實現高德地圖定位呢,首先需要做好以下幾步准備: 1 在高德開放平台注冊帳號 2 在開發中下載Android平台下的地圖SDK和定位SDK文件 進入相關下載下載自己想要的功能或文件,圖只是截取了地圖SDK的頁面,定位SDK也是一樣,按自己想要的文android開發如何用高德地圖進行模擬定位

熱點內容
電腦和伺服器的ip地址 發布:2025-01-30 03:52:01 瀏覽:660
java中的排序 發布:2025-01-30 03:49:51 瀏覽:933
linux登錄linux 發布:2025-01-30 03:49:05 瀏覽:263
cf源碼群 發布:2025-01-30 03:39:27 瀏覽:311
打賞的源碼 發布:2025-01-30 03:36:27 瀏覽:915
靜零演算法 發布:2025-01-30 03:25:12 瀏覽:767
android根目錄路徑 發布:2025-01-30 03:20:22 瀏覽:90
安卓在手機上買的內存怎麼用 發布:2025-01-30 03:15:26 瀏覽:232
路由器如何配置靜態ip路由 發布:2025-01-30 03:13:56 瀏覽:73
默認網簽密碼是多少 發布:2025-01-30 03:05:41 瀏覽:102