Android使用高德地图添加天地图作为底图

由于部分地图高德地图卫星影像不够清晰,因此有需要使用天地图来作为底图的需求,接下来讲下如何实现。

首先申请高德地图和天地图apikey,此步骤自行百度。

首先AndroidManifest.xml中添加高德地图apikey(xxxx替换为你申请的key):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.bryant.tilemap">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar"
        tools:ignore="GoogleAppIndexingWarning"
        android:networkSecurityConfig="@xml/network_security_config"
        >
        <activity android:name="com.bryant.tilemap.SecondActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="xxxx" />
    </application>

</manifest>

activity_main.xml中添加Mapview:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/map"
    tools:context=".MainActivity"
    android:name="com.google.android.gms.maps.SupportMapFragment" >

    <com.amap.api.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

接下来看下Activity代码:

package com.bryant.tilemap;

import android.graphics.Point;
import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.CoordinateConverter;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.TileOverlayOptions;
import com.amap.api.maps.model.UrlTileProvider;
import com.bryant.tilemap.R;

import java.net.MalformedURLException;
import java.net.URL;

import butterknife.BindView;

public class SecondActivity extends AppCompatActivity {

    @BindView(R.id.mapView)
    MapView mapView;
    private AMap aMap;

    // 天地图 URL 模板
    final String url = "http://t4.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION" +
            "=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX=%s&" +
            "TILEROW=%s&TILECOL=%s&tk=xxx";

    final String url2 = "http://t4.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION" +
            "=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX=%s&" +
            "TILEROW=%s&TILECOL=%s&tk=xxx";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        cc();
        mapView = findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);
        aMap = mapView.getMap();
        aMap.getUiSettings().setZoomControlsEnabled(false);// 缩放按钮是否显示
        aMap.getUiSettings().setRotateGesturesEnabled(false);// 倾斜手势是否可用
        aMap.moveCamera(CameraUpdateFactory.zoomTo(9));//缩放级别
        aMap.getUiSettings().setLogoBottomMargin(50);//设置LOGO底部的距离
        aMap.getUiSettings().setLogoLeftMargin(50);//设置LOGO左边的距离
//        aMap.setMapType(AMap.MAP_TYPE_SATELLITE);

        // 显示地名
        aMap.showMapText(true);
        // 添加自定义瓦片到地图
        onlineLoad();

    }


    void onlineLoad(){
        UrlTileProvider mUrlTileProvider = new UrlTileProvider(256, 256) {
            @Override
            public URL getTileUrl(int x, int y, int zoom) {
                try {
                    String real_url = String.format(url, zoom, y, x);
                    LatLng mLatLng = aMap.getProjection().fromScreenLocation(new Point(x,y));
                    Log.e("getTileUrl",x+","+y+""+" "+mLatLng+" "+real_url);
//                    aMap.addMarker(new MarkerOptions().position(mLatLng).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
//                    aMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))).setPositionByPixels(x,y);
                    return new URL(real_url);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                return null;
            }
        };
        TileOverlayOptions tileOverlayOptions =
                new TileOverlayOptions().tileProvider(mUrlTileProvider);

        UrlTileProvider mUrlTileProvider2 = new UrlTileProvider(256, 256) {
            @Override
            public URL getTileUrl(int x, int y, int zoom) {
                try {
                    String real_url = String.format(url2, zoom, y, x);
                    LatLng mLatLng = aMap.getProjection().fromScreenLocation(new Point(x,y));
                    Log.e("getTileUrl2",x+","+y+""+" "+mLatLng+" "+real_url);
                    return new URL(real_url);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                return null;
            }
        };
        TileOverlayOptions tileOverlayOptions2 =
                new TileOverlayOptions().tileProvider(mUrlTileProvider2);

        aMap.addTileOverlay(tileOverlayOptions).setZIndex(1);
        aMap.addTileOverlay(tileOverlayOptions2).setZIndex(2);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }
}

注意:上面代码中的tk=xxx请换成天地图申请的key。

OK,这样就能使用高德地图加载天地图了。

这里加载了2个图层,一个是卫星影像图层,一个是卫星注记图层,如果不加卫星注记图层,地名无法正常显示。图层地址参考:天地图API

web端使用天地图的案例参考:web端实现高德地图加载天地图作为底图(使用WMTS)-CSDN博客

  • 15
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要在ArcGIS API中加载高德地图作为底图,需要按以下步骤操作: 1. 获取高德地图的服务URL。可以通过高德地图开放平台提供的API或其他方法获取到高德地图的服务URL。 2. 在ArcGIS API的地图对象中添加图层。首先,创建一个新的ArcGIS地图对象,并将高德地图的服务URL作为底图添加地图中。 ```javascript var map = new Map({ basemap: { baseLayers: [ new TileLayer({ portalItem: { id: { // 高德地图的服务URL // 例如:http://webrd0{subDomain}.is.autonavi.com/appmaptile?style=6&x={col}&y={row}&z={level} // "{level}" 表示缩放级别, "{col}" 表示列号, "{row}" 表示行号, "{subDomain}" 表示服务器子域 // 要根据高德地图的服务URL的具体格式进行替换 source: "<高德地图的服务URL>" } } }) ] } }); ``` 3. 创建视图对象并将地图对象附加到视图中。将地图对象设置为视图的地图属性,然后将视图附加到指定的DOM元素上。 ```javascript var view = new MapView({ container: "viewDiv", // 将视图附加到具有指定ID的DOM元素上 map: map // 设置视图的地图为之前创建的地图对象 }); ``` 通过以上步骤,就可以在ArcGIS API中成功加载高德地图作为底图了。可以根据具体需求进行其他配置和样式的设定,例如放大倍数、中心点、缩放范围等。 ### 回答2: 要加载高德地图作为ArcGIS API的底图,需要按照以下步骤进行操作。 首先,打开ArcGIS API for JavaScript官方网站,并下载最新的API版本。安装完成后,将它引入到你的项目中。 接下来,你需要在你的HTML文件中创建一个容器,用于显示地图。可以使用div元素,并设置其宽度和高度。 在你的JavaScript代码中,首先创建一个地图对象。使用arcgis对象中的Map类可以实现这一功能。在创建地图对象时,需要指定地图容器的ID以及其他的可选参数,如初始缩放级别和初始中心点。 接下来,你需要创建一个底图图层对象,并将其添加地图对象中。使用arcgis对象中的TileLayer类可以加载高德地图服务作为底图。在创建底图图层对象时,需要指定该服务的URL。 最后,将地图对象添加地图容器中,并显示地图使用arcgis对象中的MapView类可以实现这一功能。在创建MapView对象时,需要指定地图对象、地图容器对象以及其他的可选参数,如初始视图范围。 加载高德地图作为ArcGIS API的底图需要使用合适的API版本,创建地图对象、底图图层对象和视图对象,并将它们按照正确的顺序进行添加和显示。通过以上步骤,你可以成功加载高德地图作为ArcGIS API的底图。 ### 回答3: 要将高德地图作为ArcGIS API的底图,可以按照以下步骤进行: 1. 首先,在ArcGIS API的官方文档中找到相关的代码示例或文档,这些示例和文档将指导你如何加载外部地图服务。 2. 打开ArcGIS API的开发环境,创建一个新的HTML文件。 3. 在HTML文件中,引入ArcGIS API的JavaScript库文件,并对其进行初始化。 4. 在JavaScript代码中,创建一个地图对象,并指定地图的初始显示范围、放大级别等。 5. 使用ArcGIS API提供的图层对象,加载高德地图的服务URL作为底图图层。 6. 设置地图对象的底图图层为加载高德地图图层。 7. 运行或部署该HTML文件,以查看加载高德地图作为ArcGIS API的底图的效果。 需要注意的是,使用高德地图作为ArcGIS API的底图需要确保高德地图服务的URL和相关访问秘钥是有效的,并且遵循高德地图和ArcGIS API的使用协议和限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值