ปฐมนิเทศรูปหลายเหลี่ยมแหวน ESRI JSON?


10

ฉันมีปัญหาในการค้นหาเอกสารรายละเอียดที่กำหนดรายละเอียด JSON ของ ESRI ฉันหวังว่าบางคนสามารถอธิบายคำถามสองข้อต่อไปนี้ได้

  1. เช่นเดียวกับข้อมูลจำเพาะของ GeoJSON อาร์เรย์แรกในคอลเลกชัน ' เส้นทาง ' มักเป็นวงแหวนภายนอกและอาร์เรย์ที่ตามมาทั้งหมดในคอลเลกชันนี้เป็นวงแหวนภายใน (รู)?

  2. ข้างต้นเป็นจริงหรือไม่ข้อมูลจำเพาะของ ESRI JSON จัดการกับหลายรูปหลายเหลี่ยมได้อย่างไร

คำตอบ:


13

นี่คือการเชื่อมโยงเพื่อ doc 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

ดีใจที่ได้ช่วยเหลือ ไม่จำเป็นต้องคิดค้นล้อใหม่อีกครั้ง esri นำเสนอฟังก์ชัน "isClockwise ()" ในเนมสเปซเรขาคณิต: help.arcgis.com/th/webapi/javascript/arcgis/help/ ......
Derek

คำตอบที่ดี. เพียงตรวจสอบให้แน่ใจว่าวงแหวนหรือรูภายในทวนเข็มนาฬิกา
capie69

3

รูปแบบ esri json ใกล้เคียงกับรูปร่าง esri

รูปหลายเหลี่ยม esri ประกอบด้วยแหวน สามารถเป็นตัวแทนเอนทิตี Multipolygon และ Polygon จาก OGC

รูปหลายเหลี่ยมที่เรียบง่ายเชิงเรขาคณิตจะไม่มีจุดตัดเองและจะมีวงแหวนด้านนอกตามเข็มนาฬิกาและวงแหวนภายใน (รู) ทวนเข็มนาฬิกา หากคุณกำลังอ่านจากบริการของ Esri นั่นคือสิ่งที่คุณมักจะได้รับ

รูปหลายเหลี่ยมที่ไม่ใช่แบบง่าย (ที่มีวงแหวนที่มุ่งเน้นแตกต่างกันหรือมีจุดตัดด้วยตนเอง) ควรถูกตีความโดยใช้กฎการเติมสม่ำเสมอแม้คี่ปกติเมื่อวาดหรือสร้างจุดในการทดสอบรูปหลายเหลี่ยม

เมื่อทำการแปลงจาก OGC Multipolygon ไปเป็นรูปหลายเหลี่ยม Esri เพียงตรวจสอบให้แน่ใจว่าวงแหวนด้านนอกหันตามเข็มนาฬิกาและรูทวนเข็มนาฬิกา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.