Çokgen köşelerinin genel CBS türü: saat yönünde veya saat yönünün tersine


23

İki gün önce, ESRI şekil dosyalarında çokgenin köşeleri için iç depolama sırası hakkında bir soru sordum. Bu soru cevaplandı ( Çokgenler saat biçiminde mi yoksa saat yönünün tersinde bir şekil dosyasında mı saklanıyor? ) Ve eski bir gönderide de yanıtlandı ( Çokgen oluşturma (Saat yönünde dönüş veya değil) )

Ama şimdi benim sorum daha genel ve benzersiz bir cevabı var mı bilmiyorum. Saat yönünde sadece ESRI şekil dosyaları için mi yoksa genel GIS formatlarında mı? Peki ya bir CBS yazılımı için dahili temsil? Örneğin, QGIS kullanırsam ve * .shp içeren çokgenler okursam, dış sınırın iç gösteriminin orijinal şekil dosyasındaki gibi saat yönünde olduğunu varsayalım, peki ya QGIS tarafından desteklenen tüm dosya formatları için? Ve ArcGIS için? Ve eğer bu dosyalar QGIS, ArcGIS, vb. İçine yüklenirse, saat yönünün tersine depolanan çokgenli bir dosya formatı varsa, yönler dahili olarak değiştirilir, bu nedenle PyQGIS kullanarak verileri okursam, örneğin, çokgenler saat yönündedir. sipariş?

Amacım QGIS için bir eklenti yazmak, ancak veri kaynağı ESRI şekil dosyaları veya diğer biçimler olabilir. Poligonların ardışık yanları arasındaki açıları azimutlarını kullanarak kontrol etmem gerektiğinden, sıranın saat yönünde olup olmadığını bilmem gerekiyor. Bir çözüm, her çokgenin alanını hesaplamakta ve doğru hatırlıyorsam, eğer pozitifse sipariş saat yönünde ve negatifse sipariş saat yönünün tersinedir.

Alan hesaplaması yoğun bir iş değildir, bu yüzden eklentimi o kadar yavaşlatmaz. Ancak QGIS'in özel durumunda, orijinal kaynağın sırasına bakmaksızın çokgenleri saat yönünde veya saat yönünün tersine saklayıp saklamadığını bilen var mı? Artık ESRI şekil dosyaları ile çalışıyorum ve layer.getFeatures (). Geometry (). AsPolygon () içindeki koordinatlar dış kenarlık için saat yönünde ve delikler için saat yönünün tersinde, örneğin orijinal * .shp içinde saklanır.


Verilerin nasıl depolandığına bağlıdır. Oracle yönünün tersine olan gis.stackexchange.com/questions/20817/...
Mapperz

@Harperz, bağlantınız docs.oracle.com/cd/B10501_01/appdev.920/a96630/… ' ya yönlendirir ve Polygons are oriented correctly. (Exterior ring boundaries must be oriented counterclockwise, and interior ring boundaries must be oriented clockwise.)bu da Oracle'ın saatin tersi yönünde olduğu anlamına gelir.
user30184

Yanıtlar:


27

[Buradan] indirilebilecek OGC spesifikasyonunda ( http://www.opengeospatial.org/standards/sfs ) şunları belirtir :

"Poligon dönüşü bu standart tarafından tanımlanmamıştır; gerçek poligon dönüşü saat yönünde veya saat yönünün tersinde olabilir."

In Oracle docs , açıkça dış halka sınırları, saat yönünde yönünün odaklı ve iç halka sınırları olduğu ifade edilmektedir. Benzer şekilde, SQL Server Spatial'da, coğrafya veri türü, dış halka için saat yönünün tersine bir kural izler ve iç halkalar için saat yönünde - aynı ayrıntı için bu MicroSoft bloguna bakın. Postgis, geometriler için her iki şekilde de izin veriyor gibi görünüyor ve bir poligonun geometrisini sağ veya sol el kurallarını izlemeye zorlayacak fonksiyonlara sahip görünüyor, bkz. ST_ForceRHR ve ForceLHR . JTS / Geos sağ kuralı takip etmişe benziyor, yani dış halkanın saat yönünde bir yönelimi var, bu yüzden hepsi biraz belirsiz.

Genel olarak bir coğrafya veri tipinin oryantasyonu zorlaması mantıklıdır, aksi halde küçük bir çokgenin bunun böyle mi yoksa tüm dünya poligonunun iç halkası mı olduğunu söylemek mümkün olmaz. Düzlemsel bir yüzey üzerinde bir geometri veri tipiyle, bu kafa karışıklığı, dış halka ve iç halka sırayla takip ettikçe ortaya çıkmaz ve yalnızca tek bir halka varsa, dünyadakilerin aksine (çevrelemeye bakılmaksızın) çevrelenir. , yuvarlak sarar.


@Mxfh tarafından yapılan bir yorumdan: OGC'nin OpenGIS Basit Özellikler Erişimi (ISO 19125-1), dış halkalar için sürüm 1.2.1 belgesindeki [OGC 06-103r4] 6.1.11.1/sayfa 26'daki opengeospatial.org adresinden saat yönünün tersine bir yön belirler. / standartlar / SFA. Değişiklik, en son 2006 yılında 1.1.0 ve 1.2.0 arasında tanıtıldı. Alıntı yaptığınız dipnot, 2005’ten bu yana güncellenmedi


Güzel cevap John. İç ve dış halkaları tanımlamak için bir düğüm sırası kullanmanın, bir vektör veri formatının bunu başarabilmesinin tek yolu olduğundan emin değilim. Bazı mekanizmaların devreye girmesi gerektiğine rağmen sizinle aynı fikirdeyim. Örneğin GeoJSON ile, ilk düğüm listesi dış olarak belirlenir ve sonraki tüm listeler iç deliklerdir. Bu (daha fazla değilse) etkili olarak çalışır.
WhiteboxDev

Evet, bu geometriler için de WKT için geçerlidir. Coğrafyalar için açıkça daha önemli.
John Powell,

Bu çok doğru;)
WhiteboxDev 21:14

@ Beyaz Kutu Yuvalanmış halkaların sarım sırasının alternatif olmasının nedeni, ayakkabı bağı yöntemi ile alanı hesaplamanın, halka yönüne bağlı olarak işaretli alanları hesaplamasıdır. Genel olarak, birinci dereceden iç içe geçmiş halkalar delik olarak kabul edilir ve dış halkanın alternatif yönüne sahiptir. Katkıda bulunan alan değerleri negatiftir. Dış halkanın pozitif olduğu yerlerde; iç içe geçmiş bile halkalar. Bu nedenle, tüm çalma özelliklerinin toplam alanı, tüm imzalanan alanların toplamıdır.
mxfh

1
@mxfh: kesinlikle, "iç içe halkaların sarma sıraları" OCG (ve diğer birçok) Çokgenler için çok fazla… izin verilmediği için çok fazla. Bir başkasının "deliği" içinde iç içe bir poligonu temsil etmenin yolu, bir MultiPolygon kullanmaktır ... bu durumda, her bir kurucu Poligon orijinal sarma kurallarını takip eder. Tamam, tamam: bu "iç içe LinearRings" sargısını değiştirmekle eşdeğerdir ... ama sadece Poligonun değil - buna izin veren - bunun yerine MultiPolygon'un tanımını işaret eder.
Dan H

23

Sınırlı bir yüzeyi kapsayan coğrafi koordinat sistemlerinin belirsizliklerini önlemek için halka (sınır) yönlerine ihtiyaç duyulur, çünkü sınır bir sınır boyunca bir alanı sol ve sağı olmak üzere iki alan tanımlayacaktır. Bu iki alandan hangisinin daha büyük olduğuna karar vermek mümkündür, ancak yine de belirsizliği bırakmaktadır.

Poligonların dış halka yönlerine çeşitli biçimlerde özelliklerine göre genel bir bakış:

Shapefiles ve basit özelliklerin sarma sırasını gösteren örnek resim

  • WKT / GML / KML ve çeşitli SQL uygulamalarında da kullanılan Basit Özellik Erişimi (ISO 19125-1):

    • dış halkalar: saat yönünün tersine
    • İç bilezikler (delikler): saat yönünde.

    Çokgen, 1 dış sınır ve 0 veya daha fazla iç sınır tarafından tanımlanan düzlemsel bir Yüzeydir. Her iç sınır çokgende bir delik tanımlar. [...]

    Dış sınır LinearRing, dış sınırın saat yönünün tersine bir doğrultuda hareket ettiği göründüğü yüzeyin yanı olan yüzeyin “üstünü” tanımlar . İç LinearRings zıt yöne sahip, ve şu şekilde görünecektir saat yönünde “üst” ... bakıldığında basit özellik Erişim özellikleri

    Çoğu uygulamada, bir POLYGON'daki halkaların sırası önemlidir (şekil dosyalarının aksine).

    Delikli bir çokgen için, ilk alt kısmı dış halkası, ikinci alt kısmı ilk iç halkası, üçüncü alt kısmı ikinci iç halkası vb. Oracle Spatial

    Daha derin yuvalar, diğer bir deyişle adada bir adada bir ada ... ... Çok Halkalı olarak temsil edilmek zorundadır ( bkz. Şekil 2.10 (4) ), çünkü iç halkalardan sadece bir dış sınır ve daha derin yuvalar olabilir. tanımlanmadı.

  • ESRI Shapefiles / SHP :

    • dış halkalar: saat yönünde
    • İç halkalar: saat yönünün tersine

    Bir çokgen bir veya daha fazla halkadan oluşur. Halka, kapalı, kendiliğinden kesişmeyen bir halka oluşturan dört veya daha fazla noktadan oluşan bağlı bir sekanstır. Bir çokgen, birden fazla dış halka içerebilir . Bir halka için köşelerin sırası veya oryantasyon, halkanın hangi tarafının poligonun iç tarafı olduğunu gösterir. Halka boyunca köşe boyunca yürüyen bir gözlemcinin sağındaki mahalle poligonun içindeki mahalledir. Çokgenlerde delik tanımlayan halkaların tepe noktaları saat yönünün tersine yöndedir. Tek halkalı poligon için dikey noktalar her zaman saat yönündedir. [...]

    Points dizisindeki halkaların sırası önemli değildir. ESRI Teknik Belgesi

    Birden fazla dış sınırın izin verildiğinden, bu çokgen tanımıyla adada bir gölde bir adada yapılandırmalar mümkündür. Topolojik olarak gölde bir ada, saat yönünde bir başka dış halka olacaktır. Etkili bir şekilde bu bir ESRI Shapefile Polygon'u Basit Bir Özellik MultiPolygon yapar

    Noktaları doğru sıralamazsanız, üst üste gelen çokgenlere sahip olursunuz. pyshp

  • GeoJSON (RFC7946) :

    NOT: Orijinal GeoJSON 2008 spesifikasyonunda zorunlu bir sarma emri yoktu

    • sarma sırası: dış bilezik saat yönünün tersine (sağ kural)
    • iç halkalar saat yönünde
    • halkaların sırası önemlidir:

      Çok halkalı çokgenler için, ilk önce dış halka olmalı ve diğerlerinde iç halka veya delik olmalıdır. GeoJSON spec

  • TopoJSON : Dış halkaları varsayılan olarak saat yönünde zorlar

Shapefiles ve basit özelliklerin sarma sırasını gösteren örnek resim

Gezi:

Yuvalanmış halkaların sarma sırasının neden alternatif olduğuna dair matematiksel düşünme, alanı ayakkabı bağı formülü ile hesaplamanın ( görsel açıklama ) halka yönüne bağlı olarak işaretli alanları hesaplamasıdır.

Genel olarak iç içe halkalar (iç sınırlar) delik olarak kabul edilir ve dış halkanın alternatif yönüne sahiptir. Katkıda bulunan imzalanan alan değeri negatif. Dış halkaların pozitif olduğu yerlerde. Tüm çalma özelliklerinin toplam alanı, tüm imzalanan alanların toplamıdır.

ESRI tarafından uygulanan şekilde bu Bilgi Bankası girişine bakın: Bir poligonun alanını belirlemek için ArcGIS tarafından hangi algoritma kullanılır?

Önerilen Anımsatıcı

Ok biçimindeki harf formlarının açık uçları:

  • S hapefile: S → ᔑ → ↻
  • Basit F e Atur e s: e → ᘓ → (dışarı doğru cc-bazlı sargı) ↺
  • GeoJSON: G (G'nin gövdesi oktur) → ↺

4

Her vektör dosyası formatı farklı olduğundan ve her bir CBS, bu verileri dahili olarak nasıl kullandıklarına göre farklı olacağından, sorunuza kesin bir cevap verebilecek kimsenin bilmiyorum. Ancak saat yönünde sıralamanın sadece ESRI Shapefiles için olmadığını kesin olarak söyleyebilirim. Dış halkalar için saat yönünde sıralamanın benzer bir tanımını ve iç delik çokgenleri için saat yönünün tersine benzer başka formatlar da vardır. Örneğin, JTS vektör poligon yapısı benzer bir format kullanır. Aslında, burada , tarihsel olarak bunun ESRI yaklaşımına benzer olduğu belirtilmektedir. Kesin olarak hayır diyebilirim, tüm formatlar bu gereksinime sahip değildir. Örneğin, GeoJSON formatı özellikleriKöşelerin sıralanmasında çokgen biçimlerinde böyle bir zorunluluk yoktur. KML şartname aslında devlet:

Çokgenler için saat yönünün tersine sırayla belirtilmesi gerekir. Çokgenler "sağ el kuralını" izler, bu da sağ elinizin parmaklarını koordinatların belirtildiği yöne yerleştirirseniz, başparmağınızın çokgen için normal olan genel geometrik yönü gösterdiğini belirtir.

Dolayısıyla, tüm seçenekler mevcut ve orada uygulanmaktadır. Bu vahşi bir dünya!


1
KML'nin "sağ kural" ın geleneksel olarak "sol el kural" olarak adlandırılan şey olduğunu unutmayın (çevreyi kollarınız uzanmış halde yürüdüğünüzde sol eliniz şeklin içine girer). Esri birden fazla yaklaşıma sahiptir, çünkü shapefiles sağ el kuralını kullanan tek biçimdir (kurumsal coğrafi veritabanları dahili olarak sol el kuralını kullanır, ancak 'C' API her iki sırada da istekte bulunmanıza izin verir). GML, yalnızca iç halkaların dış halkaların tersi sırayla olmasını ve ilk halkanın dış olmasını gerektirir.
Vince

@Vince Bunu bilmiyordum. Bu delilik değil mi? Bana bildirdiğiniz için teşekkürler. Sanırım GML'nin yaklaşımını en çok seviyorum; zıt oldukları sürece sipariş önemli değil. Bu çok mantıklı.
WhiteboxDev
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.