3

If you reference the image, JSON string, and code snippets below, it outlines the code, console output and expected behavior of trying to draw a polygon (or really any geometry/graphic) using the ESRI ArcGIS Javascript API. Not sure what is going on....help please!

JSON String:

{"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"}}

Code to add Shape to Map:

    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");
    }

enter image description here

Hossein Narimani Rad
  • 31,361
  • 18
  • 86
  • 116
JBizz
  • 53
  • 6
  • "Not working" is not a great description. Also, consider adding the relevant code to the actual post instead of just a screenshot. ;-) – Dylan Meeus Aug 25 '16 at 13:29

2 Answers2

4

The JSON string shown in the image is for Graphic object and not a geometry. As you can see it contains geometry & symbol, If you pass it to Graphic it will work.

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

Or if you just want the polygon then your code should be something like this.

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

Also, dont combine legacy and AMD style together.

T Kambi
  • 1,389
  • 2
  • 9
  • 16
0

As T Kambi said, your string is for graphic not geometry, but I'm going to show some ideas in converting between json and esriGeometry.

You can convert json to esri.Geometry, using any of these ways:

  • JsonUtils (esri/geometry/jsonUtils) or
  • esri.geometry.fromJson method.

Here is the code:

METHOD ONE (USING 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);
});

METHOD TWO (Using geometry.fromJson method)

var jsonGeometry = {"x":10,"y":20,"spatialReference":{"wkid":3857}};
var geometry = esri.geometry.fromJson(jsonGeometry);
var graphic = new esri.Graphic(geometry);
Hossein Narimani Rad
  • 31,361
  • 18
  • 86
  • 116