wkt转geojson

news/2024/4/27 18:35:07

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.cpky.cn/p/11156.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

jetcache 2级缓存模式实现批量清除

需求 希望能够实现清理指定对象缓存的方法&#xff0c;例如缓存了User表&#xff0c;当User表巨大时&#xff0c;通过id全量去清理不现实&#xff0c;耗费资源也巨大。因此需要能够支持清理指定本地和远程缓存的批量方法。 分析 查看jetcache生成的cache接口&#xff0c;并没…

JVM垃圾回收机制

文章目录 1.标记清除法&#xff08;标记不能清除的&#xff0c;清除其余的&#xff09;2.标记整理法3.标记复制法(标记不能清除的)分代回收思想&#xff1a;三色标记法漏标问题垃圾回收规模&#xff1a;什么是STW&#xff1f;并发标记常见的垃圾回收器的实现Parallel GCConcurr…

151 shell编程,正则表达式,在C语言中如何使用正则表达式

零&#xff0c;坑点记录&#xff1a;bash 和 dash 的区别&#xff0c;导致的坑点 查看当前用的shell 是啥&#xff0c;用的是/bin/bash hunandedehunandede-virtual-machine:~$ echo $SHELL /bin/bash 当shell 脚本运行的时候&#xff08;后面会学到方法&#xff0c;这里是最…

耳目一新的滑块版登录注册界面~

又到了毕业季&#xff0c;大家做毕设的时候总会参考已有的案例&#xff0c;不过大多产品的样式非常单一雷同。本帖博主给大家分享一个比较别树一帜的登录界面&#xff0c;如下&#xff1a; 如果没有账号&#xff0c;点击“去注册”&#xff0c;则会产生如下的效果&#xff1a; …

倍压器电路原理及仿真

倍压器是利用二极管单向导通的特性和电容两端电压不能突变且可以存储能量的特性&#xff0c;使得能量逐步往后级输送&#xff0c;同时线路上的电压也逐渐升高。因此&#xff0c;它可以实现将较低的交流电压转换成一个较高的直流电压。根据倍压的原理&#xff0c;有二倍压、三倍…

绝地求生:PUBG七周年:荣都人机进阶打法!

再给大家写一点攻略&#xff0c;荣都又上线了&#xff0c;但是我发现很多朋友打个人机都不利索。 原因在于荣都的两个人机点NPC太多&#xff0c;并且还是三级兑换点跳人很多&#xff0c;一旦打起来情况非常混乱&#xff0c;最近和朋友总结一套人机打法。 食王府 食王府一定要从…