Tüm Dünya'yı bir Çokgen olarak nasıl temsil edebilirim?


11

Bu bir Çokgenin iç kısmının belirlenmesi ile ilgilidir .

Benim zorluğum, Doğu'dan Batı'ya giden Dünya'yı kapsayan bir Çokgen belirtirseniz, azimut projeksiyonlarında ortaya çıkacak olan antemeridian boyunca hala bir sınırın olacağıdır. Örneğin, GeoJSON'da:

{
  "type": "Polygon",
  "coordinates": [
    [[-180, -90], [-180, 90], [180, 90], [180, -90], [-180, -90]]
  ]
}

Sınırsız, tüm alanlı bir Çokgen belirtmenin standart bir yolu var mı?

Boş bir dış halka kullanmayı düşündüm:

{
  "type": "Polygon",
  "coordinates": [
    []
  ]
}

Mantık, tüm halkaları Poligonun içine delinecek delikler olarak daha fazla halka belirleyebilmemdi.

Ne yazık ki, GeoJSON, LinearRings'in en az 4 noktaya sahip olması gerektiğini şart koşar, bu nedenle bu şartnameden uzaklaşacaktır. Ancak, hala bu yaklaşımın başka herhangi bir yere götürülüp alınmadığını anlamakla ilgileniyorum.


Kısmen cevap CBS'ye bağlı olmalıdır. Bununla birlikte, en başından beladasınız : Çokgenin sınırı yoksa , o zaman - linestring'de mevcut olmayan ek bilgileri belirtmeden - yazılımın tüm küreyi boş kümeden ayırt etmesinin bir yolu yoktur. (Birçok GIS, bunları uygulamıyor veya yanlış uygulamasa bile, boş çokgenler önemli kullanımlara sahiptir.)
whuber

1
Teşekkürler. Boş bir LineString en sezgisel olarak boş kümeyi temsil edeceğinden, bu durumla başa çıkmak için kendi nesne türümüz "Sphere" i tanımlamaya karar verdik. Bu soruya gerçekten verebileceğiniz en iyi "cevap" olduğunu düşünüyorum.
Jason Davies

1
Bence çözümünüzü çok az maliyetle ve bir avantajla genelleştirebilirsiniz. Boş seti küreden ayırmak için bir bit ayırdığınız için, neden bu biti her poligonla yönünü belirtmek için kullanmıyorsunuz? Dejenere olmayan çokgenler için, çokgenin içinin sınırını aşarken sağa veya sola mı düşünüleceğini belirtir. Dejenere çokgenler için, sınırın çokgene veya tamamlayıcıya uygun olup olmadığını gösterir. Şimdi her zaman içinin nerede olduğunu biliyorsun.
whuber

İyi bir fikir! Genel olarak standart GeoJSON'u girdi olarak kabul etmek istiyoruz. Sphere nesnesi biraz özel bir durumdur, bu yüzden kendi türümüzü tanımlamak sakıncası yoktur, çünkü neredeyse kullanılamaz. Çokgenler için, bir sipariş sözleşmesi (ESRI spesifikasyonu ile tutarlı olmak için sağ taraf kuralı) kabul etmeye karar verdik
Jason Davies

Yanıtlar:


2

Tüm Dünya'yı kapsayan bir sınır olmaksızın çokgenin bu nadir görülen bir durumunu temsil etmenin standart bir yolu olmadığı {type: "Sphere"}için, amaçlarımız için oldukça iyi çalışan kendimizi eklemeye karar verdik .

Boş bir LinearRing içeren bir Çokgen kullanmamaya karar verdik, çünkü bu daha sezgisel olarak boş bir çokgeni temsil eder ve kolayca tüm Dünya çokgenlerinin karışıklığına ve yanlışlıkla oluşturulmasına neden olabilir.

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.