ESRI JSON多边形环方向?


10

我很难找到定义ESRI JSON规范的任何详细文档。我希望有人可以阐明以下两个问题。

  1. 与GeoJSON规范类似,“ paths ”集合中的第一个数组始终是外环,而此集合中的所有后续数组都是内环(孔)?

  2. 以上是正确的,ESRI JSON规范如何处理多面?

Answers:


13

这是Esri关于JSON几何对象的文档的链接。从该页面:

REST API支持4种几何类型-点,折线,多边形和信封。

不支持听起来像多面体的声音。见下文。您可以通过添加其他环来创建多面。关于内环与外环没有明确的规定。我很好奇,因此我将进一步研究...如果发现其他任何内容,将对其进行编辑。

编辑:我调查了这一点。看起来,如果添加的环落在现有环的内部,则内部环为孔。如果添加的环不在另一个环内,则将其添加为附加多边形,该多边形基本上是多面。这是一个显示以下内容的简单页面:

<!DOCTYPE html> 
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Polygons!</title>
    <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.1/js/dojo/dijit/themes/claro/claro.css">
    <style>
      html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
      #map{
        padding:0;
      }
    </style>
    <script type="text/javascript">var djConfig = {parseOnLoad: true};</script>
    <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.1"></script>
    <script type="text/javascript">
      dojo.require("dijit.layout.BorderContainer");
      dojo.require("dijit.layout.ContentPane");
      dojo.require("esri.map");
      var map;
      function init() {
        var initExtent = new esri.geometry.Extent({"xmin":-12959519,"ymin":3696971,"xmax":-9444639,"ymax":5453188,"spatialReference":{"wkid":102100}});
        map = new esri.Map("map",{extent:initExtent});
        var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer");
        map.addLayer(basemap);
        var resizeTimer;
        dojo.connect(map, 'onLoad', function(theMap) {
          dojo.connect(dijit.byId('map'), 'resize', function() {  //resize the map if the div is resized
            clearTimeout(resizeTimer);
            resizeTimer = setTimeout( function() {
              map.resize();
              map.reposition();
            }, 500);
          });
          var poly = new esri.geometry.Polygon({"rings":
            [
              [[-11214840,4858704],[-10520181,4853812],[-10510397,4149368],[-11219732,4144476],[-11214840,4858704]], // ring #1, poly with two holes
              [[-11097433,4770648],[-10916430,4770648],[-10916430,4609213],[-10984918,4560294],[-11097433,4614105],[-11097433,4770648]], // ring #2, a hole
              [[-10779455,4472238],[-10622912,4349939],[-10750103,4242315],[-10833267,4296127],[-10779455,4472238]],  // ring #3, another hole
              [[-11298004,4614105],[-11293112,4310803],[-11571954,4305911],[-11542602,4584753],[-11298004,4614105]] // ring #4, western polygon
            ],
            "spatialReference":{"wkid":102100}
          });
          var sym = new esri.symbol.SimpleFillSymbol({"color":[255,255,0,64],"outline":{"color":[255,0,0,255],"width":1.5,"type":"esriSLS","style":"esriSLSDashDot"},"type":"esriSFS","style":"esriSFSSolid"});
          var graphic = new esri.Graphic(poly, sym);
          map.graphics.add(graphic);
        });
      }
      dojo.addOnLoad(init);
    </script>
  </head>
  <body class="claro">
    <div dojotype="dijit.layout.BorderContainer" design="headline" gutters="false"
    style="width: 100%; height: 100%; margin: 0;">
      <div id="map" dojotype="dijit.layout.ContentPane" region="center" style="overflow:hidden;">
      </div>
    </div>
  </body>
</html>

如果加载该页面,则第一个环是带有两个孔的正方形。这两个孔是第二和第三环。最西部多边形中的第四环。这看起来可能像两个图形,但实际上只是一个。


最出色的答案,谢谢。现在,为了进行艰苦的工作,由于没有内置方法,我想我将不得不编写一个测试每个环的方向的函数。
user890 2010年

乐意效劳。:不需要重新发明轮子虽然ESRI提供了一个“isClockwise()”中的几何空间中的函数 help.arcgis.com/en/webapi/javascript/arcgis/help/...
德里克Swingley

好答案。只需确保内部环或孔逆时针旋转即可。
capie69

3

esri json格式紧随esri形状的格式。

esri多边形由环组成。它们可以表示来自OGC的Multipolygon和Polygon实体。

几何上简单的多边形将没有自相交,并且将具有顺时针方向的外环和逆时针方向的内环(孔)。如果您正在阅读Esri服务,那通常会得到。

在多边形测试中绘制或建立时,应使用规则的奇偶填充规则来解释非简单多边形(那些环的方向不同或具有自相交的多边形)

从OGC Multipolygon转换为Esri多边形时,只需确保外环沿顺时针方向定向,并且孔沿逆时针方向定向。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.