wkt转geojson

1、js实现,以polygon为例wkt转geojson

function processPolygonString2PolygonArray(polygonString, proj) {var geoJson = {};if (polygonString.startsWith("MULTIPOLYGON")) {// 多面geoJson["type"] = "MultiPolygon";var firstLeftIndex = polygonString.indexOf('(');var lastRightIndex = polygonString.indexOf(')');// 去掉首尾括号    var str = polygonString.substring(firstLeftIndex + 1, polygonString.length - 1); //   ((),(),()) , ((),(),()) , ((),(),())// console.log(str);var pArray = new Array();var polygonArray = str.split(")),((");for (var i = 0; i < polygonArray.length; i++) {var pStr = polygonArray[i];//每个polygon的Stringif (polygonArray.length === 1) {//如果只有1个,说明没有被分割// 去掉第一个(  去掉结尾)pStr = pStr.substring(1, pStr.length - 1);} else if (i === 0) {// 第一个,去第一个(   补结尾加上 )pStr = pStr.substring(1, pStr.length) + ")"; //  (),(),()   环的集合}else if (i === polygonArray.length - 1) {// 最后一个: 补第一个( , 去 最后一个)pStr = "(" + pStr.substring(0, pStr.length - 1);} else {// 中间,补第一个(   补最后一个 )pStr = "(" + pStr + ")";}// pStr 表示  () , () ,()   线环集合// 分割环var rArray = new Array();var ringsArray = pStr.split("),(");for (var j = 0; j < ringsArray.length; j++) {var ringStr = ringsArray[j];if (ringsArray.length === 1) {// 去掉第一个(   去掉结尾  )ringStr = ringStr.substring(1, ringStr.length - 1);} else if (j === 0) {                    // 如果是第一个// 去掉第一个(ringStr = ringStr.substring(1, ringStr.length);} else if (j === ringsArray.length - 1) {// 最后一个 // 去掉结尾 )ringStr = ringStr.substring(0, ringStr.length - 1);}// 再按逗号分割就是点集合var ptsArray = new Array();var pointArr = ringStr.split(",");for (var k = 0; k < pointArr.length; k++) {var pt_arr = pointArr[k].split(" ");var proj_arr = proj4(proj).inverse([pt_arr[0], pt_arr[1]]);ptsArray.push(proj_arr);}rArray.push(ptsArray);}pArray.push(rArray);}//console.log(JSON.stringify(pArray));geoJson["coordinates"] = pArray;} else if (polygonString.startsWith("POLYGON")) {// 面,其中有可能有环geoJson["type"] = "Polygon";var firstLeftIndex = polygonString.indexOf('(');var lastRightIndex = polygonString.indexOf(')');// 去掉首尾括号    var str = polygonString.substring(firstLeftIndex + 1, polygonString.length - 1); //   (),(),() var rArray = new Array();var ringsArray = str.split("),(");for (var j = 0; j < ringsArray.length; j++) {var ringStr = ringsArray[j];if (ringsArray.length === 1) {// 去掉第一个(   去掉结尾  )ringStr = ringStr.substring(1, ringStr.length - 1);} else if (j === 0) {                    // 如果是第一个// 去掉第一个(ringStr = ringStr.substring(1, ringStr.length);} else if (j === ringsArray.length - 1) {// 最后一个 // 去掉结尾 )ringStr = ringStr.substring(0, ringStr.length - 1);}// 再按逗号分割就是点集合var ptsArray = new Array();var pointArr = ringStr.split(",");for (var k = 0; k < pointArr.length; k++) {var pt_arr = pointArr[k].split(" ");var proj_arr = proj4(proj).inverse([pt_arr[0], pt_arr[1]]);ptsArray.push(proj_arr);}rArray.push(ptsArray);}geoJson["coordinates"] = rArray;}return geoJson;
}

2、npm实现

npm install terraformer - wkt - parserimport wkt from 'wkt'var wkt = require('terraformer-wkt-parser');// parse a WKT file, convert it into a terraformer primitive
var primitive = wkt.parse('LINESTRING (30 10, 10 30, 40 40)');// take a terraformer primitive and convert it into a WKT representation
var polygon = wkt.stringify({"type": "Polygon","coordinates": [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],[[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]}
);

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis Geo:解锁地理位置数据的新可能性

Redis Geo 是 Redis 提供的一种地理位置信息存储和查询的功能&#xff0c;通过使用 Geo 数据结构&#xff0c;可以方便地存储地理位置的经纬度坐标&#xff0c;并支持根据位置进行附近位置查询等操作。 Redis Geo 的所有命令详解和示例 GEOADD key longitude latitude member …

ensp中pc机访问不同网络的服务器

拓扑图如下&#xff0c;资源已上传 说明&#xff1a;pc通过2个路由访问server服务器 三条线路分别是192.168.1.0网段&#xff0c;192.168.2.0网段和192.168.3.0网段&#xff0c;在未配置的情况下&#xff0c;pc设备是访问不到server的 具体操作流程 第一&#xff1b;pc设备…

企业微信更改主体的怎么进行线上公证?

企业微信变更主体有什么作用&#xff1f; 做过企业运营的小伙伴都知道&#xff0c;很多时候经常会遇到现有的企业需要注销&#xff0c;切换成新的企业进行经营的情况&#xff0c;但是原来企业申请的企业微信上面却积累了很多客户&#xff0c;肯定不能直接丢弃&#xff0c;所以这…

HCIA-Datacom H12-811 题库补充(3/26)

完整题库及答案解析&#xff0c;请直接扫描上方二维码&#xff0c;持续更新中 管理员想要彻底删除旧的设备配置文件<config.zip>&#xff0c;则下面的命令正确的是() A&#xff1a;reset config.zip B&#xff1a;delete/unreserved config.zip C&#xff1a;clear co…

Docker搭建LNMP环境实战(01):前言

缘起&#xff1a;不久前学习了Docker相关知识&#xff0c;并在Docker环境下学习了LNMP环境的搭建。由于网上的文章大多没有翔实、可行的案例&#xff0c;很多文章都是断章取义&#xff0c;所以&#xff0c;期间踩了太多太多的坑&#xff0c;初学者想要真正顺利地搭建一套环境起…

element ui的下拉选择单选和多选

单选&#xff1a; html代码&#xff1a; <el-form-item label"指令分类: "><el-select v-model"cid" style"width:100%;" placeholder"请选择指令分类" clearable><el-option v-for"item in orderCidList"…

【版本控制】git使用指南

Git 是一个免费、开源的分布式版本控制系统&#xff0c;最初由 Linus Torvalds 于2005年创建。它旨在管理项目的源代码&#xff0c;并提供了跟踪更改、协作开发、版本控制、分支管理等功能。 一、版本控制概念 版本控制系统&#xff08;Version Control System&#xff0c;VC…

基于深度学习的海洋鱼类识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............................................................ % 对测试集进行分类预测 [Pr…

谷歌AI搜索惊现恶意网站推荐!用户安全再遭威胁?

近日&#xff0c;谷歌推出的新搜索生成体验(SGE)功能引发广泛关注。然而&#xff0c;这一旨在提升搜索体验的AI功能却陷入了争议&#xff0c;有报道称其可能在生成的响应中推广欺诈网站和恶意软件&#xff0c;为用户带来安全风险。 AI-321 | 专注于AI工具分享的网站 AI工具集 …

云电脑火爆出圈,如何选择和使用?--腾讯云、ToDesk云电脑、青椒云使用评测和攻略

前言&#xff1a; Hello大家好&#xff0c;我是Dream。在当下&#xff0c;科技的飞速发展已经深入影响着我们的日常生活&#xff0c;特别是随着物联网的兴起和5G网络的普及&#xff0c;云计算作为一个重要的技术概念也逐渐走进了我们的视野。云计算早已不再是一个陌生的名词&am…

ReactNative项目构建分析与思考之RN组件化

传统RN项目对比 ReactNative项目构建分析与思考之react-native-gradle-plugin ReactNative项目构建分析与思考之native_modules.gradle ReactNative项目构建分析与思考之 cli-config 在之前的文章中&#xff0c;已经对RN的默认项目有了一个详细的分析&#xff0c;下面我们来…

ElasticSearch启动报错:Exception in thread “main“ SettingsException

Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]]; 这个报错说明elasticsearch.yml这个配…

企业如何进行数字化转型?

企业进行数字化转型是一个系统性工程&#xff0c;涉及战略规划、技术应用、组织变革和人才培养等多个方面。以下是实现企业数字化转型的一些关键步骤和要素&#xff1a; 1.战略规划与目标设定&#xff1a; 明确数字化转型的目标和愿景&#xff0c;确保与企业整体战略相一致。 …

Linux系统编程 - 进程异常自动重启

Linux系统编程 - 进程异常自动重启 文章目录 Linux系统编程 - 进程异常自动重启开篇基础概念守护进程僵死进程(zombie) 设计思路源码实现总结 开篇 在Linux平台&#xff0c;自研服务进程通常以守护进程的形式在后台常驻运行。但偶尔也会遇到服务进程异常crash&#xff0c;导致产…

Linux:rpm部署Jenkins(1)

1.获取Jenkins安装包 我这里使用的是centos7系统&#xff0c;ip为&#xff1a;192.168.6.6 2G运存 连接外网 Jenkins需要java环境&#xff0c;java的jdk包你可以去网上下载离线包&#xff0c;或者直接去yum安装&#xff0c;我这里使用的是yum安装 再去获取Jenkins的rpm包…

每日一题——LeetCode1720.解码异或后的数组

方法一 异或运算的性质 encoded[i−1]arr[i−1]⊕arr[i] 在等式两边同时异或arr[i−1] 由于&#xff1a; 一个数异或它自己&#xff0c;结果总是0。 0异或任何数&#xff0c;结果都是那个数本身。 所以等式可以转化为&#xff1a; arr[i]arr[i−1]⊕encoded[i−1] 由于 a…

量子时代隐患显露!苹果CPU漏洞被爆,Mac用户敏感数据易遭窃取

研究表明&#xff0c;一项使Apple M系列处理器速度更快的功能也使它们容易受到无法修补的新侧信道攻击。理论上&#xff0c;黑客可以提取秘密加密密钥&#xff0c;然后访问敏感数据。 这个新发现的概念验证攻击被称为“GoFetch”。 GoFetch基于一种称为数据内存依赖预取器&…

qrcode插件-生成二维码

安装 yarn add qrcodejs2 --save npm install qrcodejs2 --save 使用 <template><div><div id"qrcodeImg"></div><!-- 创建一个div&#xff0c;并设置id --></div> </template> <script> import QRCode from q…

Sequelize一个易用且基于 promise 的 Node.js ORM 工具

Sequelize中文文档|Sequelize中文网 Sequelize 是一个易用且基于 promise 的 Node.js ORM 工具 适用于 Postgres, MySQL, MariaDB, SQLite, DB2, Microsoft SQL Server, Snowflake, Oracle DB 和 Db2 for IBM i. 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功…

洛谷刷题 | P1706 全排列问题

全排列问题 题目描述 按照字典序输出自然数 1 1 1 到 n n n 所有不重复的排列&#xff0c;即 n n n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n n n。 输出格式 由 1 ∼ n 1 \sim n 1∼n 组成的所有不重复的数字序…