GeoServer+Django(python3)+leaflet构建地图服务

做个最简单的,地图服务用GeoServer发布;Django做后端转发服务请求,leaflet做前端渲染并实现绘制功能。

Python是python3.7,IDE是社区版pycharm。

GeoServer如何发布地图,并测试数据位置见视频教程与图文教程:

https://zhuanlan.zhihu.com/p/377826133

本例代码见git,如果觉得有用,辛苦帮忙点个star:

https://github.com/yimengyao13/geoserver_django_leaflet

视频教程见:

https://www.bilibili.com/video/bv1jw411o7Fw

一、新建Django工程

先确保安装了Django包。

用cmd命令新建工程:

C:\Users\username\AppData\Local\Programs\Python\Python37-32\Scripts\django-admin.py startproject geoserver_django_leaflet

用pycharm打开这个工程geoserver_django_leaflet,在Terminal中运行,python manage.py runserver 5000。

打开网址,127.0.0.1:5000/,如果出现如下界面,说明创建工程成功。

GeoServer+Django(python3)+leaflet构建地图服务

二、发布地图瓦片页面

我们已经知道,GeoServer发布的地图瓦片服务查看网址如下:

http://localhost:8080/geoserver/fangjia/wms?service=WMS&version=1.1.0&request=GetMap&layers=fangjia%3Acommunity_price&bbox=116.2740001637174%2C39.830580795313686%2C116.48989559371867%2C39.98926162440851&width=768&height=564&srs=EPSG%3A4326&styles=&format=application/openlayers

如果加上过滤条件的话,则如下:

GeoServer+Django(python3)+leaflet构建地图服务

在《GeoServer进阶:要素的增删改查》(https://zhuanlan.zhihu.com/p/381601300)中,我们也知道应该如何构造查询语句,接下来就看怎么在leaflet中实现了。

2-1、配置settings.py

首先要配置geoserver_django_leaflet工程的settings.py,使能访问html等。

先在settings.py中,添加templates路径。

GeoServer+Django(python3)+leaflet构建地图服务

再添加静态文件路径,static_files,这里存放的是leaflet.css和leaflet-src.js。

GeoServer+Django(python3)+leaflet构建地图服务

2-2、转发瓦片服务

新建一个python文件,geoserver.py,新增两个方法,wmts和tile_wmts,用来获取瓦片和渲染前端页面。

GeoServer+Django(python3)+leaflet构建地图服务

在urls.py中增加两个url,getwmts用以访问瓦片,tile_wmts用以访问前端页面。

GeoServer+Django(python3)+leaflet构建地图服务

2-3、前端页面

在templates中新建一个html文件,tile_wmts.html。以wms服务的方式请求地图瓦片。

图层、过滤条件等放在wmsOptions中。

GeoServer+Django(python3)+leaflet构建地图服务

2-4.效果

访问,http://127.0.0.1:5000/tile_wmts,效果如下:

GeoServer+Django(python3)+leaflet构建地图服务

取消CQL_FILTER注释,效果如下:

GeoServer+Django(python3)+leaflet构建地图服务

可以替换CQL_FILTER内容试试,例如:

BBOX(the_geom, 116.35259628295898, 39.96099471871276, 116.38727188110352, 39.99567031685729)

或者FID>10,等。

三、查询渲染矢量要素

两种查询渲染矢量要素的方法,一是根据空间位置查询,二是根据属性查询。

3-1.查询方法

在geoserver.py中新建三个方法,getfeature是查询要素,返回geojson数据;bbox_feature是渲染根据位置查询要素的前端页面;attr_feature是渲染根据属性查询要素的前端页面。

GeoServer+Django(python3)+leaflet构建地图服务

3-2.创建url

在urls.py中为这三个方法创建url。

GeoServer+Django(python3)+leaflet构建地图服务

3-3.前端页面

在templates中创建两个页面,bbox_feaute.html和attr_feature.html,因为代码git上都有,这里就截图个图吧。

GeoServer+Django(python3)+leaflet构建地图服务

因为前端使用了jquery,所以静态文件夹里,还需要添加一个jquery-1.7.2.js文件。

GeoServer+Django(python3)+leaflet构建地图服务

3-4.效果

访问:http://127.0.0.1:5000/bbox_feature,在地图上点击,就可以看到渲染的矢量要素,边线黑色,底色白色,有透明度。

GeoServer+Django(python3)+leaflet构建地图服务

访问http://127.0.0.1:5000/attr_feature,输入查询条件,点击确定,就可以看到根据查询条件筛选出来的矢量要素。

GeoServer+Django(python3)+leaflet构建地图服务

四、删除要素

根据名称来删除要素。

4-1.提交数据方法

在geoserver.py中,新建个postgml方法,要素的删除、新增、更新,都用这个方法向geoserver提交数据。

GeoServer+Django(python3)+leaflet构建地图服务

4-2.渲染页面方法

新建一个remove方法,渲染删除要素的页面。

GeoServer+Django(python3)+leaflet构建地图服务

4-3.添加url

新建两个url,一个是postgml,用来提交数据,一个是remove,用来访问remove.html页面。

GeoServer+Django(python3)+leaflet构建地图服务

4-4.前端页面

在templates中新建一个remove.html页面。

GeoServer+Django(python3)+leaflet构建地图服务

在static_files文件夹下新建一个draw_files文件夹,存放两个js文件,jquery-1.7.2.js和jquery.cookie.js,jquery.cookie.js是用来设置请求头的。

4-5.效果

在输入框中输入要素名称,点击确定,即可删除对象。

GeoServer+Django(python3)+leaflet构建地图服务

五、绘制要素

5-1.渲染页面方法

在geoserver.py中新建一个方法,draw,渲染draw.html页面。

GeoServer+Django(python3)+leaflet构建地图服务

5-2.新增url

在urls.py中新增一个url。

5-3.前端页面

在templates中新建一个draw.html文件,绘制页面所需的js和css文件都在draw_files中。这个看git代码吧,因为的确比较复杂。

GeoServer+Django(python3)+leaflet构建地图服务

5-4.效果

在地图上画个多边形,在属性框中输入属性,点击新增,就完成要素的新增了。

GeoServer+Django(python3)+leaflet构建地图服务

5-5.其他

我在这个页面,把所有的leaflet绘制工具都集成了,如果需要建立一个地图绘图工程,可以对这个页面进行改造。

六、总结

这一套geoserver发布地图+leaflet前端的东西,写得脖子疼。

但从地图发布,地图渲染,矢量数据操作等内容都包括了,前端、后端都有,还是很丰富详实的,关键是有代码,作为入门学习,真的很不错。不过要更熟练而深入的掌握,还需要在工作学习中不断的使用,才能更上一层楼。

有道是,”纸上得来终觉浅,绝知此事要躬行”。

要实践,实践,不断实践。

如果大家也觉得很好,那么在git上点个star,收藏、转发、关注点一波咯。

Original: https://blog.csdn.net/sinat_41310868/article/details/117999616
Author: 才华横溢吴道简
Title: GeoServer+Django(python3)+leaflet构建地图服务

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/736863/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球