WebGIS开发实战:WKT转GeoJSON的多种技巧与Leaflet加载应用详解

WebGIS开发实战:WKT转GeoJSON的多种技巧与Leaflet加载应用详解

目录

前言

一、WKT后台转换实现

1、基于PostGIS实现

2、GeoTools实现

二、wellknown.js转换

1、wellknown.js是什么?

2、wellknown.js的方法

三、在Leaflet.js中集成wellknow.js

1、资源引入

2、将wkt转为geojson

四、总结


前言

        在当今数字化浪潮中,地理信息系统(GIS)技术正以前所未有的速度融入我们的生活与工作。从城市规划到环境监测,从物流配送到旅游出行,地理空间数据的价值日益凸显。而 WebGIS,作为 GIS 技术与 Web 技术的深度融合,更是为地理信息的共享与交互开辟了广阔天地。它让地理数据能够通过网络在各种终端设备上轻松呈现,极大地拓展了 GIS 的应用场景和受众群体。然而,在 WebGIS 开发过程中,数据格式的转换与兼容始终是一个关键挑战。其中,WKT(Well-Known Text)和 GeoJSON 作为两种常见的地理空间数据格式,它们之间的转换更是开发者们经常需要面对的问题。WKT 是一种简单易读的文本格式,广泛用于地理数据的存储与交换,但其在 Web 环境下的可视化和交互性相对较弱;而 GeoJSON 则以其简洁的 JSON 结构,完美契合了 Web 开发的需求,便于与各种前端框架和库进行集成,实现地图的渲染、交互以及地理数据的动态展示。

        那么,如何高效地将 WKT 数据转换为 GeoJSON 格式,以便更好地在 WebGIS 应用中使用呢?这正是本文将深入探讨的核心问题。在 WebGIS 开发实战中,我们有幸接触到了多种 WKT 转 GeoJSON 的方法,从基于开源库的便捷转换,到自定义算法的灵活实现,每一种方法都有其独特的优势和适用场景。这些方法不仅能够帮助我们快速完成数据格式转换,还能在一定程度上优化数据处理流程,提升应用性能。

        在本文中,我们将详细介绍这些 WKT 转 GeoJSON 的技巧,包括它们的原理、实现步骤以及优缺点分析。同时,我们还将结合 Leaflet 这一广受欢迎的开源 JavaScript 地图库,深入解析如何将转换后的 GeoJSON 数据加载到 Leaflet 地图中,实现地图的绘制、图层管理、交互功能开发等一系列实战应用。Leaflet 以其轻量级、高性能、易扩展的特点,在 WebGIS 前端开发领域占据着重要地位。通过 Leaflet 加载 GeoJSON 数据,我们能够轻松构建出功能丰富、交互流畅的地图应用,满足不同用户的需求。

        无论你是 GIS 领域的开发人员,希望提升 WebGIS 应用的数据处理与可视化能力;还是 Web 开发者,想要将地理信息融入你的项目中,本文都将为你提供宝贵的知识和实用的技巧。让我们一起踏上这场 WebGIS 开发实战之旅,解锁 WKT 转 GeoJSON 的奥秘,探索 Leaflet 加载应用的无限可能,共同推动地理信息在 Web 环境下的创新与发展。

一、WKT后台转换实现

        本节以PostGIS空间数据库和Java后台为例,介绍如何基于空间数据库和Geotools库实现Wkt转为GeoJSON。

1、基于PostGIS实现

        如果大家的开发数据库中有空间数据库的话,我们可以直接利用空间数据的空间函数来进行处理,以我们之前介绍过的地震信息数据为例,使用以下SQL语句可以查询空间属性的WKT格式,查询语句如下:

select st_asewkt(geom) from biz_ceic_earthquake limit 10;

        在Navicat执行上述语句后,可以看到如下结果:

        如果要实现对应的WKT转为GeoJSON应该如何实现呢?我们只需要使用st_asgeojson函数即可完成转换。示例SQL查询语句如下:

select st_asewkt(geom),st_asgeojson(geom) from biz_ceic_earthquake limit 10;

        在返回的结果集中可以看到以下结果:

        第二列就是我们需要的Geojson类型。有了这个sql语句之后,我们就可以在Java中结合SQL查询将结果返回给前端。这个方案的本质还是直接利用了空间数据库的空间查询能力,在此不再赘述。

2、GeoTools实现

        这里介绍完全基于Geotools的纯后台转换逻辑,只需要只用到Geotools这个组件。在工程项目中首先要引入Geotools组件,在Pom.xml中首先引入以下依赖:

<dependency> <groupId>org.geotools</groupId> <artifactId>gt-geojson</artifactId> <version>28.2</version> <!-- 使用最新版本 --> </dependency> <dependency> <groupId>org.locationtech.jts</groupId> <artifactId>jts-core</artifactId> <version>1.19.0</version> <!-- 使用最新版本 --> </dependency>

        引入相应的资源后,接下来我们就可以使用Geotools来实现把Wkt字符串转为Geojson。核心转换代码如下:

package com.yelang.project.geotools.wkt2json; import org.geotools.geojson.geom.GeometryJSON; import org.geotools.geometry.jts.JTSFactoryFinder; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.io.WKTReader; import java.io.StringWriter; public class WKTToGeoJSON { public static String wktToJson(String wkt) { String json = null; try { // 创建 GeometryFactory 和 WKTReader GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null); WKTReader reader = new WKTReader(geometryFactory); // 解析 WKT 字符串为 Geometry 对象 Geometry geometry = reader.read(wkt); // 创建 GeometryJSON 对象,用于将 Geometry 转换为 GeoJSON GeometryJSON geometryJson = new GeometryJSON(); // 将 Geometry 转换为 GeoJSON 格式的字符串 StringWriter writer = new StringWriter(); geometryJson.write(geometry, writer); json = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return json; } public static void main(String[] args) { String wkt = "POLYGON ((0 0, 0 1, 1 1, 1 0, 0 0))"; //{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,1],[1,1],[1,0.0],[0.0,0.0]]]} String geoJson = wktToJson(wkt); System.out.println(geoJson); } }

        这里主要使用WKTReader读取WKT的字符串,然后转为Geometry,最后通过GeometryJSON进行GeoJSON格式化,从而实现从WKT到GeoJSON的转换。代码完成后,我们使用程序进行验证,输出如下,说明转换成功:

二、wellknown.js转换

        如果在开发WebGIS应用时,按照约定的标准,第三方接口返回给了一个WKT字符串,而我们没有对应的后台支撑,此时又该怎么办呢?如果我们只有前端,那么应该如何集成对应的WKT,从而达到页面的渲染展示。相信这是很多从事webgis开发的同学会遇到的问题。以此本节重点讲解如何基于纯前端wellkonw.js组件进行Wkt到GeoJSON的转换,并提供加载的功能。

1、wellknown.js是什么?

        不论是使用Leaflet还是openlayers或者Cesium来进行WebGIS开发,如果遇到WKT,还真不是一下子就能介入的,而GeoJSON是一种比较同样的格式,因此急需一款可以直接将Wkt转为GeoJSON的工具。这里介绍wellknow.js这款组件,是大名鼎鼎的Mapbox开源的一个成熟组件,开源地址如下:wellknown/

Parse & stringify Well-Known Text into GeoJSON.

SupportPoint + MultiPointLineString + MultiLineStringPolygon + MultiPolygonGeometryCollection2D, 3D, 4D geometries

        因此这款组件我们完全可以用来解决遇到的问题。

2、wellknown.js的方法

        这款插件很迷你,核心方法就是实现两种格式的转换。因此对外提供的两个核心函数就是实现从WKT到GeoJSON的转换和互转。

parse(wkt)

Given WKT as a string, return a GeoJSON geometry object or null if parse fails.

stringify(geojson)

Given a GeoJSON geometry object or Feature object, return a WKT representation as a string. Throws an error if given a FeatureCollection or unknown input.

        请熟练这两个方法,尤其是第一个方法,将是我们实现WKT转为GeoJSON的基础。了解了wellknow的基本知识后,下面我们就以Leaflet为例,重点讲解如何进行集成。

三、在Leaflet.js中集成wellknow.js

        本节将详细讲解如何在Leaflet中集成wellknow.js。当然大家可以根据自己的需要和熟练程度,选择自己熟悉的二三维引擎来进行WebGIS应用的开发。

1、资源引入

        在Leaflet.js页面中引入wellknow.js的方法很简单,最简单的方式就是直接使用<Script>的方式直接引入即可。核心代码如下:

<script src="/pcwater/static/js/wellknown.js"></script>

2、将wkt转为geojson

        引入资源以后,接下来就可以调用提供的API实现将WKT转为GeoJSON,代码也非常的简介,如下所示:

var myStyle = {color:"red",weight:5,"opacity":1, "fillOpacity": 0}; const geojson = wellknown.parse(_tempPolyline); var areaLayer = L.geoJSON(geojson,{style:myStyle}).addTo(showLayerGroup);

        这里指定了一个GeoJSON的展示样式,包括颜色、透明度和填充透明度,最后再调用leaflet的geojson展示方法实现WKT方法的转换,从而实现空间是属性的展示。如果在完全没有后端的前提下,可以采用这种方式来进行转换。

四、总结

        以上就是今天的主要内容,本文详细的介绍了如何在后台基于空间数据库和Geotools组件实现Wkt转换为GeoJSON,也介绍了一个前端组件wellknowjs这种纯前端的解决方案。在本文中,我们将详细介绍这些 WKT 转 GeoJSON 的技巧,包括它们的原理、实现步骤以及优缺点分析。同时,我们还将结合 Leaflet 这一广受欢迎的开源 JavaScript 地图库,深入解析如何将转换后的 GeoJSON 数据加载到 Leaflet 地图中,实现地图的绘制、图层管理、交互功能开发等一系列实战应用。Leaflet 以其轻量级、高性能、易扩展的特点,在 WebGIS 前端开发领域占据着重要地位。通过 Leaflet 加载 GeoJSON 数据,我们能够轻松构建出功能丰富、交互流畅的地图应用,满足不同用户的需求。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。

Read more

基于FPGA的北斗导航自适应抗干扰算法的设计与实现(任务书+开题报告+文献综述+代码+仿真+实物+毕业论文)

基于FPGA的北斗导航自适应抗干扰算法的设计与实现(任务书+开题报告+文献综述+代码+仿真+实物+毕业论文)

摘   要 如今,随着卫星导航技术的飞速发展,位置信息服务已经融入到我们的日常生活中,导航目前被称为继移动互联网后第三大产业。卫星导航在维护国家的安全中也发挥着不可替代的作用。为了使导航系统不受干扰的影响,本文以北斗导航系统为平台,研究基于阵列天线的自适应抗干扰算法。 首先,文章就自适应抗干扰算法的原理和方法进行了系统介绍,并在MATLAB中建立阵列模型,对基于功率倒置算法的空域抗干扰算法和空时联合抗干扰算法进行性能仿真。然后根据系统的指标,确定了在FPGA中实现抗干扰算法的方案,包括数字下变频、权值计算、数据加权、数字上变频等模块。根据权值计算模块实现方式的不同,本文提供了两种抗干扰算法在FPGA中实现的方案:一种是基于FPGA嵌入式软核NIOS II的抗干扰实现,将权值计算的过程放在NIOS II软核中,用C语言进行实现;另一种是基于逻辑语言的抗干扰算法的实现,即用硬件描述语言Verilog HDL进行权值的计算。权值计算涉及到浮点数运算和Hermite矩阵求逆,本文给出了各模块的设计方法和仿真结果,并与MATLAB仿真结果进行对比。最后给出了两种实现方案的实测结果,表明两种实

FPGA 工程师到底有哪些方向?每个岗位都在干什么?一篇给你讲清楚

FPGA 工程师到底有哪些方向?每个岗位都在干什么?一篇给你讲清楚

很多人说“学 FPGA 就是写 Verilog”,但真正进了行业才发现—— FPGA 工程师并不是一个岗位,而是一整个岗位族群。 不同公司、不同项目,对 FPGA 工程师的要求差异非常大。 如果方向选错,可能学了半年发现岗位根本不对口。 这篇文章就系统地给你拆一拆: 👉 FPGA 工程师到底有哪些岗位? 👉 每个岗位具体干什么? 👉 需要掌握哪些能力? 👉 适合什么样的人? 一、FPGA 工程师整体岗位划分(先给结论) 从企业招聘角度来看,FPGA 岗位大致可以分为 6 类: 岗位方向关键词偏向FPGA 逻辑设计工程师Verilog / 时序 / 接口核心开发FPGA 算法 / 加速工程师图像 / AI / DSP算法落地FPGA 底层驱动工程师DDR / PCIe / SerDes硬件接口FPGA 系统应用工程师Linux + FPGA系统集成FPGA 验证 / 测试仿真 / 验证质量保障FPGA 技术支持 / FA客户 / 项目支持应用型

OpenClaw-多飞书机器人与多Agent团队实战复盘

OpenClaw-多飞书机器人与多Agent团队实战复盘

OpenClaw 多飞书机器人与多 Agent 团队实战复盘 这篇文章完整记录一次从单机安装到多机器人协作落地的真实过程: 包括 Windows 安装报错、Gateway 连通、模型切换、Feishu 配对、多 Agent 路由、身份错位修复,以及最终形成“产品-开发-测试-评审-文档-运维”团队。 一、目标与结果 这次实践的目标很明确: 1. 在 Windows 上稳定跑通 OpenClaw 2. 接入飞书机器人 3. 做到一个机器人对应一个 Agent 角色 4. 支持多模型并行(OpenAI + Ollama) 5. 最终形成可执行的多 Agent 团队 最终落地状态(已验证): * 渠道:Feishu 多账号在线 * 路由:按 accountId

宇树 G1 机器人开发入门:有线 & 无线连接完整指南

宇树 G1 机器人开发入门:有线 & 无线连接完整指南

适用读者:机器人二次开发者、科研人员 开发环境:Ubuntu 20.04(推荐) 机器人型号:Unitree G1 EDU+ 前言 宇树 G1 是一款面向科研与商业应用的高性能人形机器人,支持丰富的二次开发接口。在正式进行算法调试与功能开发之前,首要任务是建立稳定的开发连接。本文将详细介绍两种主流连接方式:有线(网线直连) 与 无线(WiFi + SSH),并附上完整的配置流程,帮助开发者快速上手。 一、有线连接(推荐新手优先使用) 有线连接通过网线直接将开发电脑与 G1 机器人相连,具有延迟低、稳定性高、不依赖外部网络的优势,是新手入门和底层调试的首选方式。 1.1 前置条件 所需物品说明开发电脑推荐安装 Ubuntu 20.04,或在 Windows 上使用虚拟机宇树 G1 机器人确保已开机且处于正常状态网线(