Leaflet调用腾讯地图

leaflet是不能直接调用腾讯地图的,原因是因为腾讯地图的瓦片图规则和谷歌之类的不一样,具体的差异可参见这篇文章:腾讯与百度地图瓦片规则分析。如果要在leaflet中使用腾讯地图或者任何规则不统一的地图做底图,必须专门对L.TileLayer写一个扩展才能实现,重写getTileUrl函数。

默认的getTileUrl方法是这样的,比较简单:

getTileUrl: function (tilePoint) {
		return L.Util.template(this._url, L.extend({
			s: this._getSubdomain(tilePoint),
			z: tilePoint.z,
			x: tilePoint.x,
			y: tilePoint.y
		}, this.options));
	},

我修改成了这样,,主要是多执行一个通过选项传入的自定义函数getUrlArgs,计算出不规则的瓦片x,y,z值:

L.TileLayer.WebDogTileLayer = L.TileLayer.extend({
    getTileUrl: function (tilePoint) {
        var urlArgs,
            getUrlArgs = this.options.getUrlArgs;

        if (getUrlArgs) {
            var urlArgs = getUrlArgs(tilePoint);
        } else {
            urlArgs = {
                z: tilePoint.z,
                x: tilePoint.x,
                y: tilePoint.y
            };
        }

        return L.Util.template(this._url, L.extend(urlArgs, this.options, {s: this._getSubdomain(tilePoint)}));
    }
});

L.tileLayer.webdogTileLayer = function (url, options) {
    return new L.TileLayer.WebDogTileLayer(url, options);
};

扩展完成后,通过如下的方式调用就可以了。

var url = ‘,
    options = {
        subdomain: ‘012‘,
        getUrlArgs: function (tilePoint) {
            return {
                z: tilePoint.z,
                x: tilePoint.x,
                y: Math.pow(2, tilePoint.z) - 1 - tilePoint.y
            };
        }        
    };
L.tileLayer.webdogTileLayer(url, options).addTo(this);

http://rt{s}.map.gtimg.com/realtimerender?z={z}&x={x}&y={y}&type=vector&style=0这个url是腾讯默认的地图url地址模版。其他腾讯地图的底图样式在还是挺丰富了美观,这也是我为什么选用腾讯地图的原因,如果想调用其他样式的底图,则需要使用下面这些url:

地形图:http://p{s}.map.gtimg.com/demTiles/{z}/{x16}/{y16}/{x}_{y}.jpg

卫星图:http://p{s}.map.gtimg.com/sateTiles/{z}/{x16}/{y16}/{x}_{y}.jpg

如果你需要在地形图或卫星图上同时显示街道,你需要同时添加两个底图图层(TileLayer),一个是上面的地形图或卫星图,另外一个是一种png格式的只包含道路和文字透明底图:http://rt{s}.map.gtimg.com/realtimerender/?z={z}&x={x}&y={y}&type=vector&style=1&v=1.1.1,把这两种底图叠加,就形成了带街道的地形或卫星图。

除此之外,,Leaflet.FunctionalTileLayer 这个插件也可以实现这种功能,原理都是差不多了,当然我这个要简介一些。

最后实现的效果如下:

时间: 2024-10-08 19:53:07

Leaflet调用腾讯地图的相关文章

Xamarin.Forms 调用 腾讯地图SDK

Xamarin.Forms研究了好一段时间了,最近一直在学习中,想尝试一下调用其他的SDK,就如腾讯地图SDK(申请容易). 完成此次项目得感谢以下链接: http://www.cnblogs.com/jtang/p/4698496.html 其他文档参考: 腾讯地图SDK(安卓)文档 这里面有详细的使用过程(当然里面的代码是不适用C#的,不过要从这里下载SDK,也有如何申请Key的过程,请参考阅读) Xamarin.Forms自定义每个平台的控件文档 里面有如何根据不同的平台条件下,调用其他页

微信小程序wx.getLocation()获取经纬度及JavaScript SDK调用腾讯地图API获取某一类地址

简介 腾讯位置服务为微信小程序提供了基础的标点能力.线和圆的绘制接口等地图组件和位置展示.地图选点等地图API位置服务能力支持,使得开发者可以自由地实现自己的微信小程序产品. 在此基础上,腾讯位置服务微信小程序JavaScript SDK是专为小程序开发者提供的LBS数据服务工具包,可以在小程序中调用腾讯位置服务的POI检索.关键词输入提示.地址解析.逆地址解析.行政区划和距离计算等数据服务,让您的小程序更强大! 有时候我们在做微信小程序时有些功能需要获取当前的地理位置及附近地点的一些要求,但是

Leaflet 调用百度瓦片地图服务

在使用 leaflet 调用第三方瓦片地图服务的项目,主要谷歌地图.高德地图.百度地图和 OSM 地图,与其他三种地图对比,百度地图的瓦片组织方式是不同的.百度从中心点经纬度(0,0)度开始计算瓦片,而谷歌地图是从左上角经纬度(-180,90)度开始计算瓦片:如果直接使用百度瓦片地图服务会请求不到瓦片,因此需要转换一下.借助 leaflet-tileLayer-baidu 这个插件: //需要引入 proj4.js 和 proj4leaflet.js 插件,使用script标签引入的方式 L.C

百度地图转腾讯地图腾讯地图转百度地图

public static double pi = 3.141592653589793 * 3000.0 / 180.0; /** * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标 * * @param gg_lat * @param gg_lon * @return */ public static Gps gcj02_To_Bd09(double gg_lon, double gg_lat) { double x =

vue里使用腾讯地图

主要需求是: 1.通过搜索地址获取坐标经纬度, 2.通过点击地图上的位置获取地址同时获取坐标经纬度 使用了地址解析和反地址解析 npm安装腾讯地图 腾讯官方并没有在npm上发布腾讯地图插件,所以找到一个别人写的,可以直接调用腾讯地图javascript方法 链接:https://www.npmjs.com/package/qqmap npm install qqmap --save 在组件中引入 import maps from "qqmap" 地图 DOM 元素 <div cl

基于MySQL + Node.js + Leaflet的离线地图展示,支持百度、谷歌、高德、腾讯地图

1. 基本说明 本项目实现了离线展示百度.谷歌.高德.腾讯地图.主要功能如下: 实现了地图瓦片图下载.存储.目前支持存储至MySQL Node.js服务调用MySQL中的瓦片图 Leaflet展示地图 展示效果如下: 2. 地图瓦片下载工具及配置 工具下载链接: http://pan.baidu.com/s/1qYoHj4K 密码: ehgh 工具使用方法: 数据库配置 打开工具目录中的 MapDownloader.exe.config 文件.根据实际情况填写如图中的配置信息. 地图瓦片图下载

调用腾讯的街景地图pai

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="keywords&q

腾讯地图笔记

首先是js的引用 <script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp&key=YOUR_KEY"></script> 腾讯地图js除了提供基本的功能库外,还提供了一些有用的附加库,下面这个是引用了坐标转换库的js引用 <script type="text/javascript" charset="utf-8" src=

微信开发之附近商家地理位置计算和腾讯地图坐标转百度地图坐标的方法

原文:微信开发之附近商家地理位置计算和腾讯地图坐标转百度地图坐标的方法 腾讯地图坐标转百度坐标 案例:本次开发的系统是一个商家联盟积分系统.在全国各地都有商家联盟的网点. 要求实现的功能 a.微信粉丝通过微信号就能查看附近的商家 b.我的联盟系统统计在2公里之内的商家网点 c.并标出商家和粉丝位置的距离是多少米. d.在商家的详细介绍页面设置百度地图接入步行.公交.驾车一键导航功能 那么现在问题来了: 问题1:在做微信O2O开发的过程中,通过微信地理位置功能事件获得的是腾讯地图坐标.而我们的导航