Bu özellikler antimeridyeni (± 180 ° boylam) kapsadığında ve GeoJSON olarak müşterinin web uygulamalarına gönderilmeli ve bunlardan alınması gerektiğinde coğrafi özellikleri (çizgiler, çokgenler ve çok parçalı eşdeğerleri) depolamak için en iyi uygulama hangisidir?
Tarihi ve tahmini tropik siklon izleri ve rüzgar yarıçapı ile çalışmak için Postgres / PostGIS veritabanından destek alarak sunucu tarafında bir web API'sinde çalışmaya başlıyorum. Pasifik Okyanusu'ndaki birçok siklon antimerideri geçme şanssızlığına meyillidir, bazen yaşamları boyunca defalarca:
Antimeridyen yakınında yaşayan bir Yeni Zelandalı olarak, bu sorunla bazı başa çıkma stratejilerine sahip olmak için bölgesel verilerde yeterince sık rastladım, ancak gerçekten en iyi uygulama olarak kabul edilen şeyin ne olduğunu bulmak istiyorum. Ne yazık ki antimeridyen etiketli bir soru yok , bu nedenle ilgili soruları aramak zor. Bu problemle mücadele ederken gördüğüm soruların hepsi uygulamaya özel tavsiyelerde bulunmak istiyor gibi görünüyor. Bu soru , sınır tanımayan dünya çapında bir GeoJSON poligonunun durumundaki antimeridyeni kısaca tartışıyor. Bu soru sorduğum şeye oldukça yakın.
Tarihsel ve öngörülen siklonları mekansal bir veritabanında saklamam gerekiyor, ancak antimeridyen ile ilgili sorunlar olacağını tahmin ediyorum. Örneğin, enlem / boylamla başlayan (0,179)
ve biten bir çizgi (0,-179)
, yönüne göre belirsizdir: antimeridyen boyunca kısa bir yoldan geçip geçmediği veya tüm gezegenin etrafına "sarılmış" olup olmadığı. Böyle bir yol mekansal bir veritabanında nasıl saklanmalıdır (özellikle PostGIS ile çalışıyorum ancak çözümün yeterince genel olduğunu umuyorum)? Sahip olduğum bazı fikirler:
- Geometri özelliklerinde hiçbir değişiklik yapmayın ve belirsizliği müşteri uygulamalarına kaydırın.
- Antimerideri geçen, antimerideri kopartan çok parçalı bir geometriye dönüştüren tüm özellikleri bölün . ( GeoJSON spesifikasyonu, adlandırılmış CRS'leri destekler .)
- Süreksizliği olmayan farklı siklon havzaları veya okyanus bölgeleri için küresel olmayan projeksiyonlarla çalışın
- Bir siklonun tüm gezegenin etrafında hareket ettiği gözlemlenmemiş olduğu gerçeğinden yararlanarak, enlem aralığında başlayan
(90,-90)
360 ° 'lik bir faz ile dengelenen enlem aralığında başlayan siklonların koordinatlarını saklayın (diğerlerini -180-180 °' de saklayın) - Bir siklonun Afrika'nın güney ucunun son derece düşük bir ihtimal olduğu gerçeğinden yararlanarak , 30 ° boyunda bir mola kullanın (yukarıdaki haritadaki gibi).
- Antimeridyeni geçen tüm özellikler için koordinatların geçerli EPSG 4326 aralığının ötesine geçmesine izin verin , örn.>> 180 ° ve <-180 °.
- Delta kodlaması , TopoJSON'daki gibi (örneğin başlangıç
(0,-179)
ve sonraki koordinat-3
enlem batıdır ). PostGIS’te veri depolarken bunun nasıl uygulanacağına veya uygulanacağına dair hiçbir fikrim yok, ancak bu, istemci uygulamalarına veri göndermek için mükemmel bir çözüm. - Bazı vektör notasyonları veya kutupsal koordinatlar. (Oldukça zor ve sıradışı görünüyor.)
Bunlardan 2-5 arası fikirlerden hoşlanmıyorum, çünkü bunlar genel değiller ama kendi uygulamalarım için bir şeyler ifade ettikleri için onları sevdim. Sadece Pasifik Okyanusu'ndaki verilerle ilgilenen uygulamalar için çok mantıklı olabilirler, bu yüzden onları tamamen seçenek olarak değerlendirmek istemiyorum.
6 ve 7 numaralı fikirler Tom MacWright'ın okumaya değer ancak antimeridyenle ilgili olarak kesin olmayan bir blogundan kalktı.
Fikir 4, sırasıyla 360 ° antimoneri ofset kullanan GeographicaGS 'GeodesicLinesToGISPython
tarafından kullanılır fiona.transform.transform_geom
. Buna karşılık, Fiona OGR kullanıyor -wrapdateline
. Sanırım bu çok sağlam bir emsal ve aslında oldukça genel.
Depolama konusu ile bağlantılı olarak, bu özelliklerin müşteri uygulamalarına nasıl gönderilmesi gerektiğini ve uygulamamın kendisine geri gönderilen verileri nasıl dikkate alması gerektiğini düşünmem gerekiyor (örneğin Pasifik'teki bir siklonun tahmin izini değiştiren bir insan tahmincisi). Değişim formatı muhtemelen GeoJSON olacaktır, fakat böyle olmak zorunda değil.
Ne yazık ki GeoJSON spesifikasyonu antimeridyen konularında açık değildir. Bu Wikipedia'dan :
Birçok coğrafi yazılım kütüphanesi veya veri formatı dünyayı bir dikdörtgene yansıtır; Çok sık bu dikdörtgen tam 180. meridyen ayrılır. Bu genellikle 180'inci meridyen üzerinden basit işler (bir alanı veya bir çizgiyi temsil etmek gibi) yapmayı imkansız hale getirir. Bazı örnekler:
GeoJSON spesifikasyonu, 180'inci meridyenin spesifikasyonunda ele alınmasından bahsetmemektedir, çünkü 180'inci meridyeni geçen çizgilerin temsili, dünyanın dört bir yanından olduğu gibi yorumlanabilir.
OpenStreetMap'te alanlar (Rusya'nın sınırı gibi) 180'inci meridyende bölünmüştür.
Benim okumam GeoJSON'un antimeridyen-yayılma özelliklerini gösteren özel bir standart gösterimi olmadığı ve kasıtlı olarak belirsiz bırakıldığı (çok parçalı geometriler sorunu çözecektir). OpenStreetMap'te de benzer şekilde antimeridyende geometri bölümleri vardır, ancak böylesi bölünmüş özelliklerin çok parçalı mı yoksa gerçekte ayrı kayıtlar mı olduğunu bilmiyorum.
Bu, özellikle sınırlayıcı kutu veya bu çizgiyi kapsayan diğer uzamsal istekler oluşturma perspektifinden, aynı zamanda girdiyi ve özellik geometrileri ile ilgili tüm güncellemeleri ayrıştırma ve temizlemenin perspektifinden oldukça problemlidir. Bu yüzden uymak istediğim en iyi uygulamayı belirlemeye çalışıyorum.