目录

前言

一、搜索API据介绍

1、官方API

2、Leaflet集成

二、成果介绍

1、令人忍俊不禁的地名

2、黑地名

3、数字地名

4、文艺地名

三、总结


前言

        在华夏大地广袤的土地上,地名承载着深厚的历史文化底蕴,它们如同一颗颗璀璨的明珠,散落在祖国的各个角落,诉说着独特的地域故事与人文传说。这些地名有的因古老的传说而神秘奇幻,有的因独特的地理风貌而形象生动,有的则因历史事件而意义非凡,它们构成了神州大地丰富多彩的 “趣名” 地图。

        随着地理信息技术的飞速发展,天地图作为国家地理信息公共服务平台,为我们提供了海量精准的地理数据和强大的地图服务功能。而 LeafLet 作为一种轻量级、开源的地图 JavaScript 库,凭借其简洁易用的 API 和出色的性能表现,成为众多开发者在构建交互式地图应用时的首选工具。将两者相结合,为我们探索趣味地名开辟了一条全新且高效的道路。

神州趣味地名-基于天地图和LeafLet的趣味地名探索_html

        本研究旨在深入挖掘散布在全国各地的趣味地名,通过天地图提供的地理数据基础,精准定位这些地名的位置,获取其周边地理环境、行政区划等多维度信息,为地名的解读与分析提供坚实的地理支撑。同时,借助 LeafLet 强大的地图可视化与交互能力,在网页端构建一个直观、生动的趣味地名探索平台,让用户能够方便快捷地浏览、搜索和了解这些趣味地名及其背后的故事。在这个平台上,用户可以像翻阅一本生动有趣的历史文化画卷一样,穿梭于不同的地域之间,感受各地独特的风土人情与文化魅力。

        从充满神秘色彩的 “鬼谷子村”,到形象逼真的 “鸡鸣三省”,从蕴含诗意的 “江南水乡”,到承载历史记忆的 “神堂峪”,这些趣味地名背后隐藏着无数令人着迷的传说与历史片段。通过基于天地图和 LeafLet 的探索之旅,我们不仅能够重新发现这些地名的魅力与价值,更能够以一种全新的视角去审视和传承祖国悠久的历史文化,激发人们对地理知识的兴趣和对本土文化的热爱,为推动文化传承与地理教育的融合发展贡献力量,让这些趣味地名在新时代焕发出更加耀眼的光芒,成为连接过去与现在、地域与文化的重要桥梁。

一、搜索API据介绍

        天地图提供了很多有意思的服务,大家可以根据实际情况到官方网站上进行申请开通即可。比如这里需要使用的地名检索服务,我们需要将文字的描述转换为具体的经纬度位置信息。为了查看目标地名在全国的分布,我们将查询范围设置为全国,同时为了方便逐级展示,还开发了按照层级自动查询的方法,支持按照层级来j进行钻取相应的数据。为了让大家对API有一个简单的了解,这里依然对天地图的官方API和如何使用Leaflet来进行集成进行简单的说明。

1、官方API

        1.1 行政区划区域搜索服务

        1.1.1输入参数说明

参数值

参数说明

参数类型

是否必备

备注(值域)

keyWord

搜索的关键字

String

必填

specify

指定行政区的国标码(行政区划编码表)严格按照行政区划编码表中的(名称,gb码)

String

必填

下载 行政区划编码表。9位国标码,如:北京:156110000或北京。

queryType

服务查询类型参数

String

必填

12:行政区划区域搜索服务。

start

返回结果起始位(用于分页和缓存)默认0

String

必填

0-300,表示返回结果的起始位置。

count

返回的结果数量(用于分页和缓存)

String

必填

1-300,返回结果的条数。

dataTypes

数据分类(分类编码表)

String

可选

下载 分类编码表,参数可以分类名称或分类编码。多个分类用","隔开(英文逗号)。

show

返回poi结果信息类别

String

可选

取值为1,则返回基本poi信息; 取值为2,则返回详细poi信息

        1.1.2返回参数说明

参数值

参数说明

参数类型

返回条件

备注(值域)

resultType

返回结果类型

Int

必返回

取值1-5,对应不同的响应类型: 1(普通POI),2(统计),3(行政区),4(建议词搜索),5(线路结果)

count

返回总条数

Int

必返回

keyword

搜索关键词

String

必返回

搜索的关键字。

pois

针对点(类型1)集合返回

Pois Json数组

resultType=1

name

Poi点名称

String

必返回

phone

电话

String

address

地址

String

lonlat

坐标

String

必返回

坐标 x,y

poiType

poi类型

Int

必返回

101:POI数据 102:公交站点

eaddress

英文地址

String

ename

poi点英文名称

String

hotPointID

poi热点ID

String

必返回

热点id

province

所属省名称

String

provinceCode

省行政区编码

String

city

所属城市名称

String

cityCode

市行政区编码

String

county

所属区县名称

String

countyCode

区县行政区编码

String

source

数据信息来源

String

必返回

typeCode

分类编码

String

typeName

分类名称

String

stationData

车站信息结构体 数据

Json 数组

poiType=102

lineName

线路名称

String

必返回

uuid

线路的id

String

必返回

stationUuid

公交站uuid

String

必返回

statistics

针对统计(类型2)集合返回

Json 数组

resultType=2

count

本次统计POI总数量

Int

必返回

adminCount

行政区数量

Int

必返回

priorityCitys

推荐行政区名称

Json数组

必返回

name

行政区名称

String

必返回

count

城市数量

Int

必返回

lonlat

行政区经纬度

String

必返回

坐标 x,y

ename

英文行政名称

String

必返回

adminCode

城市国标码

Int

必返回

9位国标码。

allAdmins

各省包含信息集合

Json数组

必返回

name

行政名称

String

必返回

count

包含数量

Int

必返回

lonlat

行政区经纬度

String

必返回

坐标x,y

adminCode

省国标码

String

必返回

ename

英文行政名称

String

必返回

isleaf

有无下一级行政区

boolean

必返回

有则false,无则true

area

针对行政区省(类型3)集合点

Json 数组

resultType=3

name

名称

String

必返回

bound

定位范围(“minx,miny,maxx,maxy”)

String

返回

lonlat

定位中心点坐标

String

必返回

adminCode

行政区编码

Int

必返回

level

显示级别

Int

必返回

1-18级

lineData

线路结果

Json 数组

resultType=5

stationNum

站数量

String

必返回

poiType

类型为“103”

String

必返回

name

线路名称

String

必返回

uuid

线路id

String

必返回

status

返回状态信息

Json 数组

必返回

结果提示信息

infocode

信息码

Int

必返回

服务状态码表

cndesc

返回中文描述

String

必返回

服务状态码表

        1.1.3行政区划区域搜索示例

请求实例:http://api.tianditu.gov.cn/v2/search?postStr={"keyWord":"商厦","queryType":12,"start":0,"count":10,"specify":"156110108"}&type=query&tk=您的密钥
  • 1.

2、Leaflet集成

        在本实例中,不仅要实现在前端实现Leaflet对天地图的检索服务集成,同时还要实现层级调用,比如在点击省级的统计结果时,可以下钻到市级再到区县级的数据,当然本例还有一点有待完善的地方,如果实现返回的查询就更加完美。要想实际运行本实例,首先需要申请天地图的key,关于如何申请,大家可以参考官方网站。页面主要逻辑如下:

<div class="center-flex">
		趣味地名之leaflet天地图检索实战
</div>
<div id="mapid" style="width: 100%; height: 600px;"></div>
	<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>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

        创建页面的展示和检索交互元素后,定义两个交互方法,关键代码如下:

//用来清空前面的查询结果
var myLayerGroup = L.featureGroup().addTo(map);
	
function execQuery(){
	var keyWord = $("#address").val();
	console.log(keyWord);
	var chinaCode = "156000000";//156000000 默认中国
	callTdtSearch(keyWord,chinaCode);
}
	
function execQueryByCode(specify){
	var keyWord = $("#address").val();
	console.log(keyWord);
	callTdtSearch(keyWord,specify);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

         下面还要实现在Leaflet中调用天地图的API访问接口,用于发送查询的实际请求和接收服务器的返回,由于地名有可能返回直接的POI数据,也可能返回各行政区的统计信息,而在统计接口中,还会需要进行下级行政区划的地名信息调用。公共方法定义如下:

/**
* 调用天地图查询
*/
function callTdtSearch(keyWord,specify){
	var queryUrl = "http://api.tianditu.gov.cn/v2/search?postStr={'keyWord':'"+ keyWord +"','queryType':12,'start':0,'count':10,'specify':'" + specify + "','show':'2'}&type=query&tk="+tdt_client_key;
	$.ajax({
		type: "get",
		url:queryUrl,
		data: {},
		success: function(rsData) {
			// 移除所有图层
			myLayerGroup.clearLayers();
			var rsObj = rsData; 
			var loc_info = rsObj.location;
			var resultType = rsObj.resultType;
			switch(resultType){
				case 1 :
					showPoi(rsObj);
					break;
				case 2:
					showStatistics(rsObj);
					break;
				default:
					console.log("不详");
			}
				
			map.addLayer(myLayerGroup);
				
		}
	});
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

        需要说明的是,这里只展示了两种不同的回调,更多的回调处理请参考resultType来进行扩展。resultType=1表示返回的是poi信息,而resultType=2表示返回的是统计信息,因此在resultType=2的时候可以进行级联调用。首先介绍在展示POI信息时的处理方法:

function showPoi(rsObj){
	var pois = rsObj.pois;
	for(var i = 0;i<pois.length;i++){
		var poi = pois[i];
		var lonlat = poi.lonlat;
		var lonlatStr = lonlat.split(",");
		var marker = L.marker([lonlatStr[1], lonlatStr[0]], {
			icon: L.divIcon({
				iconSize: null,
				className: '',
				popupAnchor:[5,5],
				shadowAnchor:[5,5],
				html: buildHtml(poi,i)
			})
		}).addTo(myLayerGroup);
	}
	map.fitBounds(myLayerGroup.getBounds());
}
	
function buildHtml(poi,index){
	var html = "";
	html += "<div class='marsBlackPanel' style='background:#ff9800;' animation-spaceInDown>";
	var phone = poi.phone == undefined ? "" : poi.phone;
	html += "<div class='marsBlackPanel-text' style=''>" + (index +1) + ":" +poi.name  +"  " + poi.typeName +"  " + phone +  "</div>";
	html += "<div class='marsBlackPanel-text' style=''>行政区:" +poi.province + "/" + poi.city + "/" + poi.county + "</div>";
	html += "<div class='marsBlackPanel-text' style=''>地址:" + poi.address +"</div>";
	html += "</div>";
	return html;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

        与POI的数据展示不一样的是,在统计信息中,由于还要具有下钻的功能,因此我们在具体的统计数据的时候在进行事件的绑定,将查询出来的行政区划code传入到新的方法中。绑定处理事件的函数如下:

//点击还可以进行查询
function buildStatHtml(stat,index){
	var html = "";
	html += "<div class='marsBlackPanel' style='background:#ff9800;' animation-spaceInDown>";
	html += "<div class='marsBlackPanel-text' style='' onclick='execQueryByCode("+stat.adminCode+")'>" + (index +1) + "、" +stat.adminName + "(" + stat.count + ")</div>";
	html += "</div>";
	return html;
}
	
function showStatistics(rsObj){
	var statistics = rsObj.statistics.allAdmins;
	for(var i = 0;i<statistics.length;i++){
		var stat = statistics[i];
		var lonlat = stat.lonlat;
		var lonlatStr = lonlat.split(",");
		var marker = L.marker([lonlatStr[1], lonlatStr[0]], {
			icon: L.divIcon({
				iconSize: null,
				className: '',
				popupAnchor:[5,5],
				shadowAnchor:[5,5],
				html: buildStatHtml(stat,i)
			})
		}).addTo(myLayerGroup);
	}
	map.fitBounds(myLayerGroup.getBounds());
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

二、成果介绍

        下面将结合使用前文讲过的Leaflet集成天地图的相关API和具体的集成过程,将神州大地一些有趣的地名跟大家分享。粗略的进行了一个划分,粗分为以下的几类吧:首先介绍令人忍俊不禁的地名有哪些,然后介绍黑地名,其次介绍一些关于数字的地名,最后介绍全国一些比较文艺的地名。

1、令人忍俊不禁的地名

        立马回头公交站,在全国范围内查找“立马回头”,在地图上可以看到位于浙江省杭州市西湖区的灵隐路和双峰路交叉口的一个公交站台:立马回头,请问在公交站台的乘客是否真的要立马回头呢?隐隐感觉这个站台没有车辆经过一样。

据说,当年乾隆皇帝来杭州,从茅家埠去灵隐,走的是现在上茅家埠村西北面的普福岭山路。第一次路过这里时,对道路状况相当不满,本地官员赶紧为皇上修了一条新路。后来,乾隆再次经过普福岭时,路况已大为改观,龙颜大悦,立马驻足,这才有了“立马回头”的说法。就是你坐车到了这里,到底要不要回头呢?

神州趣味地名-基于天地图和LeafLet的趣味地名探索_html_02

        “六个鸡”,这也是个很有意思的地名,主要是分布在贵州省黔东南苗族侗族自治州凯里市,一共有四个地方包含“六个鸡”这个地名,其中一个是自然村、 一个火车站、另外两个是一个一座桥梁的关键字。

神州趣味地名-基于天地图和LeafLet的趣味地名探索_html_03

        至于它为什么叫“六个鸡”。有一种说法,是说在古代,贵州的官员来村里征收皇粮,村子里的村民因为刚刚逃难到这里,既拿不出粮食来上交,也没有钱来抵粮,搜遍了全村,也只找到了六只鸡来充数。可见此地确实是穷乡僻壤。而现在,当地培养了大批掌握先进适用农业科技知识和技能的新型农民,发展农村致富之路,贫困的面貌已大为改观。

2、黑地名

        很黑村,很黑村到底有多黑?居然还是宇宙里的很黑村,那不得黑出天际?实际上,“很黑”是蒙古语,意思是高山上的一块儿低洼平地儿,叫肯可儿(kenker)。至于宇宙地,1929年《热河经棚县志》(卷四·区村)记载:莫胡鲁沟牌(现宇宙地镇管辖)出现“蔚州地” 字样,基本与“尉州”吻合。民间对“蔚州” 二字可能有忌讳,疑似“喂粥”的地方,后来改称宇宙地。由此,“尉州”“蔚州地”音译为“宇宙地”应是确信无疑。

神州趣味地名-基于天地图和LeafLet的趣味地名探索_趣味地理_04

         到了这个地方是不是要非常注意,这可是宇宙地很黑。开个玩笑,在乡村应该都是非常淳朴的存在,只是这个地名给大家一个比较幽默的印象。

        关于秃顶子,初看到这个地名的时候,也忍不住跟发量进行了关联,不知道当地人的发量怎么样?当然,这只是我个人的臆想罢了。在黑龙江省哈尔滨市尚志市和五常市就有几个有关于秃顶子的地方。

神州趣味地名-基于天地图和LeafLet的趣味地名探索_天地图地名检索_05

        当地的乡亲们,请保护好自己的发量哈。确实有点自黑的幽默风格,请大家不对号入座。

        “迷魂阵”,这个地名更有意思,在山东省聊城市有几个迷魂阵村,分别是东迷魂阵村、西迷魂阵村、后迷魂阵村、小迷魂阵村,这么多迷魂阵村,普通的外地人去了是否真的会迷魂呢?

神州趣味地名-基于天地图和LeafLet的趣味地名探索_神州趣味地理_06

3、数字地名

        “六六大顺”,没成想在地图上还真有这个地名的地点,还是一个钢材城,相比老板在这里一定是事事顺心哈。

神州趣味地名-基于天地图和LeafLet的趣味地名探索_WebGIS地名趣谈_07

        还有一个七八道小菜酒馆,不知道店里是不是真的只有七八道小菜。各位朋友们可以去实地看一看验证一下。

神州趣味地名-基于天地图和LeafLet的趣味地名探索_html_08

4、文艺地名

        “西湖”,上有天堂,下有苏杭。虽然西湖在杭州是个神一样的存在,但也不用这么多自然村都叫西湖吧,不然外地的朋友问路,这是到底去哪个西湖村呢?

神州趣味地名-基于天地图和LeafLet的趣味地名探索_趣味地理_09

        来云南见证一场“风花雪月”,这里不仅有风花雪月的景点,连面包房都叫这个名字。如果想经历风花雪月,一定要从这里路过一下。 

神州趣味地名-基于天地图和LeafLet的趣味地名探索_趣味地理_10

        如果你离“千古绝唱”景区不是很远,一定要记得去这个景区看看哦。它就在吉林省吉林市的磐石市烟筒镇粗榆村官马溶洞。

神州趣味地名-基于天地图和LeafLet的趣味地名探索_WebGIS地名趣谈_11

三、总结

        以上就是本文的主要内容, 本研究旨在深入挖掘散布在全国各地的趣味地名,通过天地图提供的地理数据基础,精准定位这些地名的位置,获取其周边地理环境、行政区划等多维度信息,为地名的解读与分析提供坚实的地理支撑。同时,借助 LeafLet 强大的地图可视化与交互能力,在网页端构建一个直观、生动的趣味地名探索平台,让用户能够方便快捷地浏览、搜索和了解这些趣味地名及其背后的故事。在这个平台上,用户可以像翻阅一本生动有趣的历史文化画卷一样,穿梭于不同的地域之间,感受各地独特的风土人情与文化魅力。