เลือกตามขอบของกล่องด้วย PostGIS


12

ฉันมีชุดข้อมูลขนาดใหญ่ในฐานข้อมูล PostGIS ฉันกำลังดูผ่านเว็บอินเตอร์เฟสที่โหลดข้อมูลเป็น GeoJSON มีข้อมูลมากเกินไปที่จะให้ลูกค้าทั้งหมดในครั้งเดียว (10s ของ MBs มูลค่า ... ) ดังนั้นฉันต้องการได้รับพื้นที่ของข้อมูลภายในกล่องขอบเขตที่เกิดขึ้นจากขอบของหน้าต่าง (เส้นประในภาพด้านล่าง ) การหาพิกัดสำหรับจุด f และ g นั้นง่ายมาก

คำถามที่ 1:นี่เป็นวิธีที่ดีในการทำสิ่งต่าง ๆ หรือไม่? ฉันควรจะคิดว่าแคชพวกเขาเป็นแบบเรียงต่อกันหรือวิธีนี้น่าจะมีประสิทธิภาพเพียงพอหรือไม่

คำถามที่ 2:ฉันจะดึงข้อมูลเฉพาะภายในกล่องขอบเขตนี้ได้อย่างไร

คำถามที่ 3:ถ้ารูปร่างซ้อนทับขอบของกล่องขอบ (เช่นรูปร่าง A ด้านล่าง) มีวิธีง่าย ๆ ในการครอบตัดเนื่องจากมีการสอบถามเหมือนในภาพที่สองหรือไม่?

ป้อนคำอธิบายรูปภาพที่นี่


คุณกำลังดูตัวใดบนไคลเอนต์
underdark

Mapstraction ปัจจุบันฉันใช้ OpenLayers เป็นผู้ให้บริการ
Mr_Chimp

คำตอบ:


8

เพียงแค่เปลี่ยนลำดับของคำถามและคุณมีขั้นตอน:

2) เลือกเฉพาะสิ่งที่ตัดกัน bbox ( ST_Intersects)
3) ตัดกับ bbox เพื่อตัดรูปหลายเหลี่ยม ( ST_Intersection)
1) สร้างตารางใหม่พร้อมผลลัพธ์ ( CREATE TABLE newtable AS SELECT...)

ST_Intersection docsมีตัวอย่างโค้ด คุณจะต้องปรับใช้และใช้ST_PolygonFromTextเป็น bbox


4

ฉันคิดว่าส่วนใหญ่ (ทั้งหมด) ลูกค้าเว็บ (และ gis บนเดสก์ท็อปด้วย) กำลังทำสิ่งนี้อยู่ คุณไม่สามารถส่งชุดข้อมูลทั้งหมด

หากคุณควรตั้งค่าแคชบางประเภทขึ้นอยู่กับว่าข้อมูลของคุณแตกต่างกันไปคงที่หรือถ้ามันมีการเปลี่ยนแปลง

หากต้องการให้กล่องกาเครื่องหมายขอบเขตเพื่อรับข้อมูลจะเร็วมาก (ถ้าคุณมีดัชนีเชิงพื้นที่) แต่แน่นอนว่ามันไม่ฟรี คุณจะจ่ายด้วยซีพียูบางส่วน

ตามที่ได้กล่าวไว้ก่อนหน้านี้: หากต้องการค้นหารูปหลายเหลี่ยมภายในขอบเขตของคุณคุณใช้ ST_Intersects

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

แต่ฉันคิดว่าคุณต้องการทำสิ่งนี้ได้ทันทีแทนที่จะวางไว้ในตาราง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.