Sistem koordinat apa yang harus digunakan untuk menyimpan data geografi untuk koordinat langit?

37

Saya sedang melakukan proyek astronomi. Saya ingin memiliki informasi tentang gambar kami disimpan dalam database yang diaktifkan secara spasial. Ini, saya pikir, harus menjadi kasus khusus yang sangat mudah untuk fungsi SIG karena langit dapat diperlakukan sebagai bola sempurna, dan tidak memerlukan perawatan elips seperti permukaan bumi. Sayangnya, saya belum menemukan cara untuk melakukan ini dan saya telah menghindari ranjau dengan fungsi spasial yang menggunakan bumi elips. (Cukup banyak fungsi apa pun yang mengembalikan meter bukannya derajat mungkin menggunakan perhitungan elips. Untungnya, banyak fungsi PostGIS yang saya butuhkan tampaknya memiliki implementasi yang tidak lengkap di mana dokumentasi secara eksplisit menyatakan bahwa hasil yang dikembalikan adalah untuk bola dan bukan untuk ellipsoid. Tapi itu mungkin berubah dengan versi yang akan datang, yang menjadi perhatian.)

Latar Belakang: Saat ini saya menggunakan PostgreSQL dengan koordinat PostGIS dan WGS 84 (SRID = 4326). Ini bekerja dengan cukup baik. Saya membuat POLYGON tertutup dari kenaikan yang tepat dan deklinasi keempat sudut gambar. Saya memiliki banyak gambar (10rb atau lebih), yang meliputi area langit yang luas. Setiap gambar sekitar 1 derajat persegi. Dari himpunan gambar-gambar ini, saya membuat mosaik dari subset kecil berisi 15 hingga 30 gambar. Setiap mosaik berukuran sekitar 1,5 derajat persegi.

Saat ini, saya menyimpan geografi mosaik sebagai MULTIPOLYGON yang terdiri dari semua POLYGON yang sesuai dengan setiap gambar yang masuk ke mosaik. [Solusi yang lebih baik adalah dengan membuat POLYGON tunggal yang menggambarkan perimeter penyatuan semua poligon individu. Saya tidak tahu apakah ini dapat dilakukan dalam koordinat bola (yaitu, bahwa tipe geografi). Ini juga akan menjadi jawaban yang menarik bagi saya juga.] Garis tanggal dan kutub langit mungkin dimasukkan dalam gambar dalam dataset sehingga saya menghindari proyeksi ke koordinat planar sejauh mungkin.

Sistem koordinat apa yang harus saya gunakan untuk koordinat surgawi dengan fungsi PostGIS?

Saya telah melihat http://spatialreference.org/ tetapi belum menemukan apa pun sejauh ini. Google sedikit berubah. Saya bingung. Pada dasarnya, saya ingin memastikan bahwa jika suatu fungsi mengembalikan meter sebagai jarak, itu adalah meter di sepanjang lingkaran besar di bola.

Secara lebih umum, beberapa saran untuk menggunakan koordinat langit dalam basis data spasial juga akan dihargai.

Sudahkah saya melakukan kesalahan dengan memilih PostGIS?

Apakah ada pilihan komersial yang jauh lebih unggul?

Pilihan FOSS?


Saya menggunakan PostGIS 1.5.2. Saya belum mencoba PostGIS 2.0. Saya ingin tahu apakah fungsi ST_CoveredBy bekerja dengan POLYGON dan MULTIPOLYGON dari tipe geografi. Jika ada yang menjalankan 2.0, dapatkah Anda memberi tahu saya jika Anda mendapatkan kesalahan yang sama seperti ini:

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

Saya sudah mencoba PostGIS 2.0. Fungsi ini masih hanya bekerja pada titik dan poligon, bukan bentuk yang lebih umum.

Person Person II
sumber
Bukankah ini mirip dengan apa yang dilakukan wcs2kml? Jika demikian, mungkin Anda dapat mengadaptasi beberapa kode untuk penggunaan Anda. code.google.com/p/wcs2kml
Kirk Kuykendall
Saya mengalami presentasi USGS ini, "PLANETARY GIS 101" dan secara singkat melihat ada beberapa slide pada proyeksi, mungkin Ini akan membantu Anda.
Jonatr
Daripada membuat multipoligon, mengapa tidak membuat beberapa poligon yang berbagi id pengelompokan?
raphael

Jawaban:

17

Lihat pgsphere, ini dirancang khusus untuk menangani data astronomi.

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

Paul Ramsey
sumber
Ini barang yang sangat bagus. Sayangnya, sepertinya tidak mendukung kelas geometri "smultipoly". Terima kasih atas dukungan besar pada proyek ini.
Dr. Person Person II
1
Ketika saya mencoba mengikuti tautan ini, saya mendapatkan "Forbidden You tidak memiliki izin untuk mengakses / di server ini."
PolyGeo
12

Dimungkinkan untuk menyimpan posisi selestial di PostGIS - Anda hanya perlu membuat sistem koordinat Anda sendiri!

PostGIS mendapatkan semua sistem koordinat dan informasi proyeksi dari tabel spatial_ref_sysyang biasanya diisi ketika database diinisialisasi. Tapi tidak ada yang menghentikan Anda menambahkan proyeksi Anda sendiri - memang itu didorong secara praktis .

Secara umum dengan hampir setiap GIS / basis data spasial / produk pemetaan di luar sana, PostGIS menggunakan Proj4 untuk kebutuhan proyeksi, dan karenanya Anda perlu memasukkan string Proj4 ke dalam spatial_ref_systabel. Sebuah SRS bola sederhana dalam bentuk PROJ4 adalah: +proj=longlat +ellps=sphere +no_defs. PostGIS juga membutuhkan versi proyeksi WKT, tapi saya pikir itu hanya digunakan sebagai teks cantik.

Anda juga perlu membuat SRID unik untuk SRS baru Anda, serta "otoritas", tetapi ini bisa apa saja yang Anda suka.

Jadi untuk memasukkan entri baru ke dalam spatial_ref_sys, cukup lakukan SQL ini:

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');

Perhatikan bahwa saya telah memilih 40000 sebagai SRID - ini adalah nomor yang Anda gunakan dalam tabel objek langit Anda. Authroity adalah "ME", tetapi ini bisa nama Anda, organisasi, atau apa pun yang benar-benar hingga 256 karakter. Angka berikutnya, 1, hanyalah pengidentifikasi unik Anda untuk entri itu, relatif terhadap otoritas. Secara teori Anda bisa merujuk entri ini sebagai ME: 1, tetapi untuk semua pemrosesan PostGIS, ini adalah SRID unik yang diperhitungkan. Entri WKT yang saya hasilkan dengan GDAL dan Python:

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

Sekarang peringatan:

  • Kenaikan yang benar harus ditentukan dalam derajat daripada sudut jam.
  • Sejumlah fungsi PostGIS tidak dirancang untuk data yang tidak diproyeksikan, tetapi itu adalah masalah yang sama jika Anda memiliki data terestrial di WGS84 panjang / lat.
  • Seperti berdiri, data bersifat geosentris. Jika Anda ingin melakukan pekerjaan pengamatan dengannya, saya sarankan menggunakan sesuatu seperti PyEphem .
  • Saya belum mencoba membuat data apa pun di SRS ini, begitu YMMV.
  • Saya cukup tertarik dengan ini sekarang, jadi saya mungkin harus bermain-main dengan mengimpor katalog Hipparchos ... :)
MerseyViking
sumber
2
+1. Anda bisa mendapatkan awal yang baik dalam memetakan langit dengan memuat versi database HYG , mengalikan kenaikan yang benar dengan 15 dan mengurangi 180 untuk mengkonversi ke GIS "bujur" standar, dan menggunakan setiap datum bola sempurna yang Anda suka. Untuk tampilan dan pemetaan, proyeksi gnomonik dan ortografis cukup standar.
whuber
@whuber: dan garis lintang? Apakah DEC?
Magno C
@ MagnoC Ya, itu benar. Kolom dijelaskan di situs web yang ditautkan: cukup gulirkan sedikit ke bawah. Untuk memeriksanya, saya membuang versi "kecil" (hanya 31K bintang) ke dalam program menonton 3D, dikonversi ke koordinat kartesius (pada bidang selestial unit, mengabaikan jarak), dan merencanakannya: terlihat bagus.
whuber
@whuber: "RA, Des: Kenaikan dan deklinasi kanan bintang, untuk zaman 2000.0. Bintang-bintang yang hanya ada di Katalog Gliese, yang menggunakan koordinat 1950.0, telah memiliki koordinat ini didahului dengan 2000". Saya tidak begitu jelas tentang Lat / Lon. Jadi, LON = (RA*15) - 180dan LAT = DEC?
Magno C
@MagnoC Saya telah menemukan en.wikipedia.org/wiki/Equatorial_coordinate_system untuk membantu dalam menyelesaikan masalah ini.
whuber