วัตถุประสงค์ของ PostGIS บน PostgreSQL คืออะไร?


49

PostgreSQL รองรับประเภทข้อมูลเชิงพื้นที่ตัวดำเนินการและการทำดัชนีแล้ว

PostGIS ให้อะไรที่ทำให้จำเป็นต้องมีอยู่เพื่อเป็นส่วนเสริมของ PostgreSQL

ทำไมเราไม่เพียงแค่ใช้ฟังก์ชันเชิงพื้นที่ของ PostgreSQL


2
เป็น PostGIS ที่ให้บริการประเภทข้อมูลเชิงพื้นที่ผู้ประกอบการและการจัดทำดัชนี ...
DPSSpatial

5
ไม่เขากำลังพูดถึงประเภทเรขาคณิตดั้งเดิมของ PostgreSQL
Evan Carroll

4
คำตอบสั้น ๆ คือ PostGIS เป็น 10 เท่าของฟังก์ชั่นเหมือนกับประเภท PgSQL คำตอบที่ยาวซึ่งครอบคลุมคำถาม "เหตุใดจึงพัฒนารูปแบบใหม่และไม่ใช่แค่ปรับปรุงสิ่งที่มีอยู่แล้ว" ได้รับการแก้ไขด้านล่าง
Paul Ramsey

1
สิ่งเดียวกันเกิดขึ้นกับเฟรมเวิร์ก Java Spring Java มีข้อบกพร่อง / คุณสมบัติที่ขาดหายไป สปริงแก้ไขข้อบกพร่อง Java มากมายและเพิ่มคุณสมบัติที่มีประโยชน์ Java คัดลอกคุณลักษณะ + การแก้ไขของ Spring ผู้คนถามว่าทำไมฤดูใบไม้ผลิถึงมีอยู่ ...
นีลแม

คำตอบ:


86

ถ้าคุณกระทบกระเทือนจักรวาลจนถึงต้นปี 2544 และไม่เพียง แต่ให้นักประดิษฐ์ของ PostGIS มองเห็นอนาคต แต่ยังปล่อยให้ PSC ของ PgSQL มองเห็นอนาคตบางที PostGIS จะเป็นชุดข้อมูลแก้ไขบน PgSQL แต่อย่างน้อยถ้าเราเริ่มต้นเป็นแพทช์ถึงหลักสิ่งแรกที่เราจะต้องเจอคือ:

  • พื้นที่ PgSQL หลักไม่รองรับรู แต่โมเดล GIS ต้องการรูเราสามารถเปลี่ยนได้หรือไม่

และแกน PgSQL ก็บอกว่า: "ไม่แน่นอนไม่ใช่พื้นที่ที่มีความหมายที่เข้าใจดีอยู่แล้วและเราไม่สามารถทำการเปลี่ยนแปลงย้อนหลังที่เข้ากันไม่ได้เช่นนั้น"

ในฐานะนักพัฒนาที่ไม่ใช่ธุรกิจหลัก PostGIS สามารถตีพิมพ์เผยแพร่รายเดือนและรายเดือน 6 ​​เดือนเป็นเวลาหลายปีในขณะที่ PgSQL core ได้รับการปรับแต่งพร้อมกับการเผยแพร่รายปีและอีกต่อไป เรายังสามารถเพิ่มคุณสมบัติใด ๆ ที่เราต้องการได้ทุกเมื่อเนื่องจากเรามีสิทธิ์ในโครงการของเรา แต่การได้รับสิทธิ์ใน PgSQL นั้นใช้เวลานานมาก

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

แต่ PostGIS ได้กลายเป็นตัวอย่างที่ยอมรับได้ของส่วนขยายที่ซับซ้อนขนาดใหญ่จริง ๆ ซึ่งช่วยให้ PgSQL ยังคงเป็นแบบแยกส่วนและขยายได้ "สิ่งนี้จะมีผลอย่างไรกับ PostGIS" เป็นคำถามที่มักถูกถามเป็นหลัก PgSQL ประเมินการเปลี่ยนแปลงบางอย่าง สิ่งนี้เป็นสิ่งที่ดีบางทีอาจไม่ดีเท่า PostGIS ที่เป็นส่วนหนึ่งของหลัก แต่ก็ดีพอ

มีเหตุผลอื่น ๆ เช่นรายการพึ่งพา PgSQL หลักที่น่าเกลียดการดูความสม่ำเสมอของโค้ดที่ต่ำกว่าและความสะอาดของ API ซึ่งพวกเขาจะหมดหวังในการปรับปรุงและต่อ ๆ ไป แม้แต่ในความคิด PostGIS ก็มีก้อนผมใหญ่เกินกว่าที่ PgSQL จะกลืนได้ในครั้งเดียว


นอกจากนี้ ... PostGIS คือ C ++ นี่จะเป็น showstopper สำหรับการผสาน PostgreSQL ไม่ว่าจะเป็นหรือไม่ก็ตาม การพึ่งพาจะหยุดมันได้อย่างสมบูรณ์ - GDAL ฮา! ฉันไม่สามารถรับ core เพื่อตกลงที่จะพึ่งพา Perl> 5.8.0 ก้าวในการพัฒนานั้นช้าแม้ว่าคุณจะมีสิทธิ์ก็ตาม ผู้กระทำไม่เพียง แต่จะได้รับฟรีสำหรับทุกสิ่งที่อยู่ในต้นไม้พวกเขาจะต้องผ่านการตรวจสอบโค้ดและการเปลี่ยนแปลงครั้งใหญ่ในเวลาไม่กี่เดือนหรือหลายปี มีประโยชน์ด้านคุณภาพของรหัส แต่ก็แน่ใจว่าจะไม่เคลื่อนไหวอย่างรวดเร็ว
Craig Ringer

เป็นปัญหาโดยเฉพาะอย่างยิ่งที่ Pg คอร์ยังคงสร้างสรรค์สิ่งใหม่ ๆ เพื่อหลีกเลี่ยงการพึ่งพาห้องสมุดภายนอกมากขึ้น เพราะมันหมายถึง $ Ancient_unix_42 กับ $ weird_vendor_compiler บน $ dead_ar Architecture จะต้องให้การสนับสนุนสมาชิก buildfarm ทุกคนจะต้องอัปเดต ฯลฯ มันเป็นหนึ่งในปัญหาที่เกี่ยวกับความเป็นผู้ใหญ่และมั่นคงฉันเดาว่า
Craig Ringer

@CraigRinger ทำไมคุณถึงคิดว่า PostGIS เป็น C ++ นั่นคือการดูถูก :-)
Nicklas Avén

มัน ... ไม่ใช่เหรอ ฉันสาบานได้แล้ว แต่มันก็ดูไม่เหมือนเลย ความผิดฉันเอง. ฉันชอบการใช้ C ++ (ปานกลางและถูก จำกัด ) อยู่แล้ว
Craig Ringer

4
ในช่วงเวลาหนึ่ง PostGIS มี C ++ สองสามชิ้นเพื่อสร้างความผูกพันกับ GEOS เมื่อ GEOS เพิ่ม C API ของตัวเองชิ้นส่วนเหล่านั้นจะถูกลบออกและ PostGIS กลายเป็น "บริสุทธิ์" C.
Paul Ramsey

34

นั่นไม่ใช่เรื่องจริง PostgreSQL ไม่สนับสนุนประเภทข้อมูลเชิงพื้นที่ รองรับประเภทเรขาคณิต สิ่งเหล่านี้ดีสำหรับบางสิ่งบางอย่าง แต่มันแยกออกจากระบบพิกัดโลกแห่งความเป็นจริงโดยสิ้นเชิง ประเภทพื้นเมือง

ปรับปรุง

สำหรับคำถามดัชนีนั้นอยู่ในคำถามที่พบบ่อย

เหตุใดจึงไม่สนับสนุนดัชนี PostgreSQL R-Tree

รุ่นก่อนหน้าของ PostGIS ใช้ดัชนี PostgreSQL R-Tree อย่างไรก็ตาม PostgreSQL R-Trees ได้ถูกยกเลิกอย่างสมบูรณ์ตั้งแต่เวอร์ชั่น 0.6 และการจัดทำดัชนีเชิงพื้นที่มีให้กับโครงการ R-Tree-over-GiST

การทดสอบของเราแสดงความเร็วในการค้นหาเพื่อให้ R-Tree และ GiST นั้นเทียบเคียงได้ Native PostgreSQL R-Trees มีข้อ จำกัด สองประการซึ่งทำให้ไม่พึงประสงค์สำหรับการใช้งานกับคุณสมบัติ GIS (โปรดทราบว่าข้อ จำกัด เหล่านี้เกิดจากการใช้งาน R-Tree ดั้งเดิม PostgreSQL ปัจจุบันไม่ใช่แนวคิด R-Tree โดยทั่วไป):

  • ดัชนี R-Tree ใน PostgreSQL ไม่สามารถจัดการคุณสมบัติที่มีขนาดใหญ่กว่า 8K ดัชนี GiST สามารถทำได้โดยใช้เคล็ดลับ "lossy" ของการแทนที่กล่องขอบเขตสำหรับคุณลักษณะนั้น

  • ดัชนี R-Tree ใน PostgreSQL ไม่ได้ "ปลอดภัย" ดังนั้นการสร้างดัชนีในคอลัมน์รูปทรงเรขาคณิตซึ่งมีรูปทรงที่เป็นโมฆะจะล้มเหลว [ดัชนี GiST ปลอดภัยแล้ว]


คุณสามารถขยายจุดสุดท้ายของคุณ - หนึ่งเกี่ยวกับดัชนี GiST PostgreSQL จัดหา R-Tree และตอนนี้ให้บริการผ่านดัชนี GiST ดังนั้นฉันจึงสับสนเกี่ยวกับประเด็นนั้น
Zeruno

อัปเดตด้วยข้อความโดยตรงจากคำถามที่พบบ่อย
Evan Carroll

1
สรุปสาระสำคัญของ API เป็นสิ่ง PostgreSQL ให้บริการโดยการเข้าถึง / gist.h คุณสามารถดูได้ที่PostGIS ที่นี่
Evan Carroll

3
ในขณะที่ PostGIS มีการใช้ rtree-on-gist เป็นของตัวเองมันคล้ายกับ PgSQL ที่ใช้สำหรับการสนับสนุนหลักของออบเจ็กต์กราฟิกด้วยเหตุผลง่าย ๆ ที่เราคัดลอกมา
Paul Ramsey

1
@Zeruno, ไม่, การแก้ไข rtree splitter ใน PgSQL จะไม่เปลี่ยนพฤติกรรมของ PostGIS เพราะเรามีของเราเองใน gserialized_gist_picksplit_2d () คุณจะไม่ได้ทั้งหมดไม่ใช่สิ่งที่แตกต่างจาก PgSQL อย่างใดอย่างหนึ่ง
พอลแรมซีย์

8

PostGISเป็นตัวขยายฐานข้อมูลเชิงพื้นที่สำหรับฐานข้อมูลเชิง วัตถุเชิงสัมพันธ์ของPostgreSQL มันเพิ่มการสนับสนุนสำหรับวัตถุทางภูมิศาสตร์ที่ช่วยให้แบบสอบถามสถานที่ทำงานใน SQL

SELECT superhero.name
FROM city, superhero
WHERE ST_Contains(city.geom, superhero.geom)
AND city.name = 'Gotham';

นอกเหนือจากการรับรู้ตำแหน่งพื้นฐานแล้ว PostGIS ยังมีคุณสมบัติมากมายที่ไม่ค่อยพบในฐานข้อมูลเชิงพื้นที่อื่น ๆ เช่น Oracle Locator / Spatial และ SQL Server อ้างถึงรายการคุณสมบัติของ PostGISสำหรับรายละเอียดเพิ่มเติม

รายการคุณสมบัติ PostGISขยายขีดความสามารถเหล่านั้นเช่นกัน:

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

รายการคุณสมบัติ

ซีรี่ส์ PostGIS 2+ มี:

  • การประมวลผลและฟังก์ชั่นการวิเคราะห์สำหรับทั้งเวกเตอร์และข้อมูลแรสเตอร์สำหรับการประกบ, การหั่น, การทำ morphing, การจัดประเภทใหม่และการรวบรวม / การรวมกับพลังของพีชคณิตแผนที่เชิงภาพ SQL สำหรับการประมวลผลเชิงภาพเชิงภาพ
  • ฟังก์ชันการปฏิเสธ SQL เชิงพื้นที่สำหรับข้อมูลเวกเตอร์และแรสเตอร์รองรับการนำเข้า / ส่งออกข้อมูลเวกเตอร์ Shapefile ของ ESRI ผ่านทั้ง commandline และ GUI เครื่องมือที่บรรจุแพคเกจและสนับสนุนรูปแบบเพิ่มเติมผ่านเครื่องมือโอเพนซอร์สอื่น ๆ
  • บรรจุบรรทัดคำสั่งสำหรับการนำเข้าข้อมูลแรสเตอร์จากหลายรูปแบบมาตรฐาน: GeoTiff, NetCDF, PNG, JPG

  • ฟังก์ชั่นการสนับสนุนการเรนเดอร์และอิมพอร์ตข้อมูลเวกเตอร์สำหรับรูปแบบข้อความมาตรฐานเช่น KML, GML, GeoJSON, GeoHash และ WKT โดยใช้ SQL ข้อมูลเรนเดอร์แรสเตอร์ในรูปแบบมาตรฐานต่างๆ GeoTIFF, PNG, JPG, NetCDF

  • ฟังก์ชันการเรียกใช้ SQL แบบแรสเตอร์ / เวกเตอร์ที่ไร้รอยต่อสำหรับการอัดค่าพิกเซลตามภูมิภาคเรขาคณิตสถิติการวิ่งตามภูมิภาคการตัดแรสเตอร์ตามเรขาคณิตและการสนับสนุนวัตถุสามมิติแบบเวกเตอร์แรสเตอร์ดัชนีเชิงพื้นที่และฟังก์ชั่น / ใช้ประโยชน์จากข้อมูลUS Census Tiger

นอกจากนี้ไปยังจุด / ส่วนที่กล่าวถึงแล้วในโพสต์นี้ ฉันจะเพิ่มดังที่กล่าวไว้ในเว็บไซต์ PostGIS มันทำงานอย่างไร

เนื่องจาก PostGIS อยู่ใน C มันสามารถใช้ประโยชน์จากไลบรารี่อื่นใน C และ C ++ และมันทำแบบอิสระ PostGIS ขึ้นอยู่กับ:

  • GEOSสำหรับอัลกอริทึมการประมวลผลทางเรขาคณิตมากมาย
  • Proj.4สำหรับประสานงานฟังก์ชั่นฉายภาพซ้ำ
  • GDALสำหรับการประมวลผลแรสเตอร์และการสนับสนุนรูปแบบ
  • LibXML2สำหรับการแยกวิเคราะห์ XML
  • JSON-Cสำหรับการแยกวิเคราะห์ JSON
  • SFCGALสำหรับการสนับสนุน 3D เพิ่มเติมและอัลกอริทึมการประมวลผลทางภูมิศาสตร์เพิ่มเติม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.