基于天地图使用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.xdnf.cn/news/1483413.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ssh -D 选项用于动态(Dynamic)端口转发

举例实现不同ssh连接功能目录 一、功能简介 -D 支持 SOCKS5 协议&#xff0c;可以同时转发 TCP 和 UDP 报文 二、原理介绍 假设拥有三台主机&#xff0c;具体环境如下&#xff1a; 1. 主机 A&#xff1a;本地主机&#xff0c;即 SSH 客户 所在的主机&#xff0c;IP&#xff1…

C语言switch的使用

switch的使用语句 switch&#xff08;表达式&#xff09; { case 值1&#xff1a; 语句1; break; case 值2&#xff1a; 语句2; break; default: break; } 注意事项&#xff1a;1.表达式计算结果只能为&#xff08;字符/整数&#xff09; 2.case值只能是&#xff08;字…

最大文件句柄数

优质博文&#xff1a;IT-BLOG-CN 灵感来源 一、什么是文件句柄 文件句柄File Handle是操作系统中用于访问文件的一种数据结构&#xff0c;通常是一个整数或指针。文件句柄用于标识打开的文件&#xff0c;每个打开的文件都有一个唯一的文件句柄。 它们是对文件、网络套接字或…

哪些工科专业要学C语言或C++?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c&#xff0b;&#xff0b;的资料从专业入门到高级教程」&#xff0c;点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;工科专业…

鸿蒙语言基础类库:【@system.configuration (应用配置)】

应用配置 说明&#xff1a; 从API Version 7 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.i18n]和[ohos.intl]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import configurati…

网安小贴士(19)入侵检测技术原理与应用

前言 入侵检测技术&#xff08;Intrusion Detection System, 简称IDS&#xff09;是一种用于监测和防止计算机网络中的恶意活动的安全系统。它通过收集系统状态信息、特征提取、建立模型、入侵检测以及反馈更新等步骤&#xff0c;及时检测网络和系统中可能遭受攻击的迹象并发出…

python项目为什么用WSGI

小背景 Java用的时间久了&#xff0c;web项目启动的时候直接启动主程序就行&#xff0c;因为spring web项目内置了Tomcat web服务器&#xff0c;服务器的配置一般也是采用默认的配置&#xff0c;所以很少关注底层实现&#xff0c;关注点主要在应用程序功能。 初学python的时候…

打破运维“冷门槛“|暴雨液冷数据中心方案再升级

如果将数据比喻为驱动世界运转的新引擎&#xff0c;那数据中心便是为引擎提供源源不断动力的泵站。但随着泵站功率的日益增强&#xff0c;热浪成了不可避免的副产品。如何将数据热能转化为科技动能&#xff0c;是人工智能可持续发展的重要前提。 液冷技术&#xff0c;不仅可实现…

视频素材网站无水印的有哪些?热门视频素材网站分享

当我们走进视频创作的精彩世界时&#xff0c;一个难题常常摆在面前——那些高品质、无水印的视频素材究竟应该在哪里寻找&#xff1f;许多视频创作者感叹&#xff0c;寻找理想的视频素材难度甚至超过了寻找伴侣&#xff01;但不用担心&#xff0c;今天我将为您介绍几个优质的视…

人工智能导论-确定性推理

确定性推理 概述 上一章&#xff1a;讨论了“知识与知识表示”&#xff0c;可以把知识用某种模式表示出来存储到计算机中&#xff0c;但为使计算机具有智能&#xff0c;还必须使它具有思维能力。 本章&#xff1a;1&#xff09;推理是求解问题的一种重要方法。因此&#xff…

对消息队列进行深入学习

目录 1.什么是消息队列。1.1消息队列1.1.1同步的理解1.1.2异步的理解 1.2消息传递与消息队列 2. 消息队列应用场景2.1 异步处理2.2 流量削锋2.3 应用解耦2.4 日志处理2.5 消息通讯2.6 延时任务2.7 广播消费2.8 分布式事务 3. 主流消息队列3.1 RabbitMQ3.1.1 RabbitMQ工作原理3.…

win11家庭版怎么升级专业版

随着Windows 11的推出&#xff0c;许多用户享受到了全新的用户界面和功能。然而&#xff0c;Windows 11家庭版在某些高级功能上有所限制&#xff0c;例如&#xff0c;组策略管理、远程桌面连接等。为了满足更多的工作需求&#xff0c;许多用户希望将Windows 11家庭版升级到专业…

2024高考大数据出炉!考生偏爱南方高校,计算机专业热度下降!

近日&#xff0c;百度携手中国教育在线共同发布了名为**《百度热搜・2024高考大数据》**的报告&#xff0c;这份报告详细揭示了2024年广大考生最感兴趣的高校和专业等关键信息。 与去年相比&#xff0c;今年的高考人数和关注度均有所上升。据报告透露&#xff0c;百度上关于高…

小程序-模板与配置

一、WXML模板语法 1.数据绑定 2.事件绑定 什么是事件 小程序中常用的事件 事件对象的属性列表 target和currentTarget的区别 bindtap的语法格式 在事件处理函数中为data中的数据赋值 3.事件传参与数据同步 事件传参 &#xff08;以下为错误示例&#xff09; 以上两者的…

搭建调用链监控Zipkin和Sleuth

项目环境: win7、jdk8 1、添加依赖&#xff0c;添加了spring-cloud-starter-zipkin会自动导入Sleuth <!--Sleuth&#xff0c;zipkin--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</…

算法第十天:leetcode203.移除链表元素

一、203.移除链表元素题目描述 203.移除链表元素的链接如下所示&#xff0c;您可复制下面链接网址进入力扣学习&#xff0c;看题解之前一定要先做一遍哦&#xff01; https://leetcode.cn/problems/remove-linked-list-elements/description/https://leetcode.cn/problems/rem…

电商库存API设计与实现详解

库存管理在电商运营中非常重要&#xff0c;因为这影响到电商交易是否能够顺利进行。很多从线下零售发展到电商渠道的朋友了解到了电商库存接口能够高效管理库存&#xff0c;但不知道自己想要应用的场景是否仅通过电商库存接口就能实现&#xff0c;那不妨先了解一下电商库存接口…

Jupyter Notebook安装及基本使用

Jupyter Notebook安装及基本使用 目录 Jupyter Notebook安装及基本使用方式一&#xff1a;Anaconda直接安装方式二&#xff1a;pip命令安装Jupyter使用虚拟环境 方式一&#xff1a;Anaconda直接安装 安装Anaconda 下载地址&#xff0c;输入邮箱&#xff0c;Windows下载 开始安…

达梦数据库的系统视图v$sqltext

达梦数据库的系统视图v$sqltext 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$SQLTEXT 是一个系统视图&#xff0c;用于显示当前正在执行或最近执行的SQL语句的文本信息。这个视图对于监控和分析数据库中的SQL活动非常有用&#xff0c;尤其是在需要调试性…

Java(二十二)---队列

文章目录 前言1.队列(Queue)的概念2.Queue的使用3.队列的模拟实现4.循环队列5.双端队列6.面试题[1. 用队列实现栈](https://leetcode.cn/problems/implement-stack-using-queues/description/)[2. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/de…