3

如果您参考下面的图像、JSON 字符串和代码片段,它会概述代码、控制台输出和尝试使用 ESRI ArcGIS Javascript API 绘制多边形(或实际上是任何几何图形/图形)的预期行为。不知道发生了什么......请帮助!

JSON字符串:

{"geometry":{"rings":[[[-91.89013671874848,38.03029444608522],[-91.653930664061,38.00865683368494],[-91.64843749999851,38.00432854459864],[-91.5935058593735,37.93070854451552],[-91.577026367186,37.88303274722063],[-91.577026367186 ,37.79192956603227],[-91.631958007811,37.73982010276601],[-91.70886230468598,37.73547599031287],[-91.763793945311,37.76587942393493],[-91.85168457031098,37.85701474874939],[-91.88464355468598,37.9956711998967],[-91.89013671874848,38.03029444608522]]],"spatialReference ":{"wkid":4326}},"symbol":{"color":[0,0,0,64],"outline":{"color":[0,0,0,255],"width" :1,"type":"esriSLS","style":"esriSLSSolid"},"type":"esriSFS","style":"esriSFSSolid"}}

将形状添加到地图的代码:

    function createFromJSON(JSONText){
      console.log("In Create Function");
      dojo.disconnect(handle);

      var jsontext = JSON.parse(JSONText);
      var polygon = new esri.geometry.Polygon(jsontext);
      console.log("Here is the polygon object:");
      console.log(polygon);
      console.log("Now drawing polygon");
       map.graphics.add(new Graphic(polygon, new SimpleFillSymbol()));
      console.log("Polygon should be there");
    }

在此处输入图像描述

4

2 回答 2

4

图像中显示的 JSON 字符串用于Graphic对象而不是几何。如您所见,它包含geometry& symbol,如果您将其传递给 Graphic 它将起作用。

map.graphics.add(new Graphic(jsontext));

或者,如果您只想要多边形,那么您的代码应该是这样的。

var polygon = new esri.geometry.Polygon(jsontext.geometry);

另外,不要将传统风格和 AMD 风格结合在一起。

于 2016-08-25T13:39:44.043 回答
0

正如 T Kambi 所说,您的字符串用于图形而不是几何,但我将展示一些在 json 和 esriGeometry 之间转换的想法。

您可以使用以下任何一种方式将json转换为esri.Geometry

  • JsonUtils( esri/geometry/jsonUtils) 或
  • esri.geometry.fromJson方法。

这是代码:

方法一(使用JsonUtils

require(
    ["esri/map", "esri/geometry/jsonUtils", "esri/config", "dojo/domReady!"],
    function (Map, JsonUtils, esriConfig) {

    var jsonGeometry = {"x":10,"y":20,"spatialReference":{"wkid":3857}};

    //Note: you should not use JsonUtils.fromJson(JSON.stringify(jsonGeometry))
    var geometry = JsonUtils.fromJson(jsonGeometry); 
    var graphic = new esri.Graphic(firstGeometry);
});

方法二(使用geometry.fromJson方法)

var jsonGeometry = {"x":10,"y":20,"spatialReference":{"wkid":3857}};
var geometry = esri.geometry.fromJson(jsonGeometry);
var graphic = new esri.Graphic(geometry);
于 2017-07-31T04:44:59.230 回答