Định hướng vòng đa giác ESRI JSON?


9

Tôi đang gặp khó khăn khi tìm bất kỳ tài liệu chi tiết nào xác định thông số JSON của ESRI. Tôi hy vọng ai đó có thể làm sáng tỏ hai câu hỏi sau đây.

  1. Tương tự như thông số GeoJSON, mảng đầu tiên trong bộ sưu tập ' path ' luôn là một vòng ngoài và tất cả các mảng tiếp theo trong bộ sưu tập này là các vòng bên trong (lỗ)?

  2. Trên đây là sự thật, làm thế nào thông số kỹ thuật JSON của ESRI xử lý đa đa giác?

Câu trả lời:


13

Đây là một liên kết đến tài liệu của Esri trên các đối tượng hình học JSON . Từ trang đó:

API REST hỗ trợ 4 loại hình học - điểm, đa giác, đa giác và phong bì.

Âm thanh như đa giác không được hỗ trợ. Xem bên dưới. Bạn có thể tạo đa giác bằng cách thêm các vòng bổ sung. Không có gì rõ ràng về vòng bên ngoài v. Tôi tò mò vì vậy tôi sẽ xem xét thêm về vấn đề này ... sẽ chỉnh sửa bài đăng này nếu tôi tìm thấy bất cứ điều gì khác.

Chỉnh sửa: Tôi đã xem xét điều này một chút nữa. Có vẻ như nếu bạn thêm các vòng rơi vào vòng hiện có, các vòng bên trong là các lỗ. Nếu bạn thêm một vòng không nằm trong vòng khác, nó sẽ được thêm dưới dạng đa giác bổ sung, về cơ bản là đa giác. Đây là một trang đơn giản cho thấy điều này:

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

Nếu bạn tải trang đó, vòng đầu tiên là hình vuông có hai lỗ. Hai lỗ là vòng hai và ba. Vòng thứ tư trong đa giác tây nhất. Đây có thể trông giống như hai đồ họa nhưng thực ra nó chỉ là một.


Câu trả lời tuyệt vời nhất, cảm ơn. Bây giờ đối với công việc khó khăn, vì không có phương thức tích hợp, tôi đoán tôi sẽ phải viết một hàm kiểm tra hướng của mỗi vòng.
dùng890

Vui mừng được giúp đỡ. Không cần phải phát minh lại bánh xe, esri cung cấp hàm "isClockwise ()" trong không gian tên hình học: help.arcgis.com/en/webapi/javascript/arcgis/help/ trộm
Derek Swingley

Câu trả lời tốt. Chỉ cần chắc chắn rằng các vòng hoặc lỗ bên trong là ngược chiều kim đồng hồ.
capie69

2

Định dạng esri json theo sát với hình dạng esri.

Các đa giác esri bao gồm các vòng. Chúng có thể đại diện cho cả hai thực thể Đa giác và Đa giác từ OGC.

Các đa giác hình học đơn giản sẽ không có giao điểm tự và sẽ có các vòng bên ngoài theo chiều kim đồng hồ và các vòng bên trong (lỗ) ngược chiều kim đồng hồ. Nếu bạn đang đọc từ các dịch vụ của Esri, đó là những gì bạn thường nhận được.

Các đa giác không đơn giản (những đa giác có các vòng được định hướng khác nhau hoặc có các giao điểm tự) nên được giải thích bằng cách sử dụng quy tắc điền chẵn lẻ thông thường khi vẽ hoặc tạo một điểm trong kiểm tra đa giác .

Khi chuyển đổi từ Đa giác OGC sang đa giác Esri, chỉ cần đảm bảo các vòng bên ngoài được định hướng theo chiều kim đồng hồ và các lỗ được đặt ngược chiều kim đồng hồ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.