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

举报
夜郎king 发表于 2025/07/23 09:05:48 2025/07/23
【摘要】 本研究旨在深入挖掘散布在全国各地的趣味地名,通过天地图提供的地理数据基础,精准定位这些地名的位置,获取其周边地理环境、行政区划等多维度信息,为地名的解读与分析提供坚实的地理支撑。

目录


前言

一、搜索API据介绍

1、官方API

2、Leaflet集成

二、成果介绍

1、令人忍俊不禁的地名

2、黑地名

3、数字地名

4、文艺地名

三、总结



前言

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

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

 本研究旨在深入挖掘散布在全国各地的趣味地名,通过天地图提供的地理数据基础,精准定位这些地名的位置,获取其周边地理环境、行政区划等多维度信息,为地名的解读与分析提供坚实的地理支撑。同时,借助 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=您的密钥

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>

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

//用来清空前面的查询结果
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);
}

 下面还要实现在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);
				
		}
	});
}

需要说明的是,这里只展示了两种不同的回调,更多的回调处理请参考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  +"&nbsp;&nbsp;" + poi.typeName +"&nbsp;&nbsp;" + 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;
}

与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());
}

二、成果介绍

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

1、令人忍俊不禁的地名

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

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

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

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

2、黑地名

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

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

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

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

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

3、数字地名

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

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

4、文艺地名

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

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

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

三、总结

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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。