ArcGIS Javascript API - 未显示多边形

时间:2014-04-29 02:46:36

标签: javascript polygons arcgis-js-api

请查找下面的多边形代码。它仅适用于硬编码数据,而不适用于通过数据库传递的数据。

我想更改此内容,以便数据通过数据库传递,而不是硬编码。

Polygon来自以下格式的数据库:

var data = "POLYGON ((174.605111568859 -37.119413675388707, 174.6051123299834 -37.119449718193458, 174.60515905129122 -37.119530204987136, 174.60540067619004 -37.119779304335452, 174.60554255499551 -37.120101860545844, 174.60568043759687 -37.120235191897571, 174.60572696965184 -37.1203066677341, 174.60572849253467 -37.120378753310746, 174.60570674933629 -37.120415100973361, 174.60560757225889 -37.120515590528086, 174.60554177129595 -37.120597601350227, 174.60549026791193 -37.120823630882519, 174.6054873903158 -37.121220253972716, 174.605111568859 -37.119413675388707))"

我正在调用以下函数来加载ESRI地图:

function LoadEsriTrees() {
        var $mover = $('#thingtypecontent');
        $mover.find('div#mapDiv').empty();
//it gives polygon data as prescribed in above format
        var polygonData = $mover.find('input#hdndata').val();   

//following code formats polygon data in required format    
        var check1 = (polygonData.indexOf("POLYGON ((") !== -1);
        if (check1 == true)
            polygonData = polygonData.replace('POLYGON ((', '[[');

        var check2 = (polygonData.indexOf("))") !== -1);
        if (check2 == true)
            polygonData = polygonData.replace('))', ']]');

           polygonData = polygonData.replace(/,\s+/g, '],[');

        //create polygon data 
        var coords = new Array();
        var allLocs = new Array();

        var anchorLat = null;
        var anchorLon = null;

        coords = polygonData.split(" ");

        var thisLocs = new Array();
       var anchorCoord = null;
        if ((coords.length / 2) % 2) {
            anchorCoord = coords.length / 2 - 1;
        }
        else {
            anchorCoord = coords.length / 2;
        }

        for (k = 0; k <= coords.length - 1; k = k + 2) {
    var thisLoc = [coords[k], coords[k + 1]];
                thisLocs.push(thisLoc);
                allLocs.push(thisLoc);

            if (k == anchorCoord) {
                anchorLat = coords[k + 1];
                anchorLon = coords[k];
            }
        }
//thisLocs finally presents data in following format:
thisLocs = [[174.605111568859,  -37.119413675388707],[ 174.6051123299834,  -37.119449718193458],[ 174.60515905129122,  -37.119530204987136],[ 174.60540067619004,  -37.119779304335452],[ 174.60554255499551,  -37.120101860545844],[ 174.60568043759687 , -37.120235191897571],[ 174.60572696965184 , -37.1203066677341],[ 174.60572849253467,  -37.120378753310746],[ 174.60570674933629 , -37.120415100973361],[ 174.60560757225889,  -37.120515590528086],[ 174.60554177129595,  -37.120597601350227],[ 174.60549026791193,  -37.120823630882519],[ 174.6054873903158,  -37.121220253972716],[ 174.605111568859, -37.119413675388707]]


    var map;
    require([
        "esri/map",
        "esri/symbols/SimpleFillSymbol",
        "esri/symbols/SimpleLineSymbol",
        "dojo/_base/Color",

        "esri/graphic",
        "esri/geometry/Polygon",

        "dojo/on",
        "dojo/dom",
        "dojo/domReady!"
    ],
    function (
        Map, SimpleFillSymbol, SimpleLineSymbol, Color,
        Graphic, Polygon,
        on, dom
    ) {
        map = new Map("mapDiv", {
            center: [174.605369, -37.120276],
            zoom: 15,
            basemap: "streets"
        });

        on(map, "load", addGraphic);

        var sfs = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
        new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
        new Color([255, 0, 0]), 2), new Color([255, 255, 0, 0.25])
        )

        function addGraphic() {
            // Draw polygon
           var singleRingPolygon = new esri.geometry.Polygon();                         singleRingPolygon.addRing(thisLocs);
           singleRingPolygon.spatialReference = new esri.SpatialReference({ wkid: 4326 });
          var poly_wm = esri.geometry.geographicToWebMercator(singleRingPolygon);
         var gra = new Graphic(poly_wm, sfs);
         map.graphics.add(gra);
        }
    });
}

如果thisLocs的值在singleRingPolygon.addRing(thisLocs)中是硬编码的,那么它可以正常工作,但不是上述方法。

1 个答案:

答案 0 :(得分:0)

不确定为什么以及你是否还有问题,但也许它会帮助别人。我不得不使用eval(thisLocs)来为我工作。