使用MapLibre 適用於安卓系統的GL 本機SDK 與亞馬遜 ...

文章推薦指數: 80 %
投票人數:10人

使用MapLibre GL 原生SDK 將交互式地圖嵌入到您的Android 應用程序中。

使用MapLibre適用於安卓系統的GL本機SDK與亞馬遜LocationService-AmazonLocationServiceAWS文件AmazonLocationService開發人員指南初始化組態活動配置請求轉換主要活動本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用MapLibre適用於安卓系統的GL本機SDK與亞馬遜LocationService使用MapLibreGL原生SDK將交互式地圖嵌入到您的Android應用程序中。

所以此MapLibre適用於安卓的GL本機SDK是一個基於映射框GL原生,並且與亞馬遜LocationService地圖API提供的樣式和磁貼兼容。

您可以集成MapLibreGL原生SDKforAndroid的軟件開發工具包,在Android應用程序中嵌入交互式地圖和可擴展的可自定義矢量映射。

本教學課程介紹如何將MapLibre適用於安卓的GL本機SDK,具有亞馬遜位置。

本教程的示例應用程序可作為亞馬遜LocationService示例存儲庫的一部分提供,GitHub。

建置應用程式:初始化 初始化應用程序: 創建一個新的安卓工作室項目空白活動Template 確認科特林為項目語言選擇。

選取API14的最低軟件開發工具包:安卓4.0(冰淇淋三明治)或更新版本。

開啟項目結構,然後前往File(檔案)>專案結構...以選擇相依性區段。

搭配,然後選擇+按鈕添加新的庫依賴關係。

AddAWSAndroid開發套件2.20.0版或更新版本。

例如:com.amazonaws:aws-android-sdk-core:2.20.0 新增適用Android的MapLibreGL原生開發套件9.4.0版或更新版本。

例如:org.maplibre.gl:android-sdk:9.4.0 在您的項目級別建立.gradle文件中,添加以下Maven存儲庫來訪問適用於Android的MapLibre軟件包: allprojects{ repositories{ //Retainyourexistingrepositories google() jcenter() //DeclaretherepositoriesforMapLibre mavenCentral() } } 建置應用程式:組態 要使用您的資源和AWS區域: us-east-1:54f2ba88-9390-498d-aaa5-0d97fb7ca3bd ExampleMap us-east-1 建置應用程式:活動配置 Edit(編輯)app/src/main/res/layout/activity_main.xml: 新增MapView,這將呈現地圖。

這也將設置地圖的初始中心點。

新增TextView,其中顯示歸因。

注意您必須在應用程序或文檔中為您使用的每個數據提供程序提供文字標記或文本歸因。

屬性字符串包含在樣式描述符響應中sources.esri.attribution和sources.here.attributionkeys。

將亞馬遜位置資源與數據提供程序,請確保閲讀服務條款和條件。

建置應用程式:請求轉換 建置一個名為SigV4Interceptor攔截AWS請求並使用Signature第4版。

這將在創建主活動時註冊到用於獲取映射資源的HTTP客户端。

packageaws.location.demo.okhttp importcom.amazonaws.DefaultRequest importcom.amazonaws.auth.AWS4Signer importcom.amazonaws.auth.AWSCredentialsProvider importcom.amazonaws.http.HttpMethodName importcom.amazonaws.util.IOUtils importokhttp3.HttpUrl importokhttp3.Interceptor importokhttp3.Request importokhttp3.Response importokio.Buffer importjava.io.ByteArrayInputStream importjava.net.URI classSigV4Interceptor( privatevalcredentialsProvider:AWSCredentialsProvider, privatevalserviceName:String ):Interceptor{ overridefunintercept(chain:Interceptor.Chain):Response{ valoriginalRequest=chain.request() if(originalRequest.url().host().contains("amazonaws.com")){ valsigner=if(originalRequest.url().encodedPath().contains("@")){ //thepresenceof"@"indicatesthatitdoesn'tneedtobedoubleURL-encoded AWS4Signer(false) }else{ AWS4Signer() } valawsRequest=toAWSRequest(originalRequest,serviceName) signer.setServiceName(serviceName) signer.sign(awsRequest,credentialsProvider.credentials) returnchain.proceed(toSignedOkHttpRequest(awsRequest,originalRequest)) } returnchain.proceed(originalRequest) } companionobject{ funtoAWSRequest(request:Request,serviceName:String):DefaultRequest{ //clonetherequest(AWS-style)sothatitcanbepopulatedwithcredentials valdr=DefaultRequest(serviceName) //copyrequestinfo dr.httpMethod=HttpMethodName.valueOf(request.method()) with(request.url()){ dr.resourcePath=uri().path dr.endpoint=URI.create("${scheme()}://${host()}") //copyparameters for(pinqueryParameterNames()){ if(p!=""){ dr.addParameter(p,queryParameter(p)) } } } //copyheaders for(hinrequest.headers().names()){ dr.addHeader(h,request.header(h)) } //copytherequestbody valbodyBytes=request.body()?.let{body-> valbuffer=Buffer() body.writeTo(buffer) IOUtils.toByteArray(buffer.inputStream()) } dr.content=ByteArrayInputStream(bodyBytes?:ByteArray(0)) returndr } funtoSignedOkHttpRequest( awsRequest:DefaultRequest, originalRequest:Request ):Request{ //copysignedrequestbackintoanOkHttpRequest valbuilder=Request.Builder() //copyheadersfromthesignedrequest for((k,v)inawsRequest.headers){ builder.addHeader(k,v) } //startbuildinganHttpUrl valurlBuilder=HttpUrl.Builder() .host(awsRequest.endpoint.host) .scheme(awsRequest.endpoint.scheme) .encodedPath(awsRequest.resourcePath) //copyparametersfromthesignedrequest for((k,v)inawsRequest.parameters){ urlBuilder.addQueryParameter(k,v) } returnbuilder.url(urlBuilder.build()) .method(originalRequest.method(),originalRequest.body()) .build() } } } 建置應用程式:主要活動 主要活動負責初始化將向用户顯示的視圖。

這涉及: 實例化AmazonCognitoCredentialsProvider。

註冊簽章第4版攔截器。

通過將地圖指向地圖樣式描述符並顯示相應的屬性來配置地圖。

MainActivity還負責將生命週期事件轉發到地圖視圖,從而允許它在調用之間保留活動視區。

packageaws.location.demo.maplibre importandroid.os.Bundle importandroid.widget.TextView importandroidx.appcompat.app.AppCompatActivity importaws.location.demo.okhttp.SigV4Interceptor importcom.amazonaws.auth.CognitoCachingCredentialsProvider importcom.amazonaws.regions.Regions importcom.mapbox.mapboxsdk.Mapbox importcom.mapbox.mapboxsdk.maps.MapView importcom.mapbox.mapboxsdk.maps.Style importcom.mapbox.mapboxsdk.module.http.HttpRequestUtil importokhttp3.OkHttpClient privateconstvalSERVICE_NAME="geo" classMainActivity:AppCompatActivity(){ privatevarmapView:MapView?=null overridefunonCreate(savedInstanceState:Bundle?){ super.onCreate(savedInstanceState) //configuration validentityPoolId=getString(R.string.identityPoolId) valregion=getString(R.string.awsRegion) valmapName=getString(R.string.mapName) //Credentialinitialization valcredentialProvider=CognitoCachingCredentialsProvider( applicationContext, identityPoolId, Regions.fromName(identityPoolId.split(":").first()) ) //initializeMapLibre Mapbox.getInstance(this,null) HttpRequestUtil.setOkHttpClient( OkHttpClient.Builder() .addInterceptor(SigV4Interceptor(credentialProvider,SERVICE_NAME)) .build() ) //initializetheview setContentView(R.layout.activity_main) //initializethemapview mapView=findViewById(R.id.mapView) mapView?.onCreate(savedInstanceState) mapView?.getMapAsync{map-> map.setStyle( Style.Builder() .fromUri("https://maps.geo.${region}.amazonaws.com/maps/v0/maps/${mapName}/style-descriptor") ){style-> findViewById(R.id.attributionView).text=style.sources.first()?.attribution } } } overridefunonStart(){ super.onStart() mapView?.onStart() } overridefunonResume(){ super.onResume() mapView?.onResume() } overridefunonPause(){ super.onPause() mapView?.onPause() } overridefunonStop(){ super.onStop() mapView?.onStop() } overridefunonSaveInstanceState(outState:Bundle){ super.onSaveInstanceState(outState) mapView?.onSaveInstanceState(outState) } overridefunonLowMemory(){ super.onLowMemory() mapView?.onLowMemory() } overridefunonDestroy(){ super.onDestroy() mapView?.onDestroy() } } 運行此應用程序以您選擇的樣式顯示全屏地圖。

此示例作為亞馬遜LocationService示例存儲庫的一部分提供,位於GitHub。

文件慣用形式MapLibreGLJS適用iOS的MapLibrationGL原生開發套件此頁面是否有幫助?-是感謝您,讓我們知道我們做得很好!若您有空,歡迎您告知我們值得讚許的地方,這樣才能保持良好服務。

此頁面是否有幫助?-否感謝讓我們知道此頁面仍須改善。

很抱歉,讓您失望。

若您有空,歡迎您提供改善文件的方式。



請為這篇文章評分?