ควรใช้ระบบพิกัดใดในการจัดเก็บข้อมูลภูมิศาสตร์สำหรับพิกัดท้องฟ้า


37

ฉันกำลังทำโครงการดาราศาสตร์ ฉันต้องการมีข้อมูลเกี่ยวกับภาพของเราที่จัดเก็บในฐานข้อมูลที่เปิดใช้งานเชิงพื้นที่ ฉันคิดว่านี่น่าจะเป็นกรณีพิเศษที่ง่ายมากสำหรับฟังก์ชั่น GIS เพราะท้องฟ้าสามารถรับการรักษาได้อย่างสมบูรณ์แบบทรงกลมและไม่ต้องการการรักษารูปไข่เหมือนผิวโลก น่าเสียดายที่ฉันยังไม่พบวิธีการทำเช่นนี้และฉันได้หลบเหมืองด้วยฟังก์ชั่นเชิงพื้นที่ที่ใช้โลกรูปไข่ (ค่อนข้างฟังก์ชั่นใด ๆ ที่ส่งกลับเมตรแทนองศาอาจใช้การคำนวณรูปไข่โชคดีที่ฟังก์ชั่น PostGIS จำนวนมากที่ฉันต้องการดูเหมือนจะมีการใช้งานที่ไม่สมบูรณ์ซึ่งเอกสารระบุอย่างชัดเจนว่าผลลัพธ์ที่ส่งคืนเป็นรูปทรงกลม ellipsoid แต่อาจเปลี่ยนแปลงได้ในอนาคตซึ่งเป็นสาเหตุของความกังวล)

ความเป็นมา: ฉันกำลังใช้ PostgreSQL กับพิกัด PostGIS และ WGS 84 (SRID = 4326) งานนี้ค่อนข้างดี ฉันกำลังสร้าง POLYGON ที่ปิดจากทางด้านขวาและการลดลงของมุมทั้งสี่ของภาพ ฉันมีภาพจำนวนมาก (10k หรือมากกว่า) ครอบคลุมพื้นที่ขนาดใหญ่ของท้องฟ้า ภาพแต่ละภาพมีขนาดประมาณ 1 องศา จากชุดของภาพเหล่านี้ฉันกำลังทำโมเสกจากชุดย่อยของ 15 ถึง 30 ภาพ กระเบื้องโมเสคแต่ละอันมีขนาดประมาณ 1.5 องศา

ปัจจุบันฉันกำลังจัดเก็บภูมิศาสตร์ของโมเสสเป็น MULTIPOLYGON ซึ่งประกอบด้วย POLYGONS ทั้งหมดที่สอดคล้องกับภาพแต่ละภาพที่เข้าไปในโมเสก [ทางออกที่ดีกว่าคือการสร้าง POLYGON เพียงอันเดียวที่อธิบายขอบเขตของการรวมกันของรูปหลายเหลี่ยมแต่ละอัน ฉันไม่รู้ว่าสิ่งนี้สามารถทำได้ในรูปทรงกลมพิกัด (กล่าวคือประเภทภูมิศาสตร์) นี่ก็เป็นคำตอบที่น่าสนใจสำหรับฉันเช่นกัน] เส้นวันที่และเสาท้องฟ้าอาจรวมอยู่ในภาพในชุดข้อมูลดังนั้นฉันจึงหลีกเลี่ยงการฉายภาพเพื่อให้ได้พิกัดระนาบเท่าที่จะทำได้

ฉันควรใช้ระบบพิกัดใดสำหรับพิกัดท้องฟ้าที่มีฟังก์ชั่น PostGIS

ฉันดูที่ http://spatialreference.org/ แล้วแต่ยังไม่พบอะไรเลย Google เปิดใช้งานเพียงเล็กน้อย ฉันนิ่งงัน โดยทั่วไปฉันต้องการให้แน่ใจว่าหากฟังก์ชั่นคืนค่าเมตรเป็นระยะทางมันเป็นเมตรตามวงกลมขนาดใหญ่บนทรงกลม

โดยทั่วไปคำแนะนำในการใช้พิกัดท้องฟ้าในฐานข้อมูลเชิงพื้นที่ก็น่าจะได้รับการชื่นชมเช่นกัน

ฉันมีข้อผิดพลาดโดยเลือก PostGIS หรือไม่

มีตัวเลือกทางการค้าที่เหนือกว่าหรือไม่?

ทางเลือก FOSS?


ฉันใช้ PostGIS 1.5.2 ฉันยังไม่ได้ลอง PostGIS 2.0 ฉันอยากรู้ว่าฟังก์ชัน ST_CoveredBy ทำงานกับ POLYGON และ MULTIPOLYGON ของภูมิศาสตร์ประเภทไหน หากใครใช้ 2.0 คุณช่วยบอกฉันได้ไหมว่าคุณได้รับข้อผิดพลาดเช่นนี้:

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 แล้ว ฟังก์ชั่นนี้ยังใช้งานได้เฉพาะกับจุดและรูปหลายเหลี่ยมเท่านั้นไม่ใช่รูปร่างทั่วไป


สิ่งนี้ไม่คล้ายกับสิ่งที่ wcs2kml ทำใช่ไหม ถ้าเป็นเช่นนั้นคุณอาจปรับรหัสบางส่วนสำหรับการใช้งานของคุณ code.google.com/p/wcs2kml
Kirk Kuykendall

ฉันวิ่งเข้าไปในงานนำเสนอ USGS นี้"PLANETARY GIS 101"และเห็นสั้น ๆ ว่ามีสไลด์อยู่สองสามภาพในการฉายภาพบางทีมันอาจช่วยคุณได้
jonatr

แทนที่จะสร้างมัลติโพลีกอนทำไมไม่สร้างโพลิกอนหลายอันที่แชร์รหัสการจัดกลุ่ม
ฟาเอล

คำตอบ:


17

ลองดู pgsphere ซึ่งออกแบบมาโดยเฉพาะสำหรับการจัดการข้อมูลทางดาราศาสตร์

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


นี่คือสิ่งที่ดีมาก น่าเสียดายที่มันดูเหมือนจะไม่สนับสนุนคลาสเรขาคณิต "smultipoly" ใด ๆ ขอบคุณสำหรับความคิดที่ดีในโครงการนี้
Dr. Person Person II ครั้งที่

1
เมื่อฉันพยายามติดตามลิงก์นี้ฉันจะได้รับ "ห้ามคุณไม่ได้รับอนุญาตให้เข้าถึง / บนเซิร์ฟเวอร์นี้"
PolyGeo

12

เป็นไปได้ที่จะเก็บตำแหน่งบนท้องฟ้าใน PostGIS - คุณเพียงแค่ต้องสร้างระบบพิกัดของคุณเอง!

PostGIS ได้รับระบบพิกัดทั้งหมดและข้อมูลเส้นโครงจากตารางspatial_ref_sysซึ่งโดยปกติจะมีประชากรอยู่เมื่อฐานข้อมูลถูกเตรียมใช้งาน แต่ก็ไม่มีอะไรหยุดคุณเพิ่มประมาณการของคุณเอง - แน่นอนมันเป็นจริงได้รับการสนับสนุน

โดยทั่วไปกับเกือบทุก GIS / ฐานข้อมูลเชิงพื้นที่ / ผลิตภัณฑ์การทำแผนที่ PostGIS ใช้ Proj4 สำหรับความต้องการในการฉายภาพและดังนั้นคุณต้องใส่สตริง Proj4 ลงในspatial_ref_sysตาราง SRS แบบทรงกลมเรียบง่ายในรูปแบบ Proj4 +proj=longlat +ellps=sphere +no_defsคือ: PostGIS ยังต้องใช้การฉายในรุ่น WKT แต่ฉันคิดว่ามันใช้แค่ข้อความสวย ๆ

คุณจะต้องมี SRID ที่เป็นเอกลักษณ์สำหรับ SRS ใหม่ของคุณรวมถึง "อำนาจ" ด้วย แต่สิ่งนี้อาจเป็นสิ่งที่คุณต้องการ

ดังนั้นเมื่อต้องการแทรกรายการใหม่ลงไปspatial_ref_sysเพียงแค่ดำเนินการ SQL นี้:

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 - นี่คือหมายเลขที่คุณใช้ในตารางวัตถุท้องฟ้า authroity คือ "ME" แต่อาจเป็นชื่อองค์กรหรืออะไรก็ได้ที่มีความยาวสูงสุด 256 อักขระ หมายเลขถัดไปคือ 1 เป็นเพียงตัวระบุที่ไม่ซ้ำกันของคุณสำหรับรายการนั้นซึ่งสัมพันธ์กับสิทธิ์ ในทางทฤษฎีคุณสามารถอ้างถึงรายการนี้เป็น ME: 1 แต่สำหรับการประมวลผล PostGIS ทั้งหมด SRID ที่เป็นเอกลักษณ์ของมันจะนับ รายการ WKT ที่ฉันสร้างด้วย GDAL และ Python:

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

ตอนนี้ caveats:

  • การขึ้นสวรรค์ที่ถูกต้องจะต้องระบุเป็นองศาแทนที่จะเป็นมุมชั่วโมง
  • จำนวนฟังก์ชั่น PostGIS ไม่ได้ออกแบบมาสำหรับข้อมูลที่ไม่ได้ทำโครงการ แต่เป็นปัญหาเดียวกันหากคุณมีข้อมูลภาคพื้นดินใน WGS84 long / lat
  • ข้อมูลนี้มีค่าเป็นศูนย์กลางทางภูมิศาสตร์ ถ้าคุณต้องการที่จะทำผลงานเชิงใด ๆ กับมันผมขอแนะนำให้ใช้สิ่งที่ต้องการPyEphem
  • ฉันไม่ได้พยายามสร้างข้อมูลใด ๆ ใน SRS นี้ดังนั้น YMMV
  • แม้ว่าตอนนี้ฉันค่อนข้างสนใจดังนั้นฉันอาจต้องลองเล่นกับการนำเข้าแคตตาล็อก Hipparchos ... :)

2
+1 คุณสามารถเริ่มต้นการทำแผนที่ท้องฟ้าได้อย่างดีโดยการโหลดรุ่นของฐานข้อมูล HYGทวีคูณขึ้นไปทางขวา 15 และลบ 180 เพื่อแปลงเป็น "ลองจิจูด" GIS มาตรฐานและใช้ฐานข้อมูลทรงกลมที่คุณต้องการ สำหรับการแสดงและการทำแผนที่ gnomonic และ orthographic ประมาณการเป็นมาตรฐานที่ค่อนข้าง
whuber

@whuber: และละติจูด? DEC คืออะไร
Magno C

@MagnoC ใช่ถูกต้องแล้ว มีการอธิบายฟิลด์ต่าง ๆ บนเว็บไซต์ที่ฉันเชื่อมโยง: เพียงเลื่อนลงมาเล็กน้อย ในการตรวจสอบฉันทิ้งเวอร์ชั่น "เล็ก" (เฉพาะดาว 31K) ลงในโปรแกรมดูภาพ 3 มิติแปลงเป็นพิกัดคาร์ทีเซียน
whuber

@whuber: "RA, Dec: การขึ้นและลงที่ถูกต้องของดาวสำหรับยุค 2000.0 ดาวที่ปรากฏในแคตตาล็อก Gliese ซึ่งใช้พิกัด 1950.0 เท่านั้นมีพิกัดเหล่านี้ precessed ถึง 2000" ฉันไม่ชัดเจนเกี่ยวกับ Lat / Lon ดังนั้นLON = (RA*15) - 180และLAT = DEC?
Magno C

@MagnoC ฉันพบen.wikipedia.org/wiki/Equatorial_coordinate_systemเพื่อช่วยในการเรียงลำดับสิ่งนี้
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.