ESRI JSON Çokgen Halka Yönü?


10

ESRI'nin JSON özelliklerini tanımlayan herhangi bir ayrıntılı belge bulmakta zorlanıyorum. Birisinin aşağıdaki iki soruya ışık tutacağını umuyorum.

  1. GeoJSON spesifikasyonuna benzer şekilde, ' paths ' koleksiyonundaki ilk dizi her zaman bir dış halkadır ve bu koleksiyondaki sonraki tüm diziler iç halkalardır (delikler)?

  2. Yukarıdaki doğrudur, ESRI JSON spec çokgenlerle nasıl başa çıkar?

Yanıtlar:


13

İşte Esri'nin JSON geometri nesneleri hakkındaki dokümanı . Bu sayfadan:

REST API, 4 geometri türünü destekler - noktalar, çoklu çizgiler, çokgenler ve zarflar.

Çokgenler gibi sesler desteklenmez. Aşağıya bakınız. Ek halkalar ekleyerek çokgenler oluşturabilirsiniz. İç ve dış halkalar hakkında açık bir şey yoktur. Merak ediyorum, bu konuya daha yakından bakacağım ... başka bir şey bulursam bu yayını düzenleyeceğim.

Düzenleme: Bu biraz daha baktı. Mevcut bir halkanın içine düşen halkalar eklerseniz, iç halkalar delikler gibi görünür. Başka bir halkanın içinde olmayan bir halka eklerseniz, temel olarak çoklu poligon olan ek bir çokgen olarak eklenir. İşte bunu gösteren basit bir sayfa:

<!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>

Bu sayfayı yüklerseniz, ilk halka iki delikli karedir. İki delik iki ve üç halkadır. Batıdaki en çokgendeki dördüncü halka. Bu iki grafik gibi görünebilir ama aslında sadece bir tane.


En mükemmel cevap, teşekkürler. Şimdi zor iş için, yerleşik bir yöntem olmadığından, sanırım her halkanın yönünü test eden bir işlev yazmak zorunda kalacağım.
user890

Yardımcı olduğuma sevindim. Tekerleği yeniden icat etmeye gerek yok, esri geometri ad alanında bir "isClockwise ()" işlevi sunuyor: help.arcgis.com/en/webapi/javascript/arcgis/help/…
Derek Swingley

İyi cevap. İç halkaların veya deliklerin saat yönünün tersine olduğundan emin olun.
capie69

3

Esri json formatı esri şeklini yakından takip eder.

Esri çokgenleri halkalardan oluşur. OGC'den hem Multipolygon hem de Polygon varlıklarını temsil edebilirler.

Geometrik olarak basit çokgenlerin kendiliğinden kesişme yerleri olmayacak ve saat yönünde dış halkalara ve saat yönünün tersine iç halkalara (delikler) sahip olacaktır. Eğer Esri hizmetlerinden okuyorsanız, genellikle bunu alırsınız.

Basit olmayan çokgenler (farklı yönelimli halkaları olan veya kendi kesişme noktaları olan) çokgen testinde bir nokta çizerken veya bir nokta çizerken normal çift ​​tek dolgu kuralı kullanılarak yorumlanmalıdır .

OGC Multipolygon'dan Esri poligonuna dönüştürürken, dış halkaların saat yönünde ve deliklerin saat yönünün tersinde olduğundan emin olun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.