Leaflet加载高德瓦片到WGS84坐标系下

本文介绍了如何将高德的矢量和影像底图转换到WGS84坐标系下,并与其他地图如OSM、天地图进行叠加,确保图层之间的准确套合。通过调整瓦片中心点,实现了小于瓦片层级像素分辨率的误差,满足视觉上的匹配需求。
摘要由CSDN通过智能技术生成

效果如下图,高德矢量底图、影像底图、OSM地图、天地图影像底图,坐标系都统一到WGS84坐标系下,复选框有注记图层和半透明底图图层。

 

对图层进行叠加,能看出,纠正后的高德影像底图与OSM路网是套合的,说明瓦片中心点的平移,就能满足误差小于瓦片层级的像素分辨率,既误差在可见之内,那就够了。

代码如下:

<!DOCTYPE html>

<html>

<head>

    <title>高德-OSM-天地图瓦片对比</title>

    <meta charset="utf-8" />

    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.1/dist/leaflet.css" />

    <script src="https://unpkg.com/leaflet@1.0.1/dist/leaflet.js"></script>

    <script src="https://cdn.bootcss.com/proj4js/2.4.3/proj4.js"></script>

    <script src="https://cdn.bootcss.com/proj4leaflet/1.0.1/proj4leaflet.min.js"></script>

    <style>

    body {

        padding: 0;

        margin: 0;

    }

    html,

    body,

    #map {

        height: 100%;

        width: 100%;

    }

    </style>

</head>



<body>

    <div id="map"></div>

</body>

<script>

var tiandituKey='44964a97c8c44e4d04efdf3cba594467';

var gaodeNormalMapUrl = 'http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',

    gaodeSatelliteMapUrl = 'http://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',

    gaodeAnnotionMapUrl = 'http://webst0{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}',

    osmNormalMapUrl = 'https://{s}.tile.osm.org/{z}/{x}/{y}.png',

    tiandituSatelliteMapUrl = 'http://t{s}.tianditu.gov.cn/DataServer?T=img_w&X={x}&Y={y}&L={z}&tk='+tiandituKey,

    tiandituAnnotionMapUrl = 'http://t{s}.tianditu.gov.cn/DataServer?T=cia_w&X
要实现leaflet加载自定义高德地图后坐标类型为gcj02,你需要进行以下步骤: 1. 在高德开放平台上申请自定义地图服务并获取到对应的key。 2. 在Leaflet中添加高德地图服务的图层,示例代码如下: ``` L.tileLayer('https://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', { attribution: '高德地图', maxZoom: 18 }).addTo(map); ``` 3. 在Leaflet中添加坐标转换插件,这里推荐使用proj4leaflet插件。在使用之前,需要将proj4库引入到项目中。示例代码如下: ``` // 添加proj4库 <script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.6.2/proj4.js"></script> // 定义高德地图的投影坐标系 proj4.defs("EPSG:102100", "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"); // 在Leaflet中添加坐标转换插件 L.Proj.geoJson(data, { 'pointToLayer': function(feature, latlng) { return L.marker(latlng); } }, { 'coordsToLatLng': function(coords) { var point = L.point(coords[0], coords[1]); point = L.Proj.transform(proj4.defs("EPSG:102100"), L.CRS.GCJ02.projection, point); return L.CRS.GCJ02.pointToLatLng(point); } }).addTo(map); ``` 4. 将Leaflet坐标系设置为GCJ02,示例代码如下: ``` L.CRS.GCJ02 = L.extend({}, L.CRS.EPSG3857, { // 将EPSG3857的投影坐标系转换为GCJ02的投影坐标系 transformation: L.transformation(1 / 128, -1 / 128, -1 / 128, 1 / 128), // 将EPSG3857的地理坐标系转换为GCJ02的地理坐标系 code: 'GCJ02' }); // 将地图的坐标系设置为GCJ02 map.options.crs = L.CRS.GCJ02; ``` 通过以上步骤,你就可以实现leaflet加载自定义高德地图后坐标类型为gcj02了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值