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的String
            if (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 - parser

import 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]]
        ]
    }
);

 

相关推荐

  1. wktgeojson

    2024-03-28 00:46:01       36 阅读
  2. Python与ArcGIS系列(十七)GDAL之shpgeojson

    2024-03-28 00:46:01       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-28 00:46:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-28 00:46:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-28 00:46:01       87 阅读
  4. Python语言-面向对象

    2024-03-28 00:46:01       96 阅读

热门阅读

  1. Sora模型的应用场景有哪些呢

    2024-03-28 00:46:01       35 阅读
  2. [leetcode] 189. 轮转数组

    2024-03-28 00:46:01       44 阅读
  3. vue-price-format 金额格式化

    2024-03-28 00:46:01       42 阅读
  4. CODEFORCES --- 155A. I_love_%username%

    2024-03-28 00:46:01       37 阅读
  5. AI大模型学习:开启智能时代的新篇章

    2024-03-28 00:46:01       41 阅读
  6. spring-boot解析spring.factories文件

    2024-03-28 00:46:01       43 阅读
  7. 蓝桥杯day15刷题日记

    2024-03-28 00:46:01       40 阅读
  8. vue中数字转汉字,带小数转化

    2024-03-28 00:46:01       40 阅读
  9. 利用Cas中service重定向钓鱼网站问题

    2024-03-28 00:46:01       47 阅读
  10. 【机器学习】如何计算解释模型的SHAP值

    2024-03-28 00:46:01       41 阅读
  11. 华为机试真题练习汇总(101~110)

    2024-03-28 00:46:01       37 阅读
  12. 新建uni-modules插件

    2024-03-28 00:46:01       39 阅读
  13. 前端理论总结(js)——闭包和内存泄漏

    2024-03-28 00:46:01       42 阅读