【问题标题】:Convert array of rings to geoJSON object将环数组转换为 geoJSON 对象
【发布时间】:2021-10-25 01:48:42
【问题描述】:

我有一组正在使用的环,我正在尝试将其转换为 geoJSON:

[
    [
        -13441425.32511117,
        4491520.711015136
    ],
    [
        -13440894.1920939,
        4491511.685098792
    ],
    [
        -13440922.71925878,
        4490494.010447212
    ],
    [
        -13441438.25014971,
        4490494.010447212
    ],
    [
        -13441425.32511117,
        4491520.711015136
    ]
]

似乎我应该能够使用ArcGIS Geometry class 相对简单地做到这一点,但我无法让它工作。例如,我尝试创建一个新的 Geometry 实例,然后将环添加到其中,但我不明白在添加环数据后如何在其上调用 toJSON 方法。任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 我还没有使用过这个 API,但是根据文档,它是允许定义环的 Polygon 子类。您是否尝试过创建一个多边形,将此 JSON 输入实例化为 rings 属性,然后调用其 .toJSON 方法?
  • 我试图实例化,但我认为我做的不对:` const polygonGeom = new Geometry({ ring: event.graphic.geometry.rings }) polygonGeom.toJSON() ` 有什么想法吗?
  • @Attila - 哦,我想我误解了你的回答。我看了多边形类。您是否推荐类似:const rings = [ [ // first ring [-97.06138,32.837,35.1,4.8], [-97.06133,32.836,35.2,4.1], [-97.06124,32.834,35.3,4.2], [-97.06138,32.837,35.1,4.8] // same as first vertex ], [ // second ring [-97.06326,32.759,35.4], [-97.06298,32.755,35.5], [-97.06153,32.749,35.6], [-97.06326,32.759,35.4] // same as first vertex ] ]; const polygon = new Polygon({ rings: rings, spatialReference: { wkid: 4326 } }); 然后:polygon.toJson()?
  • 是的。我自己没有尝试过,但根据文档它应该可以工作。
  • 感谢 Attila,这可以将其转换为 JSON。感谢您的帮助!

标签: javascript arrays object arcgis arcgis-js-api


【解决方案1】:

为了更清楚地说明这个主题,感觉它可以帮助其他读者。

不要将 GeoJSON (1) 与 ESRI JSON 混淆。虽然两者都是编码地理特征的格式,但第一个由 IETF 定义,第二个由 ESRI 定义,所以我们讨论的是不同的格式。

需要强调的一个重要区别是,GeoJSON 坐标是使用基于 WGS84 数据 (2) 的地理坐标系来表示的,而在 ESRI 中,JSON 坐标可以在任何系统中表示。

ArcGIS JavaScript API 方法 toJSONfromJSON 使用 ESRI JSON。

在 ESRI JSON 中,多边形由空间参考和一组环(或弯曲环)定义 (3)。环由点数组定义,其中第一个和最后一个相等,并且至少有四个元素(三个点)。

任何多边形(不是空多边形)都应该至少有一个环,即外环,其中的点是顺时针方向的。如果一个多边形有多个环,那么它就有孔,孔点是逆时针方向的,这与外环不同。

最后,正如 cmets 中提到的,要创建一个带有环数组的 Polygon,您只需将其传递给构造函数 (4),

const rings = [
 [  // first ring
  [-97.06138,32.837],
  [-97.06133,32.836],
  [-97.06124,32.834],
  [-97.06138,32.837]  // same as first vertex
 ], [  // second ring
  [-97.06326,32.759],
  [-97.06298,32.755],
  [-97.06153,32.749],
  [-97.06326,32.759]  // same as first vertex
 ]
];

const polygon = new Polygon({
  rings: rings,
  spatialReference: { wkid: 4326 }
});
  1. https://geojson.org
  2. https://datatracker.ietf.org/doc/html/rfc7946#section-4
  3. https://developers.arcgis.com/documentation/common-data-types/geometry-objects.htm
  4. https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#properties-summary

【讨论】:

  • 非常感谢。这确实帮助我理解了 GeoJSON 与 ESRI JSON 之间的区别。欣赏!
猜你喜欢
  • 2014-11-25
  • 2021-10-27
  • 2016-05-19
  • 1970-01-01
  • 2021-05-03
  • 2018-12-04
  • 2021-06-16
  • 1970-01-01
相关资源
最近更新 更多