基于天地图使用Leaflet.js进行WebGIS开发实战

目录

前言

一、天地图的key

1、创建应用

2、调用限制策略

        注:

(1)日服务调用超量会暂时拒绝访问,次日自动开启;

(2)如果服务调用过程中存在数据爬取或者下载行为,服务调用会被自动拒绝。

二、使用Leaflet调用天地图的底图服务

1、天地图提供的地图服务

2、实际加载底图

 三、Leaflet调用天地图的地理编码接口

1、地理编码接口介绍

2、实现自定义的地理编码查询

四、总结


前言

        在之前的博客中,我们曾介绍了天地图这个官方的网站,除了介绍它在线提供的功能,同时也介绍了它的API服务能力,在博客的最后还使用QGIS进行了在线底图的调用展示。其实在平常的开发或者学习工作中,我们接触到的都是WebGIS,而之前介绍得都是桌面GIS的使用和学习方式,有了天地图之后,其实大家都可以做出比较好用的WebGIS应用,依赖天地图,我们可以实现不同的底图的在线切换,还能实现根据中文地名查找其对应的经纬度信息并且在地图上进行展示。

        本文重点介绍如何基于天地图使用Leaflet来开发WebGIS的应用,首先讲解如何在天地图上申请个人的key,然后讲解在天地图中不同的账户的调用限制策略,最后使用Leaflet开发一个加载天地图影像底图和影像文字标注,在地图的基础之上实现一个全国范围内的地名地址检索。在自己没有对应的地图服务器和地理查询服务器的时候,使用天地图来实现业务的快速支撑。感兴趣的你不妨来这里看看。

一、天地图的key

        天地图的key是我们的第三方应用访问天地图的凭证,现在天地图的key分为浏览器端的key和服务端的key,以前是可以两者混用的,现在必须要分开,否则在请求时就会报错,无法返回对应的数据。因此在这里重点讲一下如何在天地图中申请key。

1、创建应用

        首先使用注册的邮箱登录到天地图的官方网站,然后切换到开发资源目录,如下图所示:

        其实在官网上也大致的说了如何申请key,在成为注册用户之后,还要申请陈伟开发则会,然后获取服务许可也就是key,最后通过key来访问api或者服务(比如在线的地图)。 我们可以点击任意一个api的地址,然后在他的官方说明文档都会有创建key的说明,如下图所示:

        点击申请key的超链接之后,系统将自动跳转到应用管理页面,在应用中来创建不同的key。管理页面如下所示。 

        在上面的页面中其实就管理了我们申请的两个应用。这是我之前申请过的,默认是空白的。点击创建应用发起新建操作。 

        在创建应用的过程当中,根据页面的提示来进行创建即可,唯一需要注意的就是,应用的类型这里。主要包含三种浏览器端、服务端、Android平台。这其实分别代表了使用浏览器访问、后台接口模式(如使用java进行接口调用),以及移动端的调用。 在以前的天地图中,key是可以混用的,现在应用类型分开之后就需要分开,务必按照实际的应用来填写。填写完毕之后,系统会自动创建应用出来,里面包含了服务的类型,还有第三方的应用,如下图所示:

        默认会包含上面这些接口,比如搜索引擎、地理编码、逆地理编码、公交引擎等。可以看到下面有一些第三方服务,暂时我们用不到,使用默认的即可。在线上服务器,我们其实可以限制访问的应用ip,不输入的话默认是不限制的。

        因新系统升级,自公告之日起,应用类型tk严格区分,浏览器端JavaScript开发请选择“浏览器端”类型tk,“服务端tk”不再支持“浏览器端”应用,请注意检查您的应用类型。

        上面的公众确实要仔细查看,历史的应用需要进行调整,否则可能访问不了。经过以上的步骤我们大概就已经创建好了应用,同时可以在应用列表中看到产生的key。在访问天地图的服务时就可以带上这些key即可(按场景和应用类型分开)。

2、调用限制策略

        天地图网站其实根据不同的账号类型有不同的访问限制策略,这里摘录其官网的配置说明。

类别服务名称个人开发者工商企业政府机构
日配额日配额日配额
地图API影像底图1000030000005000000
矢量底图1000030000005000000
矢量注记1000030000005000000
影像注记1000030000005000000
地形晕渲1000030000005000000
地形注记1000030000005000000
矢量英文注记1000030000005000000
影像英文注记1000030000005000000
全球境界1000030000005000000
三维地名1000030000005000000
三维地形1000030000005000000
Web服务API静态地图300060000008000000
行政区划服务300060000008000000
逆地理编码700060000008000000
地理编码700060000008000000
公交规划300060000008000000
驾车规划300060000008000000
地图搜索300060000008000000

        对于个人开发来说,调用次数远远是不够的,对于对外提供服务的,还是需要升级到企业账号,调用次数才能上一个档次。同时这里需要说明的是:

        注:
(1)日服务调用超量会暂时拒绝访问,次日自动开启;
(2)如果服务调用过程中存在数据爬取或者下载行为,服务调用会被自动拒绝。

        我们可以在应用中对我们的请求次数进行监控,看是否会有超的情况,在访问统计中可以看到如下的界面:

        上图中就很明显的展示了服务的调用次数。

二、使用Leaflet调用天地图的底图服务

        在掌握了如何申请天地图的key以后,我们就可以拿着申请的key进行相关的服务调用。首先我们来看一下如何在leaflet中调用天地图的地图服务。

1、天地图提供的地图服务

        在加载天地图的地图服务之前,首先我们要知道它提供了哪些在线底图。在他的地图API页面有明确的展示。

        通过上面的API列表可以看到,天地图提供了不同类型的地图资源,比如矢量图层还有影像图层。还有地形晕渲的效果,在提供底图的在线图源同时,还有有注记信息。通过辅助的注记信息,让我们在地图的展示时更加的友好和明确,能抓住地图的重点。

        为了简单的演示在leaflet中如何加载具体的图层,我们这里展示如何加载球面墨卡托投影的影像底图和对应的注记图层。在官网提供了如何进行瓦片进行数据请求的说明:

        (2)地图瓦片获取

        http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=您的密钥

        可以看到,这里不同的除了key之外,还有一个图层的不一样,其它的都是一样的。因此我们只要替换上述的红色部分的内容即可。

2、实际加载底图

        关于如何在地图上使用Leaflet来进行地图加载,相信大家已经非常熟悉了,如果还不太了解的可以先去学习一下基础知识,也可以看一些我之前的一些博客,均有非常详细的说明。这里仅以具体加载瓦片的javascript代码为主进行讲解。首先定义地图实例对象和天地图的key,这里的可以我们选取浏览器端的key,因为我们要实现的webgis的功能。

var map = L.map('mapid',{/*crs:L.CRS.CustomEPSG4326*/}).setView([34.669359, 113.642578], 10);var tdt_client_key = "xxx";//天地图客户端的key

        加载影像底图和影像注记,关键代码如下所示:

L.tileLayer('http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' +tdt_client_key, {maxZoom: 18,attribution: 'Map data &copy; <a href="http://www.tianditu.gov.cn/">TianDiTu</a>, <a href="http://www.esri.com/">Esri</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'}).addTo(map);//标签 
L.tileLayer('http://t1.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk='+ tdt_client_key, {maxZoom: 18
}).addTo(map);

        经过上述的步骤,我们打开可以看到以下的结果,如果能看到以下结果就表明成功集成了天地图的在线底图的功能。

 三、Leaflet调用天地图的地理编码接口

        在前面的小节中,我们掌握了如何调用天地图的在线底图功能,下面来深入一个更有意思的功能模块,比如我们知道一个地点,但是如何快速知道它的经纬度坐标呢?我们可以购买相应的POI数据,也可以从某度或者某德等厂商进行获取,当你有了天地图之后,其实是可以直接利用天地图的在线查询功能,直接调用它的地理编码接口,实现我们的业务目标。

        本节的目标就是学会在前端调用天地图的地理编码接口,以这个接口为例,详细的讲解如何进行web api 的交互和调用。这里很重要,利用好官方的信息获取渠道,做一些有意思的应用。

1、地理编码接口介绍

        在调用地理编码接口前,首先先来了解什么事地理编码接口。在天地图的官网上有相应的解释。我们来详细的看一下。天地图地理编码API是一类简单的HTTP/HTTPS接口,是指由结构化地址数据(如:北京市海淀区莲花池西路28号)转换为对应坐标点(经纬度)功能,地址解析仅限于国内。这里请注意,地理编码接口仅限于国内,国外的数据暂时没有。

参数值参数说明参数类型是否必备备注(值域)
keyWord请求关键字string

        地理编码响应示例:

        请求: http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"北京市延庆区延庆镇莲花池村前街50夕阳红养老院"}&tk=您的密钥

{"location": {"lon": "116.001688","level": "地名地址","lat": "40.453228"},"status": "0","msg": "ok","searchVersion": "4.8.0"
}

        响应参数:

参数值参数说明参数类型备注(值域)
status返回状态string0:正常返回,101:结果为空,404:出错。
msg返回信息stringOK:正常,其他异常。
location地址信息json地址信息

        location参数信息:

参数值参数说明参数类型备注(值域)
lon坐标点显示经度Double必须返回。
lat坐标点显示纬度Double必须返回。
level类别名称string非必须返回。
typeRound附近相似点Array开启周边查询必需返回。

        在了解上述的API接口之后,结合上面的地图展示页面,我们来实现一个地名地址的检索功能。

2、实现自定义的地理编码查询

        为了在界面上实现地理编码查询,首先我们需要在地图界面上定义一个输入框,在输入框中输入我们需要查询的地名信息。然后通过ajax来获取从天地图服务器端返回的地理信息。然后在界面上展示,同时展示其它的辅助信息。

        首先定义一个信息输入框,用于输入待查询的地址信息。如下所示:

<div style="position:absolute;z-index:403;top:50px;left:60px;"><input type="text" style="width:300px;height:20px;" name="address" id="address"></input><input type="button" value="查询" onclick="execQuery('');"></input><br/>
</div>

        然后在按钮中定义相应的响应事件,向天地图的服务器发送地理编码查询请求,关键的代码如下:

function execQuery(){var keyWord = $("#address").val();console.log(keyWord);$.ajax({type: "get",url: "http://api.tianditu.gov.cn/geocoder?ds={'keyWord':'" + keyWord + "'}&tk=" + tdt_client_key,data: {},success: function(rsData) {console.log(rsData);var rsObj = jQuery.parseJSON(rsData); var loc_info = rsObj.location;L.marker([loc_info.lat, loc_info.lon]).addTo(map).bindPopup("level:"+loc_info.level + ",score:"+ loc_info.score).openPopup();map.setView([loc_info.lat, loc_info.lon]);}});}

        经过上面的代码之后,我们来看一下现在的界面展示如下所示:

        可以看到在界面中就出现了搜索栏,在搜索栏中输入我们需要查询的地名或者地址,点击查询按钮就会进入查询,比如我们查询橘子洲景区。点击查询可以跳转以下定位。

        我们发现,使用天地图的地理编码功能还是非常好用的,可以直接返回相应的信息。

         我们也可以通过观察网络服务请求来看一下向天地图的后台发送请求的过程以及响应情况。

        通过网络的监控,可以看到前端页面已经向后端发送请求,同时后端也及时返回了响应。到此,我们就已经实现了如何适用Leaflet进行天地图的在线底图的调用和地理编码接口的调用。相信大家都掌握了相关的知识。 

四、总结

        以上就是本文的主要内容,本文重点介绍如何基于天地图使用Leaflet来开发WebGIS的应用,首先讲解如何在天地图上申请个人的key,然后讲解在天地图中不同的账户的调用限制策略,最后使用Leaflet开发一个加载天地图影像底图和影像文字标注,在地图的基础之上实现一个全国范围内的地名地址检索。在自己没有对应的地图服务器和地理查询服务器的时候,使用天地图来实现业务的快速支撑。感兴趣的你不妨来这里看看,通过本文您不仅可以掌握如何调用天地图的地图资源,同时还掌握如何进行地理编码的查询,对于提高系统的可用性有很大的帮助。行文仓促,难免有不足之处,如有不当之处,还请各位专家朋友在评论区留言指出,不甚感激。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【中项】系统集成项目管理工程师-第3章 信息技术服务-3.6服务发展

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

K12智慧校园智能化解决方案

1. 项目背景 “十三五”期间&#xff0c;教育信息化工作旨在为教育改革发展提供动力与手段&#xff0c;目标是到2020年建成与国家教育现代化发展目标相适应的教育信息化体系。 2. 建设需求 智慧校园系统框架解析与建设目标分析&#xff0c;旨在实现教育信息化目标任务。 3.…

【C++航海王:追寻罗杰的编程之路】关于空间配置器你知道多少?

目录 1 -> 什么是空间配置器 2 -> 为什么需要空间配置器 3 -> SGI-STL空间配置器的实现原理 3.1 -> 一级空间配置器 3.2 -> 二级空间配置器 3.2.1 -> 内存池 3.2.2 -> SGI-STL中二级空间配置器设计 3.2.3 -> SGI-STL二级空间配置器之空间申请 …

Java | Leetcode Java题解之第263题丑数

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isUgly(int n) {if (n < 0) {return false;}int[] factors {2, 3, 5};for (int factor : factors) {while (n % factor 0) {n / factor;}}return n 1;} }

C++树形结构(3 树的中心、重心)

目录 一.树的中心&#xff1a; 1.树的概念&#xff1a; 2.树的性质&#xff1a; 性质1&#xff1a; 性质2&#xff1a; 3.树的中心求解&#xff1a; 4.例题&#xff1a; 二.树的重心&#xff1a; 1.基础概念&#xff1a; 2.求解方法&#xff1a; 3.例题&#xff1a;…

毕业/期刊论文发表必备:YOLOv5 / v7 / v8 /v10算法网络结构图【文末提供原型文件下载地址】

前言:Hello大家好,我是小哥谈。同学们在写YOLO算法相关毕业论文/期刊论文的时候,不可避免的会用到相关版本的网络结构图,曾有很多小伙伴私信我索要原型文件,本文就给大家提供YOLOv5/v7/v8/v10版本算法网络结构图及原型文件下载地址。🌈 目录 🚀1.网络结构图 �…

SpringBoot源码深度解析

今天&#xff0c;聊聊SpringBoot的源码&#xff0c;本博客聊的版本为v2.0.3.RELEASE。目前SpringBoot的最新版为v3.3.2&#xff0c;可能目前有些公司使用的SpringBoot版本高于我这个版本。但是没关系&#xff0c;因为版本越新&#xff0c;新增的功能越多&#xff0c;反而对Spri…

2024-07-19 Unity插件 Odin Inspector9 —— Validation Attributes

文章目录 1 说明2 验证特性2.1 AssetsOnly / SceneObjectsOnly2.2 ChildGameObjectsOnly2.3 DisallowModificationsIn2.4 FilePath2.5 FolderPath2.6 MaxValue / MinValue2.7 MinMaxSlider2.8 PropertyRange2.9 Required2.10 RequiredIn2.11 RequiredListLength2.12 ValidateIn…

Python数据风险案例54——人工智能热门概念股爬虫分析其价值(三因子模型)

案例背景 人工智能概念如火如荼的夏天&#xff0c;在这个2024年&#xff0c;我觉得需要提早布局一下这个概念。所以我们找一下A股里面人们的人工智能概念股&#xff0c;然后分析他们的数据应用三因子模型&#xff0c;也就是最经典的资本资产定价模型的衍生版去研究他们各自的投…

51 单片机[8]:串口通信

一、目标 单片机通过串口向电脑发送数据&#xff08;数字递增&#xff09;电脑通过串口控制单片机上的LED 二、基本概念 1. 串口 串口是一种应用十分广泛的通讯接口&#xff0c;串口成本低、容易使用、通信线路简单&#xff0c;可实现两个设备的互相通信。 单片机的串口可以…

Visio绘制的relu激活函数结构图,可导出高清图片,可修改,无水印。

Visio绘制的relu激活函数结构图,可导出高清图片&#xff0c;可修改&#xff0c;无水印。 方便用于小论文写作&#xff0c;方便用于毕业设计。 Visio版本为2021版&#xff0c;可用更高版本打开。 下载地址&#xff1a;地址 图片展示&#xff1a;

【Linux Commands】命令分类整理-命令搜索引擎-速查手册

Linux命令速查网站&#xff1a;https://linux.embeddev.asia 目前已经搜集了600条命令,对每一条命令都有详细的介绍。 本文展示的命令不全是安装系统时自带的。 Linux命令基于Unix哲学&#xff0c;旨在创建简单、短小、可组合的工具。每个命令通常只执行一个任务&#xff0…

open3d:随机采样一致性分割平面

1、背景介绍 随机采样一致性算法&#xff08;RANSAC Random Sample Consensus&#xff09;是一种迭代的参数估计算法&#xff0c;主要用于从包含大量噪声数据的样本中估计模型参数。其核心思想是通过随机采样和模型验证来找到数据中最符合模型假设的点。因此&#xff0c;只要事…

TI 【ads131m02】DSP TMS320F280049C调试与学习笔记

ads131m02 调试与学习笔记 时序SPI 参考链接&#xff1a; ADS131M02_TI官网资料参考 ADS131M02—英文使用手册 ADS131M0x—参考代码 Example C Code ADS131M02 是一款 two 通道、同步采样、24 位、ΔΣ 模数转换器 (ADC)&#xff0c;具有宽动态范围、低功耗和电能测量特定功能…

你还在手动构建Python项目吗?PyBuilder让一切自动化!

在 Python 项目开发中&#xff0c;构建和管理项目是一项繁琐但必不可少的工作。你可能需要处理依赖项、运行测试、生成文档等。这时候&#xff0c;PyBuilder 出场了。它是一个强大的构建自动化工具&#xff0c;可以帮助你简化项目管理&#xff0c;让你更专注于编写代码。 什么…

Unity Meta Quest 开发:如何在每只手指上添加 Poke 交互

XR 开发社区&#xff1a; SpatialXR社区&#xff1a;完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 找到玩家物体 OVRCameraRig 下的子物体 HandInteractorsRight/Left&#xff08;分别管理左右手的 Interactor&#xff09;下的 HandPokeInteractor 子物体&#x…

JMX 反序列化漏洞

前言 前段时间看到普元 EOS Platform 爆了这个洞&#xff0c;Apache James&#xff0c;Kafka-UI 都爆了这几个洞&#xff0c;所以决定系统来学习一下这个漏洞点。 JMX 基础 JMX 前置知识 JMX&#xff08;Java Management Extensions&#xff0c;即 Java 管理扩展&#xff0…

程序的机器级表示(一)汇编,汇编格式和数据传输指令

系列文章 : 深入理解计算机系统笔记 文章目录 系列文章3 程序的机器级表示3.1 历史观点3.2 程序编码3.2.1 机器级代码3.2.2 代码示例3.2.3 关于格式的注解 3.3 数据格式3.4 访问信息3.4.1 操作数指示符3.4.2 数据传送指令3.4.3 数据传送示例3.4.4 压入和弹出栈数据 3 程序的机…

达梦数据库系列—30. DTS迁移Mysql到DM

目录 1.MySQL 源端信息 2.DM 目的端信息 3.迁移评估 4.数据库迁移 4.1源端 MySQL 准备 4.2目的端达梦准备 初始化参数设置 兼容性参数设置 创建迁移用户和表空间 4.3迁移步骤 创建迁移 配置迁移对象及策略 开始迁移 对象补迁 5.数据校验 统计 MySQL 端对象及数…

Unity: TextMeshPro生成中文字体(附3.5k,7k,2w常用字集)

免费常用3千5&#xff0c;7千字&#xff0c;2万字中文字体包 1.选择Window/TextMeshPro/Font Asset Creator 注&#xff1a;准备字体&#xff1a;从字体库或其他来源获取中文字体文件&#xff0c;通常为.ttf、.otf或.ttc格式。最简单的方式是从Windows系统文件的Font文件夹里…