高德地图如何接入谷歌碎片

一.先上代码,网上我查了很多,有两种方法,如下

   1.MapsInitializer.loadWorldGridMap(true);

这个方法我试了,MapsInitializer类找不到这个方法,对于开发者其实还有更简单的方法(亲测不行)。

2.高德地图支持瓦片显示,所以当我们显示国外地址时,只需要在高德地图上添加Google的瓦片即可,开发者也可以使用已经下载好 的瓦片或者自定义的瓦片。

UrlTileProvider tileProvider = new UrlTileProvider(256, 256) {


@Override
public URL getTileUrl(int x, int y, int zoom) {
try {
Random random = new Random();
            String s = String.format("http://mt"+random.nextInt(3)+".google.cn/vt/lyrs=m@142&hl=zh-CN&gl=cn&x=%d&y=%d&z=%d&s=Galil",x,y,zoom);
            return new URL(s);
          } catch (MalformedURLException e) {
              e.printStackTrace();
          }
return null;
}
    };


mAmap.addTileOverlay(new TileOverlayOptions()
                    .tileProvider(tileProvider)
                    .diskCacheEnabled(true)
                    .diskCacheDir("/storage/emulated/0/demo/cache")
                    .diskCacheSize(100000)
                    .memoryCacheEnabled(true)
                    .memCacheSize(100000));



这样直接调用就ok。



详细介绍下上面写法

详细解释下
mt2.google.cn :Google瓦片服务服务器,可以尝试mt1.google.cn依然有效。Google提供多台瓦片服务器,减轻服务器负载,提高网络访问效率。

x             瓦片的横向索引,起始位置为最左边,数值为0,向右+1递增。

y             瓦片的纵向索引,起始位置为最上面,数值为0,向下+1递增。

z             地图的级别Zoom,最上一级为0,向下依次递增。(0~22)

​s             (3*x + y)%8 = s 

x , y , z 组合后与 8 求余即可得到 s 的值。 

其它几个参数的含义

1) mt ( 0—3)

Google 地图使用了四个服务地址,即 http://mt ( 0—3).google.cn/......,都可以用。

地图:http://mt2.google.cn/vt/lyrs=m@&hl=zh-CN&gl=cn&x=...

影像底图:http://mt3.google.cn/vt/lyrs=s@110&hl=zh-CN&gl=cn&x=...

影像的叠加:http://mt1.google.cn/vt/imgtp=png32&lyrs=h&hl=zh-CN&gl=cn&x=...

2)lyrs=...

 表示的是图层类型,即瓦片类型,具体含义如下:

  • m:路线图  
  • t:地形图  
  • p:带标签的地形图  
  • s:卫星图  
  • y:带标签的卫星图
  • h:标签层(路名、地名等)  

3) &s=...

暂时未发现 "&s=..." 的意义,url有无此后缀都不影响瓦片地址的访问。


计算瓦片URL

要想出图就必须知道地图控件可视范围起始点瓦片索引、末尾瓦片索引,中间区域的瓦片索引循环遍历即可得出。

  下面看看如果计算出起始点、末尾瓦片url索引:

  已知:bounds(地图范围[ -20037508.3427892, 20037508.3427892])、viewBounds(地图控件可视范围)、瓦片像素宽高(256)。

       未知:startX(视图起始瓦片X方向索引)、startY(视图起始瓦片Y方向索引)、endX(视图未尾瓦片x方向索引)、endY(视图未尾瓦片y方向索引)。

  求解:

1.zoom

根据当前地图比例尺可求解地图缩放级别zoom和比例尺

static public void GetWebMapZoomAndMapScale(double realScale, ref int zoom, ref long scale)

        {

            long rescaleLong = Convert.ToInt32(realScale);

            int z = 21;

            double min = 0;

            double max = 0;

            for (int i = 0; i < Scales.Length - 1; i++)

            {

                if (i == 0)

                    min = 0;

                else

                    min = Scales[i - 1] + ((Scales[i] - Scales[i - 1]) / 2);

                max = Scales[i] + ((Scales[i + 1] - Scales[i]) / 2);

                if (realScale > min && realScale <= max)

                {

                    scale = Scales[i];

                    zoom = z;

                    return;

                }

                z--;

            }

            zoom = 0;

            scale = Scales[Scales.Length - 1];

        }

​2.Resolution

Resolution = 20037508.3427892 * 2 / 256 / (Math.Pow(2,zoom));

3.瓦片索引​

startX = Math.Floor((viewBounds.leftBottom_x - bounds.leftBottom_x) / Resolution / 256);

startY = Math.Floor((viewBounds.leftBottom_y - bounds.leftBottom_y) / Resolution / 256);

endX = Math.Floor((viewBounds.rightTop_x - bounds.rightTop_x) / Resolution / 256);

endY = Math.Floor((viewBounds.rightTop_y- bounds.rightTop_y) / Resolution / 256);

4.瓦片URL

 

firstTileUrl(起始瓦片Url) = http://**********?x=startX&y=startY&z=zoom;

endTileUrl(末尾瓦片Url) = http://**********?x=endX&y=startY&z=zoom;

中间部分的url循环遍历即可得出。

5.拼接瓦片​

好啦!组成视图所有瓦片的url都已得出。下面就是要解决将这些瓦片放到哪的问题。

startTilePositionX = bounds.leftBottom_x + (startX * 256 * Resolutions);

startTilePositionY = bounds.rightTop_y + (endY * 256 * Resolutions);//左上角开始

distanceX = (map_left - startTilePositionX) / Resolutions;//瓦片左边与地图控件左边相距的像素距离

distanceY = (map_top - startTilePositionY) / Resolutions;//瓦片上边与地图控件上边相距的像素距离

遍历各url地址,获取图片绘制到地图控件的指定位置。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以按照以下步骤使用高德地图接入小程序: 1. 在高德开放平台上创建应用:首先,您需要在高德开放平台上创建一个开发者账号,并创建一个应用。在创建应用时,选择小程序类型,并获取到该应用的 AppKey。 2. 下载高德地图 SDK:进入高德开放平台的下载中心,选择小程序 SDK,并下载对应的 SDK 文件。 3. 在小程序项目中引入高德地图 SDK:将下载的 SDK 文件解压后,将解压得到的 `amap-wx.js` 文件拷贝到您的小程序项目的合适位置。 4. 在小程序页面中引入高德地图组件:在需要使用地图的页面的 JSON 文件中,引入高德地图组件,例如: ```json "usingComponents": { "map": "/path/to/amap-wx.js" } ``` 5. 在页面中使用高德地图组件:在页面的 WXML 文件中添加 `<map>` 组件,并设置相应的属性和事件,例如: ```html <map id="map" longitude="113.324520" latitude="23.102290" show-location></map> ``` 其中,`longitude` 和 `latitude` 属性表示地图的中心点坐标,`show-location` 属性表示显示当前位置。 6. 配置小程序的 AppID 和 AppKey:在小程序项目的 app.js 文件中,配置您的高德地图 AppID 和 AppKey,例如: ```javascript App({ globalData: { amapAppID: 'your_amap_app_id', amapAppKey: 'your_amap_app_key' } }) ``` 7. 调用高德地图 API:您可以在小程序页面的 JavaScript 文件中,通过调用高德地图提供的 API 实现各种功能,例如搜索地点、定位当前位置、绘制标记等。 以上就是使用高德地图接入小程序的基本步骤。您可以根据具体需求,进一步了解高德地图的 API 文档,并根据需要进行调用和配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值