Mapbox 地圖SDK極速集成指導(dǎo)

這次跟各位分享一個(gè)地圖的SDK。先說(shuō)說(shuō)為什么拿Mapbox來(lái)用吧。
首先就是——國(guó)際化。當(dāng)需求要顯示國(guó)外的地理位置信息的時(shí)候,通常使用的是Google Map。但是Google Map目前需要手機(jī)帶有完整的Google Play套件才行,但是基本上所有的國(guó)內(nèi)上市的手機(jī)都把Google Play套件閹割了。然后就是偏移量,從目前來(lái)看,Mapbox的路網(wǎng)和衛(wèi)星照片是重合的,而Google Map則是有一定的偏移,尤其是在中國(guó)。最后呢,Mapbox的集成方式實(shí)在是太簡(jiǎn)單了。不過(guò)呢,說(shuō)了這么多優(yōu)點(diǎn),再說(shuō)一個(gè)缺點(diǎn)。就是Mapbox的衛(wèi)星照片略慢,尤其是中國(guó),某些地方還停留在幾年前的樣子,這個(gè)以年為單位,一點(diǎn)都不夸張。
如果你需要做海外的地圖定位,個(gè)人認(rèn)為,Mapbox可作為首選。
下面說(shuō)一下具體的集成方法。
首先,需要去官網(wǎng)注冊(cè)一個(gè)賬號(hào),這里附上官網(wǎng)地址鏈接:
https://www.mapbox.com/
注冊(cè)完成后,進(jìn)入網(wǎng)頁(yè)Studio界面,我們會(huì)輕松找到Access Token。我們后面會(huì)用到。
然后新建一個(gè)Android項(xiàng)目,這里推薦targetAPI<23,但是必須大于15。
在app目錄下的build.gradle文件中添加下面的內(nèi)容,用來(lái)導(dǎo)入依賴庫(kù)。

repositories{mavenCentral()}
compile('com.mapbox.mapboxsdk:mapbox-android-sdk:4.2.0@aar') {
    transitive = true
}

這里注意版本,雖然復(fù)制粘貼過(guò)去沒(méi)有問(wèn)題,但是依賴庫(kù)的版本還在不斷更新,也許下一秒就發(fā)布4.2.1或者其他什么版本,所以這個(gè)還是有必要直接去官網(wǎng)上看一下。網(wǎng)址在此:
https://www.mapbox.com/android-sdk/
下一步我們?cè)诓季治募刑砑拥貓D控件,很簡(jiǎn)單,最簡(jiǎn)易的寫法可以像下面這樣:

<com.mapbox.mapboxsdk.maps.MapView
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

當(dāng)然,我們需要顯示一個(gè)自己比較熟悉的位置,而且還要能夠看得足夠清晰,可以寫成像下面這樣:

<com.mapbox.mapboxsdk.maps.MapView
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    mapbox:center_latitude="39.069"
    mapbox:center_longitude="117.221"
    mapbox:style_url="@string/style_satellite_streets"
    mapbox:zoom="15" />

這里提醒一下,在xml最上方加上命名空間,否則會(huì)報(bào)錯(cuò):

xmlns:mapbox="http://schemas.android.com/apk/res-auto"  

這樣做,可以同時(shí)顯示路網(wǎng)和衛(wèi)星照片,雖然衛(wèi)星照片可能比較過(guò)時(shí),但是確實(shí)很清楚。而且可以稍微移動(dòng)一下,看看國(guó)外的風(fēng)景,情況就大不一樣了。
下一步需要在Activity中完成初始化等操作,在onCreate()方法中添加如下代碼:

setContentView(R.layout.activity_main);
    MapboxAccountManager.start(this, getString(R.string.access_token));
    mv = (MapView) findViewById(R.id.mapview);
    mv.onCreate(savedInstanceState);
    mv.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(MapboxMap mapboxMap) {

        }
    });

當(dāng)然,這只是個(gè)例子。
這里要注意的就是必須在Activity中的各個(gè)生命周期中添加相應(yīng)的方法,比如onResume()中,需要加上:

mv.onResume();

其他生命周期回調(diào)類似。
最后在AndroidManifest.xml中做好相關(guān)權(quán)限聲明:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

還有一個(gè)Service:

<service android:name="com.mapbox.mapboxsdk.telemetry.TelemetryService" />

該Service在Application節(jié)點(diǎn)內(nèi)。
好了,運(yùn)行一下吧,一切順利的話就可以看到地圖的顯示了。

下面附上完整的項(xiàng)目源碼:
https://github.com/XiaoWenHan/MapboxAndroidDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,260評(píng)論 4 61
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,021評(píng)論 25 709
  • 將數(shù)據(jù)與地理信息疊加生產(chǎn)出數(shù)據(jù)地圖,是近年來(lái)數(shù)據(jù)新聞生產(chǎn)的一種重要方式。不過(guò)地圖生成一度是web上最困難的任務(wù)之一...
    媒文化的章伯閱讀 19,820評(píng)論 3 49
  • 音頻 AudioBus:下一代 App 到 App 的實(shí)時(shí)音頻路由。官網(wǎng) AudioKit:一個(gè)強(qiáng)大的音頻合成,處...
    voQuan閱讀 5,402評(píng)論 5 63
  • 多少游子歸來(lái)也認(rèn)出媽媽也認(rèn)不出村莊 我以為,村莊巋然不動(dòng),唯有人來(lái)人往。 有多少個(gè)男孩建起新屋,就有多少個(gè)女孩備好...
    張小麥的麥田閱讀 476評(píng)論 2 6

友情鏈接更多精彩內(nèi)容