arcgis for javascript :WKT与geometry互转

来源:互联网 发布:淘宝女牛仔裤 编辑:程序博客网 时间:2024/06/06 02:18

在项目中要用到polygon和wkt的互转,借此总结了一下arcgis for javascript中的几种常用几何类型和wkt的互相转换。几何的wkt格式的定义请参见:

http://www.cnblogs.com/marsprj/archive/2013/02/08/2909452.html

下图展示了geometry的类型,这里互相转换只是讨论了Point、Multipoint、Polyline、Polygon,至于圆也算在Polygon范畴内:

转换原理:

    综述:运用了字符串的分割、裁剪,还有数组的遍历。

    实例:我们在浏览器调试我们自己的代码时候就可以找到下图类似界面,这里的feature的geometry类型是polygon,显然,我们可以看到对于polygon这种geometry由rings数组组成,每个rings由多个ring组成,每个ring数组由多个point组成,point数组由x,y坐标组成:


几何总结图(没有包括extent):


直接上代码了:

function WktToPolygon(wkt, spatialreference) {    var ringsR = [];        var ringR = [];        var pointR = [];        var rings = wkt.split("(");        rings.splice(0, 2);        rings[rings.length - 1] = rings[rings.length - 1].replace("))", "),");        for (var i = 0; i < rings.length; i++) {            rings[i] = rings[i].replace("),", "");            var ring = rings[i].split(",");            for (var j = 0; j < ring.length; j++) {                var point = ring[j].split(" ");                for (var k = 0; k < point.length; k++) {                    pointR[k] = point[k];                }                ringR[j] = pointR;                pointR = [];            }            ringsR[i] = ringR;            ringR = [];        }        var json = {            rings: ringsR,            spatialReference: spatialreference        }        var polygon = new esri.geometry.Polygon(json);        return polygon;} function PolygonToWKT(polygon) {//这个方法生成的wkt是可以用于多个环的面    var wkt = [];    var wkt1 = "";    var rings = polygon.rings;    for (var i in rings) {               var ring = rings[i];        for (var j in ring) {            var p = ring[j];            wkt.push(p.join(" "));        }        wkt1 += "(" + wkt.join(",") + ")";        //给()与()之间添加分号        if (rings.length > 1 && i < rings.length - 1) {            wkt1 += ",";        }        wkt = [];    }    return "POLYGON (" + wkt1 + ")";}function pointToWKT(point) {    return "POINT("+point.x+" "+point.y +")";}function WktToPoint(wkt,spatialreference) {    var point = wkt.replace("(", "");    point = point.slice(5, -1);    var point1 = point.replace(")", "");    var pointA = point1.split(" ");    var x = pointA[0];    var y = pointA[1];    return (new esri.geometry.Point(x,y,spatialreference));}function multiPointToWKT(multiPoint) {    var points = multiPoint.points;    var wkt="";       for (var i = 0; i < points.length; i++) {        var point = points[i];        wkt += point[0] + " " + point[1];        if (points.length>1&&i1&&j
测试代码:

                    #mapDiv {            width:90%                   }                    

原创粉丝点击