2011-04-20 28 views
6

'un karşısında işlem görüyor. PostGIS ile GeoDjango kullanıyorum ve içine düşen bir veritabanından kayıt almak için çokgen kullanıyorum.PostGIS'de dünyanın yarısından daha büyük bir poligon,

Yeryüzünün yarısından daha büyük bir çokgen tanımladığımda, poligonumun 'içi', 'dış' olarak tasarladığım daha küçük alan olduğunu varsayar ve yalnızca bunun dışındaki sonuçları döndürür.

Sonuçları hariç tutmak için bu küçük, yanlış alanı kullanabilirim. Polygon.area, neyi amaçladığımı biliyor, bu yüzden, aramamın ne zaman kapsamlı veya özel olduğunu ne zaman yapacağımı belirlemek için kullanabilirim. Bu problemin muhtemelen yaygın olduğunu düşünüyorum, çözmek için daha iyi bir yol var mı?

Güncelleme: Poligonumun içinde 180 derece boylam varsa, bu hiç çalışmıyor. GEOS bu kez suçlanıyor gibi görünüyor. Bu resim, neden olduğuna inandığımı gösterir. Yeşil, tanımladığım çokgen, Kırmızı bunun nasıl yorumlandığı görünüyor. Polygons on earth Yine bu, sık sık ortaya çıkacak ve GEOS gibi kütüphanelerin ele alınması gereken bir problem gibi görünüyor. Bir yolu var mı?

cevap

5

Pekala, cevap yok. İşte yaptığım şey.

GEOS 180 meridyeni geçen şeyleri sevmez Çünkü: poligon 180 meridyeni geçip geçmediğinden
İlk çek - yani, o hat boyunca 2 çokgen içine uymazsanız. PostGIS bir çokgen varsayılmıştır için

öyleyse, yarım dünyada birden kapak daha yapamaz mümkün olduğunca küçük: poligon veya bölünmüş çokgen her dünyanın yarısını veya daha fazla kapakları
Kontrol eğer - Eğer öyleyse , onları yarıya bölün.

Sonuçlardan bir MultiPolygon oluşturun.

+0

Merhaba, aynı orijinal sorunu yaşıyorum. Bir poligonu iki tarafa ayırmanın iyi bir yolu nedir? Ben ST_Intersects'i deniyorum ama diğer argüman için hangi şeklin kullanılacağını bilmiyorum. – Edmund

+0

Merhaba @Edmund, çokgenlerim her zaman 'dikdörtgen', sol üst ve sağ alt koordinatlarla tanımlandı. İki yarının boyutunu hesaplamak kolaydı. Üzgünüz, durumunuza yardımcı olamam. – Jake

+0

Teşekkürler Jake, sanırım işe yaramış gibi görünen bir şey anladım. Benimki de bazen dikdörtgendir ve bence kenarların büyük daireler üzerinde olması (coğrafya tipi için), iki çizgi arasındaki orta noktayı bulmak söz konusu olduğunda, bazı şeyleri açıktan biraz daha az yapar - bu yüzden onu çokgen bir örtü ile kesiyorum. batı ya da doğu yarıküresi. – Edmund

İlgili konular