【国庆要来了】基于Leaflet的旅游路线WebGIS可视化实践
前言
转眼2024年的国庆节马上就要来临了,估计很多小伙伴都计划好了旅游路线。金秋十月,不管是选择出门去看看风景,还是选择在家里看人。从自己生活惯了的城市去别人生活惯了的城市,去感受城市烟火、去感受人文风景,为2024年剩下的时间准备画一个完美的符号吧。在这里首先祝福我们伟大的祖国繁荣昌盛、人民安居乐业,出门旅游的朋友们注意安全,收获一路的好风景和好心情,在家休息的朋友们也自得其乐,自有收获。
国庆旅游黄金周,全国各地的文旅部门现在都是使出了浑身解数,期待在今年的黄金周中吸引到我们更多的游客。长沙市作为热门的旅游城市,当地的文旅部门也是开始在各个平台进行广泛的宣传和呐喊。包括长沙本地宝在内的一些互联网平台也是推出了2024年的精品旅游路线推荐,根据不同的旅游需求,按照家国情怀、都市休闲、登高品秋、亲子欢乐、寄情山水主题,给大家组织推荐了5条精品的线路。不过官方是给出了旅游景点地名,那么作为一个GIS开发技术人员,我们是否可以结合本专业来进行一种旅游地图的时空碰撞呢?将地名地点利用WebGIS技术在地图上进行展示,进而为不同的路线分析距离、选择适合的交通工具出行等等,从而更精准的为我们的旅游服务和做好旅游参考。
本文即在此背景之下产生,文章首先结合之前搜集的风景旅游区数据库、还有POI数据库,通过在风景旅游区数据库和POI数据库中根据名称来进行地理编码,找到其对应的经纬度信息,最后基于Leaflet进行时空位置绘制。为各位旅游提供完整的旅游路线预览。
一、应用实例技术实现路径
这里首先对应用实例涉及的技术进行一个介绍,同时给出实现路径。即如何通过地名地址和风景区数据找出对应的经纬度位置,以及查找出对应的经纬度位置后,如何在Leaflet中进行空间数据的展示。
1、关键实现路径
根据 上图可以看出,首先我们需要输入景点的名称信息,根据优先级的策略,我们优先查询风景旅游区的图层数据,如果图层中可以查到当前景点,则直接返回景点的位置经纬度。当然,不可避免的是,有一些数据比如餐饮或者网红打卡点,不一定是风景旅游区,因此无法在对应的图层中找到,针对这部分数据,则需要进一步的关联到POI图层中去继续查询。如果能查询到位置信息,则使用POI的经纬度信息,反之则返回为空,如果有第三方接口如天地图的地理编码查询接口服务,则可以调用这个服务来查询出对应的位置的经纬度信息。最后根据返回的经纬度信息在Leaflet中进行可视化。
2、空间数据库查询
考虑到地名地址的信息不一定是完全准确的,一些名称信息等可能是不全的,如果有能力的话,最好使用分词的模式来进行关键词匹配,合理为了简单起见,暂时使用在数据库中的模糊匹配来实现。如果在生产环境中,则不推荐大家这么用,第一是性能不好,第二个是查询的效果也不是非常准确的。查询的SQL非常简单,这里直接给出查询语句,关于原表的表结构,受限于篇幅原因,这里不进行展开,感兴趣可以私聊或者翻阅之前的博客内容,有详细的介绍。
-- 1、 查询风景区表
select * from biz_scenic_spot t where t.name like '%湘丰%';
-- 2、查询POI信息表
select * from biz_poi_info t where t.name like '%湘丰%';
在数据库客户端软件执行以上的SQL之后,可以在执行结果页看到以下的信息,
大家可以在表中找到对应的经纬度字段,将经纬度信息拷贝出来。当然,这里的shp中是包含了经纬度字段,如果大家得到的数据中,没有经纬度信息。怎么进行经纬度信息的提取呢?这里以PostGIS为例,介绍如何使用函数来进行经纬度提取。
-- 2、查询POI信息表
select *,st_x(geom) lon ,st_y(geom) lat from biz_poi_info t where t.name like '%湘丰%';
使用st_y(geometry)和st_x(geometry)来进行经纬度信息的提取。
二、精品路线的WebGIS可视化实现
对精品路线的WebGIS展示,我们采用熟悉的Leaflet库来进行实现。如果您对此不熟悉,可以先进行相关知识的学习,同时本文采用的ES5的原生html和Javascript实现,学有余力,大家可以将代码使用新的前端框架,比如Vue或者React来进行实现。
1、界面基本布局简介
界面的布局其实比较简单,采用的地图加侧边栏的实现方式,居中是地图的主体显示区域,右边配置一个侧边栏组件,在侧边栏中配置一个旅游路线的展示列表,列表下方计划做路线的具体景点展示,推荐旅游路线右边有一个操作按钮,点击按钮会自动切换景点对应的地名以及绘制最新的路线,将所有的景点连接而成。
2、WebGIS可视化实现
为了将所有的旅游路线在地图上进行展示,我们需要将中文的地名地址转化为经纬度信息。按照上一节的转换步骤,基于我们的时空数据库信息,我们首先来进行查询,当然,后期我们可以采用接口服务的方式进行批量操作。以第一条路线为例:
其中文路线景点为:
锦绶堂(湖南省苏维埃旧址)——耀邦故居——秋收起义文家市纪念园——田汉文化园——杨开慧故居——雷锋纪念馆——湖南第一师范旧址——湖南自修大学旧址(船山学社)——《湘江评论》旧址(白果园)
——中共湘区委员会旧址——岳麓山——橘子洲景区(爱晚亭、岳麓书院)——新民学会成立旧址——宁乡石仑关——刘少奇纪念馆——何叔衡谢觉哉故居
根据这些地名,经过查询得出的经纬度信息如下:
var lineInfo1 = [{"lon":114.02698979600,"lat":28.46127479202,"name":"锦绶堂(湖南省苏维埃旧址)"},
{"lon":113.88106756500,"lat":28.08157900607,"name":"耀邦故居"},
{"lon":113.92577651100,"lat":28.40224145438,"name":"秋收起义文家市纪念园"},
{"lon":113.20281080000,"lat":28.32460648000,"name":"田汉文化园"},
{"lon":113.20442230000,"lat":28.59065549000,"name":"杨开慧故居"},
{"lon":112.83963490000,"lat":28.20735347000,"name":"雷锋纪念馆"},
{"lon":112.96615573900,"lat":28.17907124211,"name":"湖南第一师范旧址"},
{"lon":112.97642394000,"lat":28.20314818853,"name":"湖南自修大学旧址(船山学社)"},
{"lon":112.97237720200,"lat":28.19240549916,"name":"《湘江评论》旧址(白果园)"},
{"lon":112.95634770000,"lat":28.17855288000,"name":"橘子洲景区"},
{"lon":112.94699840800,"lat":28.19675004980,"name":"新民学会成立旧址"},
{"lon":112.66766111600,"lat":28.21943663820,"name":"宁乡石仑关"},
{"lon":112.64129723900,"lat":28.03827033474,"name":"刘少奇纪念馆"},
{"lon":112.03729370000,"lat":28.05402452759,"name":"何叔衡谢觉哉故居"}
];
最后,将得到的位置和景点信息在leaflet地图上渲染出来,关键代码如下:
function openLine1(index){
showLayerGroup.clearLayers();
var line1 = new Array();
$("#lineDetails").html("");
var detailsInfo = "";
var data;
switch(index){
case 1 :
data = lineInfo1;
break;
case 2:
data = lineInfo2;
break;
case 3:
data = lineInfo3;
break;
case 4:
data = lineInfo4;
break;
case 5:
data = lineInfo5;
break;
default :
data = lineInfo1;
}
for(var i = 0;i < data.length;i++){
var latlng = new L.latLng(data[i].lat, data[i].lon);
let marker = L.circleMarker(latlng, {
radius: 10,
color: "red",//这里设置的是circleMarker的颜色属性
}).addTo(showLayerGroup);
var name = data[i].name;
marker.bindPopup(name);
mymap.addLayer(showLayerGroup);
line1.push([data[i].lat, data[i].lon]);
detailsInfo += "<span style='font-size:15px;color:#178f26;'>"+ (i + 1) + ":"+ name + "<br/></span>";
$("#lineDetails").html(detailsInfo);
L.polyline([[line1]], {color : "red"}).addTo(showLayerGroup);
}
mymap.setView(showLayerGroup.getBounds().getCenter());// 设置地图的中心位置
}
在上面的代码中,我们不仅展示了所有的旅游路线景点,同时将所有的景点连接起来,形成一条路线。
三、推荐5条旅游路线展示
上面一节讲解如何进行路线的展示,下面我们根据小编的笔触,来深度的解析这5条旅游线路,大美长沙欢迎您,期待你的到来。
1、路线一:家国情怀游
路线包含地点如下:这是一条包含红色因素的路线,一起去看看前辈们奋战的足迹。
通过地图可以看到,这条路线距离比较长,覆盖的地区比较多,而且景点之间距离远,比较适合自驾,公共交通不是很方便,但景点非常值得推荐一看。
2、路线二:都市休闲游
如果不想太远的长途跋涉,只想就近来一场放松和休闲,那么下面这条都市休闲一定可以满足你的期待。首先来看看包含哪些具体的景点:
想看湖南的文脉和风骨,去岳麓山走走,大学城的郎朗读书声中,还回荡着当年薛岳将军和将士们与日寇浴血奋战的厮杀声,听千年学府岳麓书院,连接了古今的文化传奇。到了夜晚再沿着湘江,乘坐橘洲之星,溯江而上,在橘子洲头,浪遏飞舟,感受伟大领袖毛主席的慷慨激昂。在黄兴路步行街,感受长沙city,在太平老街,品饕餮美食。在都市中,放下疲惫的身躯。
这条路线,基本是在长沙城区的核心区域,不必担心路程太远,出门不远就是地铁站,可以让您无缝换乘,一站直达。适合在室内转转,看看这座城市的风味。
3、路线三:等高品秋游
秋天是个油画大师,对色彩尤其的偏爱。不信你看远山,五彩斑斓的色彩铺满了大地,把大自然渲染得令人如此如醉。喜欢自驾的朋友,不妨趁着7天的长假,带着家人或者伙伴,大家结伴而行。走出钢筋森林城市,去登高,去赏秋,看大自然这位大家是如何描绘今年的美丽景象。
湘赣边(浏阳)文化艺术交流中心——浏阳天空剧院——秋收起义纪念园——苍坊旅游区——画里小河生态旅游区——道官冲非遗生态村——大围山国家森林公园——围山云起民宿——周洛大峡谷景区——浏阳石牛寨景区 。
4、路线四:亲子欢乐游
家有孩童,不知道如何选择路线。本地宝已经帮忙安排了一条路线,适合带着家里的宝贝们出行,温馨提醒,路线较远,需要提前规划交通。景区的表演还是非常值得期待。
季高兔窝窝——大王山旅游度假区——黑麋峰国家森林公园——铜官窑文化旅游度假区——五号山谷隐世民宿——2.0版靖港古镇——稻花香里农耕文化园——炭河里国家考古遗址公园——沩山密印景区——灰汤温泉国家旅游度假区——足迹岛星空民宿
5、路线五:寄情山水游
如果假期没来得及去看看辛追娭毑,那么国庆还是可以安排的哦。这里推荐一条线路,包含了湖南博物馆,看看大湖南的灿烂文化。也可以寄情于山水,和松雅湖国家湿地公园、大山冲森林公园、影珠山来个约会。
长沙滨江文化园——湖南博物院——潮宗街——空空客厅民宿——长沙园林生态园——松雅湖国家湿地公园——大山冲森林公园——影珠山——桐乐·影山居民宿——杨开慧纪念馆——湘丰茶业庄园
相对而言,这条路线是一条一路向北的路线,从长沙主城出发,一路向北。
好了,以上就是分享的5条适合2024年国庆出游的旅游路线,趁着假期,一起出去转转吧。不管外来的朋友还是本地的朋友,都希望大家在这个假期中有个愉快的旅程,在每一次的旅程中,收获开心与快乐。
四、总结
以上就是本文的主要内容,文章首先结合之前搜集的风景旅游区数据库、还有POI数据库,通过在风景旅游区数据库和POI数据库中根据名称来进行地理编码,找到其对应的经纬度信息,最后基于Leaflet进行时空位置绘制。为各位旅游提供完整的旅游路线预览。行文仓促,难免有不足之处,如有不足,还恳请各位专家博主在评论区留下真知灼见,不甚感激。
文章部分图源和旅游路线推荐来源于长沙本地宝制作的2024年国庆长沙旅游路线,原文:
国庆来长沙,5条游玩路线推荐!不同类型,值得一逛,祝大家接入愉快。