Leaflet加载山东省天地图(第二版)实现4490坐标、坐标值转换、加载arcgis服务示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>map</title>
    <link rel="stylesheet" href="./lib/css/common.css">

    <!-- map -->

    <link rel="stylesheet" href="./lib/leaflet/leaflet.css" />
    <script src="./lib/leaflet/leaflet.js"></script>
    <script src="./lib/esri-leaflet/esri-leaflet.js"></script>
    <script src="./lib/proj4/proj4-src.js"></script>
    <script src="./lib/proj4/proj4leaflet.js"></script>

    <script src="./lib/leaflet.wmts/dist/leaflet.wmts.browser.js"></script>


    <style>
        #map {
            width: 100%;
            height: 100%;
        }
    </style>
</head>

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

    <script>

        var token_province_tdt_map = "";

        function init() {

            var CRS_4490 = new L.Proj.CRS(
                'EPSG:4490',
                '+proj=longlat +ellps=GRS80 +no_defs', {
                resolutions: [
                    1.40625,
                    0.703125,
                    0.3515625,
                    0.17578125,
                    0.087890625,
                    0.0439453125,
                    0.02197265625,
                    0.010986328125,
                    0.0054931640625,
                    0.00274658203125,
                    0.001373291015625,
                    6.866455078125e-4,
                    3.4332275390625e-4,
                    1.71661376953125e-4,
                    8.58306884765625e-5,
                    4.291534423828125e-5,
                    2.1457672119140625e-5,
                    1.0728836059570312e-5,
                    5.364418029785156e-6,
                    2.682209064925356e-6,
                    1.3411045324626732e-6,
                    6.705522662313365e-7,
                ],
                origin: [-180, 90],
            }
            );

            //电子地图
            const tdtVecLayerURL = "https://service.sdmap.gov.cn/tileservice/sdpubmap" +
                "?layer=sdpubmap&style=default&tilematrixset=default028mm&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image/png&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=" + token_province_tdt_map;

            tdtVecLayer = L.tileLayer(tdtVecLayerURL, {
                // maxZoom: 17,
                tileSize: 256,
                // zoomOffset: 1,
            });


            //
            var map = L.map("map", {
                crs: CRS_4490,
            }).setView([36.663349439471915, 116.9742519218228], 17);
            map.addLayer(tdtVecLayer);



            /**
             * 加载arcgis 图层示例
              var zdUrl = "http://------------";
              var zdLayer = new L.esri.dynamicMapLayer({
                    url: zdUrl,
                    f: "image",
                    transparent: true
                });
                zdLayer.id = "rest_zd";
                zdLayer.xname = "宗地";
                map.addLayer(zdLayer);
             * */



        }


        window.jwd2Prj = function (jwdObj) {
            proj4.defs("EPSG:4490", "+proj=longlat +ellps=GRS80 +no_defs +type=crs");
            proj4.defs("EPSG:4548", "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +type=crs");
            var result = proj4("EPSG:4490", "EPSG:4548", [jwdObj.lng, jwdObj.lat]);
            return { x: result[0], y: result[1] };
        }

        window.prj2JWD = function (xyObj) {
            proj4.defs("EPSG:4490", "+proj=longlat +ellps=GRS80 +no_defs +type=crs");
            proj4.defs("EPSG:4548", "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +type=crs");
            var result = proj4("EPSG:4548", "EPSG:4490", [xyObj.x, xyObj.y]);
            console.log("prj2JWD result", result);
            return { lng: result[0], lat: result[1] };
        }


        init();


    </script>
</body>

</html>
<think>嗯,用户询问关于天地图加载WMTS服务实现方法,我需要根据提供的站内引用资料来整理回答。用户的需求很明确,想了解具体的实现方法,但用户可能是个GIS开发新手,需要分步骤的实操指导。 引用资料给出了关键线索:引用[1]说明天地图有_c和_w两种投影类型服务,并解释了WMTS与TMS的区别;引用[2]提到ArcGIS可通过Catalog添加WMTS服务;引用[3]提供了Leaflet.js加载EPSG4326类型服务的具体代码方案;引用[4]则指向OpenLayers的实现细节。这些正好覆盖主流GIS开发框架。 用户可能遇到的核心痛点是:1) 密钥申请流程不熟悉 2) 投影类型选择困惑 3) 不同框架的适配问题。需要特别强调_c对应Web墨卡托投影(EPSG3857),_w对应经纬度投影(EPSG4326),这是容易出错的关键点。 在整理步骤时,应该把"申请密钥"放在第一步——因为所有引用都提到这是必要前提。然后按框架分类说明,每个框架突出一个典型代码片段:ArcGIS用GUI操作更简单,Leaflet需要修改扩展插件,OpenLayers则要配置参数矩阵。最后补充通用注意事项,比如跨域问题在实际开发中高频出现。 考虑到用户可能继续追问,预先准备延伸问题:密钥申请细节、不同投影的适用场景、跨域解决方案等。这些在现有引用中都有线索可循,比如引用[3]的GitCode仓库就包含跨域处理方案。 </think>根据您的需求,以下是天地图WMTS服务的通用加载方法及主流框架实现方案(整合引用内容的关键技术点): ### 一、核心准备步骤 1. **申请开发者密钥** - 前往[国家地理信息公共服务平台](https://www.tianditu.gov.cn/)注册账号并申请Key(所有服务调用必需)[^2] 2. **确认投影类型** ```markdown • `_c`结尾:**Web墨卡托投影** (EPSG:3857) - 适用于Web地图 • `_w`结尾:**经纬度投影** (EPSG:4326) - 适用于GPS设备[^1] ``` 3. **获取服务地址模板** 示例矢量瓦片服务URL: ``` https://t0.tianditu.gov.cn/vec_w/wmts?tk=您的密钥 ``` ### 二、主流框架实现方案 #### ▶ ArcGIS Pro 加载方案 ```python # 步骤1:添加WMTS服务连接 arcpy.AddWMTSConnection( server_url="https://t0.tianditu.gov.cn/", service_name="天地图矢量", username=None, password=None, custom_layer_params={"tk": "您的密钥"} ) # 步骤2:拖动服务到地图视图[^2] ``` #### ▶ Leaflet.js 解决方案(EPSG:4326) 1. 下载修改插件:[leaflet-tilelayer-wmts.js](https://gitcode.com/open-source-toolkit/91618)[^3] 2. 核心代码: ```javascript const layer = L.tileLayer.wmts('https://t0.tianditu.gov.cn/vec_w/wmts', { layer: 'vec', style: 'default', tilematrixSet: 'w', format: 'tiles', tk: 'YOUR_KEY', attribution: '© 天地图' }).addTo(map); ``` #### ▶ OpenLayers 集成方案 ```javascript // 配置WMTS参数矩阵 const wmtsSource = new ol.source.WMTS({ url: 'https://t0.tianditu.gov.cn/vec_c/wmts?tk=YOUR_KEY', layer: 'vec', matrixSet: 'c', format: 'tiles', projection: 'EPSG:3857', // 根据_c/_w切换投影 tileGrid: new ol.tilegrid.WMTS({ origin: [-2.00375e7, 2.00375e7], // 墨卡托原点 resolutions: [...], // 分辨率数组 matrixIds: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] }) }); new ol.layer.Tile({source: wmtsSource}).addTo(map);[^4] ``` ### 三、关键注意事项 1. **跨域问题** 前端部署需配置代理或启用CORS(开发环境可用nginx反向代理) 2. **服务类型选择** ```markdown vec_w: 矢量地图(经纬度) img_w: 影像底图(经纬度) cva_w: 矢量注记(经纬度) cia_w: 影像注记(经纬度) ``` 3. **性能优化** - 缓存瓦片数据减少请求 - 使用HTTP/2协议提升加载速度 - 按视图范围动态加载瓦片 > 实测建议:对于国内项目优先使用`_c`投影(EPSG:3857),其加载效率和坐标系兼容性更优[^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值