GeoServer+vue2+leaflet构建地图服务

本文介绍了如何使用GeoServer、Vue2和Leaflet构建地图服务,从构建Vue工程到实现地图加载、要素点击、绘制等功能。通过Vue的代理设置解决跨域问题,详细步骤涵盖工程构建、地图页面创建、绘制要素页面,解决marker不显示问题,提供完整的源代码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为geoserver就是后端服务,所以如果没有太强烈的数据安全需求,其实没有必要再加一个python django或者java springboot来做服务中转,转发请求。

现在其实有一个大前端的概念,前端开发模式下,能模拟服务端请求,也能解决get和post请求的跨域问题,而且前端也可以直接部署到服务器上,所以,我们只要有一个前端平台就可以了。

我这里选用的前端框架是vue2,主要出于三点考虑,其一是简单易用上手快;其二是leaflet对它的集成比较好;其三是用的人比较多,有点问题上网搜,容易找到回答。

(这里着重提示一下,尽量用比较大众的东西,否则的话,排查问题、查找资料都很难,做得好赖也不好评价。会油然而生孤立无援之感,这是经验之谈。)

我的IDE选择的是sublime,轻量,而且插件多。

Git代码见:https://github.com/yimengyao13/geoserver_vue_leaflet。别忘了给点个star!

前端工程能实现,地图加载WMTS服务,点击渲染geojson,根据属性筛选要素,矢量要素绘制等功能,最常用的功能都涵盖了,怎么实现,往下看,写得很详细。

本例配套的Geoserver发布地图服务见:https://zhuanlan.zhihu.com/p/377826133

视频教程见:

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

一、构建工程

1-1.构建vue-cli工程

首先要确保本机已经安装了nodejs和vue。

如果没有安装,nodejs安装参见:https://www.runoob.com/nodejs/nodejs-install-setup.html。

Vue安装参见:https://www.runoob.com/w3cnote/vue2-start-coding.html。

安装完之后,查看一下node和vue的版本。

Vue已经有3版本了,但为了稳定性,我们还是用2版本。记住vue的版本号,后续安装依赖,要考虑版本。

好,我们默认已经安装好nodejs和vue了,接下来我们要开始构建工程了。

打开cmd窗口,切换到指定路径下。

首先,我们切换一下vue的下载源。

因为vue的资源服务器在国外,下载起来特别慢,我们切换到淘宝镜像:

npm config set registry https://registry.npm.taobao.org

然后运行:

mkdir geoserver_vue2_leaflet

新建一个geoserver_vue2_leaflet文件夹。

cd geoserver_vue2_leaflet

切换到文件夹下。

运行:

vue init webpack geoserver_vue_leaflet

新建工程geoserver_vue_leaflet。

根据提示回车,或者输入内容,保持默认设置就行,这些后续都可以修改。

注意install vue-router项,要选择yes。

工程安装完之后,运行:

cd geoserver_vue_leaflet

GeoServer是一款开源的地图服务服务器,主要用于发布、管理和分发地理空间数据。而Vue.js是一个流行的JavaScript前端框架,用于构建用户界面。要在Vue应用中展示GeoServer的数据,通常需要通过Web Map Service (WMS) 或 Web Feature Service (WFS) 来获取地图切片或者矢量数据。 以下是基本步骤: 1. **安装依赖**:首先在Vue项目中安装`axios`库,它可以帮助我们发送HTTP请求到GeoServer API: ```bash npm install axios ``` 2. **设置API请求**:创建一个函数,使用axios向GeoServer的WMS/WFS端点发起请求,获取地图图像或特征数据。例如: ```javascript import axios from 'axios'; const getMap = async (url, params) => { try { const response = await axios.get(url, { params }); return response.data; } catch (error) { console.error('Error fetching map:', error); } }; ``` 3. **渲染组件**:在Vue组件中,你可以使用响应式地渲染地图图层或者列表视图。比如使用`<img>`标签展示WMS图像,或使用第三方库如`vue-leaflet`来显示WMS/WFS图层。 4. **配置GeoJSON数据**:如果使用的是WFS,可以将返回的GeoJSON数据解析并绑定到Vue组件的状态中,然后通过`v-for`遍历显示。 ```javascript <template> <div> <!-- 使用地图插件显示WMS图层 --> <map :layers="wmsLayers"></map> <!-- 或者使用GeoJSON数据 --> <ul v-if="geojsonData"> <li v-for="(feature, index) in geojsonData" :key="index"> {{ feature.properties.name }} </li> </ul> </div> </template> <script> export default { data() { return { wmsLayers: [], geojsonData: null, }; }, mounted() { // 在这里初始化获取地图和GeoJSON数据 }, methods: { async fetchGeoData() { // 调用getMap函数获取数据 const wmsResponse = await getMap(WMS_URL, { layers: 'your_layer_name', format: 'image/png' }); const geojsonResponse = await getMap(WFS_URL, { service: 'wfs', version: '1.0.0', ... }); this.wmsLayers = processWMS(wmsResponse); this.geojsonData = parseGeoJSON(geojsonResponse); }, }, }; </script> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值