Coğrafi verileri depolamak için gök koordinatlarında hangi koordinat sistemi kullanılmalıdır?


37

Bir astronomi projesi yapıyorum. Mekansal olarak etkinleştirilmiş bir veritabanında saklanan resimlerimiz hakkında bilgi sahibi olmak istiyorum. Bunun, CBS fonksiyonları için çok kolay bir özel durum olması gerektiğini düşünüyorum, çünkü gökyüzü mükemmel küresel olarak ele alınabilir ve dünyanın yüzeyi gibi eliptik bir işlem gerektirmez. Ne yazık ki, bunu yapmanın bir yolunu bulamadım ve eliptik bir toprak kullanan mekansal işlevlere sahip mayınlardan kaçıyorum. (Dereceler yerine sayaçları döndüren hemen hemen tüm işlevler eliptik bir hesaplama kullanıyor olabilir. Neyse ki, ihtiyacım olan PostGIS işlevlerinin çoğunun, belgelerin açıkça döndürülen sonuçların bir küre için olduğunu belirttiği eksik uygulamalara sahip olduğu görülüyor. Elipsoid. Ancak bu endişe kaynağı olacak gelecekteki sürümlerle değişebilir.)

Arkaplan: PostgreSQL'i PostGIS ve WGS 84 koordinatlarıyla kullanıyorum (SRID = 4326). Bu oldukça iyi çalışıyor. Görüntünün dört köşesinin aşağı doğru yükselmesinden ve düşmesinden kapalı bir POLYGON yaratıyorum. Gökyüzünün geniş bir alanını kapsayan çok sayıda resme (10k veya daha fazla) sahibim. Her görüntü yaklaşık 1 derece karedir. Bu görüntüler kümesinden, 15 ila 30 görüntünün küçük alt kümelerinden mozaikler yapıyorum. Her mozaik yaklaşık 1.5 derece karedir.

Halen, mozaiklerin coğrafyasını, mozaya giren her görüntüye karşılık gelen tüm POLYGON'lardan oluşan bir MULTIPOLYGON olarak saklıyorum. [Daha iyi bir çözüm , tüm bireysel çokgenlerin birliğinin çevresini tanımlayan tek bir POLYGON oluşturmak olacaktır . Bunun küresel koordinatlarda yapılıp yapılmadığını bilmiyorum (yani bu coğrafya türü). Bu benim için de ilginç bir cevap olurdu.] Tarih çizgisi ve gök kutupları veri setindeki bir görüntüye dahil edilebilir, bu yüzden mümkün olduğu kadar düzlemsel koordinatları yansıtmaktan kaçınıyorum.

PostGIS fonksiyonlarına sahip göksel koordinatlar için hangi koordinat sistemini kullanmalıyım ?

Http://spatialreference.org/ adresine baktım ancak şu ana kadar hiçbir şey bulamadım. Google çok az şey çözdü. Ben güdük oldum. Temel olarak, eğer bir işlev sayaçları mesafe olarak döndürürse, bunun küre üzerindeki büyük bir daire boyunca metre olmasını sağlamak istiyorum.

Daha genel olarak, uzamsal bir veritabanında göksel koordinatları kullanmak için bazı tavsiyeler de takdir edilecektir.

PostGIS'i seçerek mi hata yaptım?

Çok üstün ticari seçenekler var mı?

FOSS seçenekleri?


PostGIS 1.5.2 kullanıyorum. PostGIS 2.0'ı henüz denemedim. ST_CoveredBy işlevinin bir POLYGON ve MULTIPOLYGON türünde bir coğrafya ile çalışıp çalışmadığını merak ediyorum. Herhangi biri 2.0 çalıştırıyorsa, bununla aynı hatayı alırsanız bana söyleyebilir misiniz:

mydb=# select ST_CoveredBy(ST_GeographyFromText('MULTIPOLYGON(( (10.37795 -69.57926,8.9498 -69.54875,9.0178 -69.21643,10.4242 -69.24648,10.37795 -69.57926),(10.42436 -69.24618,9.01774 -69.2162,     9.08363 -68.88389,10.46914 -68.91344,10.42436 -69.24618)))'),ST_GeographyFromText('POLYGON((10.46915 -68.91315,9.08371 -68.88364,9.14755 -68.5513,10.5125 -68.58038,10.46915 -68.91315))'));
ERROR:  geography_covers: only POLYGON and POINT types are currently supported
CONTEXT:  SQL function "st_coveredby" statement 1

PostGIS 2.0'ı denedim. Bu fonksiyon hala sadece noktalar ve çokgenler üzerinde çalışır, daha genel şekiller değildir.


Bu wcs2kml'in yaptığıyla aynı değil mi? Eğer öyleyse, belki bazı kodları kullanımlarınız için uyarlayabilirsiniz. code.google.com/p/wcs2kml
Kirk Kuykendall 9:10

USGS sunumu "PLANETARY GIS 101" ile karşılaştım ve kısaca projeksiyonlarda bir kaç slayt olduğunu gördüm, belki size yardımcı olacaktır.
jonatr

Çokgenler oluşturmak yerine, neden bir gruplandırma kimliğini paylaşan çokgenler oluşturmuyorsunuz?
raphael,

Yanıtlar:


17

Ppsphere'e göz atın, özellikle astronomik verileri kullanmak için tasarlanmıştır.

http://pgsphere.projects.postgresql.org/


Bu çok iyi şeyler. Ne yazık ki, herhangi bir "smultipoly" geometri sınıfını desteklemiyor gibi görünüyor. Yine de bu projedeki büyük destek için teşekkür ederim.
Dr. Person Person II

1
Bu bağlantıyı izlemeye çalıştığımda "Bu sunucuya erişme / erişim izniniz yok."
PolyGeo

12

PostGIS'te göksel konumları depolamak mümkündür - sadece kendi koordinat sisteminizi yaratmanız gerekir!

PostGIS, tüm koordinat sistemi ve projeksiyon bilgilerini spatial_ref_sys, veri tabanı başlatıldığında normal olarak doldurulmuş olan tablodan alır. Ancak, kendi öngörülerinizi eklemenizi durduracak hiçbir şey yoktur - bu gerçekten pratik olarak teşvik edilmektedir .

Neredeyse her GIS / mekansal veritabanı / haritalama ürünüyle ortak olarak, PostGIS projeksiyon ihtiyaçları için Proj4'ü kullanır ve bu nedenle bir Proj4 dizisini spatial_ref_sysmasaya koymanız gerekir . Proj4 şeklinde basit bir küresel SRS geçerli: +proj=longlat +ellps=sphere +no_defs. PostGIS ayrıca projeksiyonun bir WKT versiyonunu gerektirir, ancak bence sadece güzel metin olarak kullanılıyor.

Ayrıca yeni SRS'niz için benzersiz bir SRID ve ayrıca bir "otorite" ile gelmeniz gerekecek, ancak bu istediğiniz herhangi bir şey olabilir.

Bu yüzden içine yeni bir giriş eklemek spatial_ref_sysiçin şu SQL'i uygulayın:

insert into spatial_ref_sys values(40000, 'ME', 1, 
'GEOGCS["Normal Sphere (r=6370997)",DATUM["unknown",SPHEROID["sphere",6370997,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]',
'+proj=longlat +ellps=sphere +no_defs');

40000'ü SRID olarak seçtiğime dikkat edin - bu, gök cisim tablonuzda kullandığınız sayıdır. Kimlik doğrulama "ME" dir, ancak bu adınız, kuruluşunuz veya 256 karaktere kadar olan herhangi bir şey olabilir. Bir sonraki sayı, 1, yalnızca o girişe göre otorite ile ilgili benzersiz tanımlayıcınızdır. Teoride, bu girişi ME: 1 olarak belirtebilirsiniz, ancak tüm PostGIS işlemlerinde, önemli olan benzersiz SRID'dir. GDAL ve Python ile oluşturduğum WKT girişi:

import osgeo.osr as osr
srs = osr.SpatialReference()
srs.ImportFromProj4('+proj=longlat +ellps=sphere +no_defs')
srs.ExportToWkt()

Şimdi uyarılar:

  • Doğru yükseliş, saat açıları yerine derece cinsinden belirtilmelidir.
  • Bir dizi PostGIS işlevi, korunmasız veriler için tasarlanmamıştır, ancak WGS84 long / lat'te karasal verileriniz varsa aynı sorun söz konusudur.
  • Bu haliyle, veriler jeosantriktir. Bununla ilgili herhangi bir gözlemsel çalışma yapmak istiyorsanız, PyEphem benzeri bir şey kullanmanızı öneririm .
  • Bu SRS'de herhangi bir veri oluşturmayı denemedim, bu yüzden YMMV.
  • Şu an bununla oldukça ilgileniyorum, bu yüzden Hipparchos kataloğunu içe aktarırken oynamak zorunda kalabilirim ... :)

2
+1. HYG veritabanının bir versiyonunu yükleyerek , sağ yükselişi 15 ile çarparak ve 180 çıkartarak standart bir GIS "boylamına" dönüştürmek ve istediğiniz herhangi bir mükemmel küresel veriyi kullanarak gökyüzünü haritalamaya iyi bir başlangıç ​​yapabilirsiniz . Sergileme ve haritalama için, gnomonik ve ortografik projeksiyonlar oldukça standart.
whuber

@whuber: ve enlem? Aralık
Magno C

@MagnoC Evet, doğru. Alanlar bağlı olduğum web sitesinde açıklanmıştır: sadece biraz aşağı kaydırın. Kontrol etmek için "küçük" versiyonunu (sadece 31K yıldız) 3B görüntüleme programına bıraktım, kartezyen koordinatlara (ünite göksel bir alanda, mesafeyi görmezden) dönüştürdüm ve bunları çizdim: iyi görünüyor.
whuber

@ whuber: "RA, Dec: Yıldızın 2000.0 dönemi için yıldızın doğru yükselişi ve düşüşü. Sadece 1950.0 koordinatlarını kullanan Gliese Kataloğunda bulunan yıldızlar, bu koordinatları 2000 yılına kadar uyguladı". Lat / Lon hakkında pek net değilim. Öyleyse LON = (RA*15) - 180ve LAT = DEC?
Magno C

@MagnoC Bunu çözmede yardımcı olacak en.wikipedia.org/wiki/Equatorial_coordinate_system buldum .
whuber
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.