ฉันมีชุด rasters ในรูปแบบ DTED ซึ่งฉันโหลดลงในฐานข้อมูล PostGIS โดยใช้เครื่องมือบรรทัดคำสั่ง raster2pgsql
แรสเตอร์แต่ละตัวจะถูกจัดเก็บไว้ในแถวและอธิบายด้วยค่าลบและค่าของรูปแบบแรสเตอร์
ตอนนี้ฉันต้องการสร้างฟังก์ชั่นฐานข้อมูลที่ใช้ลองจิจูดและละติจูดของจุดและส่งกลับค่าของพิกเซลที่สอดคล้องกับจุดนี้
ปัญหาที่ฉันมีคือมันใช้เวลาค่อนข้างมากในการทำเช่นนั้น (3-4 วินาที) เพราะฐานข้อมูลทำงานบนบอร์ด Odroid
ฉันรู้ว่าชุดข้อมูลที่ฉันดำเนินการค่อนข้างใหญ่ (rasters ครอบคลุมพื้นที่ทั้งหมดในสหราชอาณาจักร) แต่เนื่องจากฉันไม่คุ้นเคยกับ PostgreSQL และ PostGIS มากฉันสงสัยว่ามันสามารถทำได้เร็วกว่า
นี่คือสิ่งที่ฉันทำไปแล้ว:
SELECT ST_Value(rast, ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326))
FROM (
SELECT * FROM rasters
WHERE rast && ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326)
) x;
$1
และ$2
มีความยาวและ lat ตามลำดับ
ST_SetSRID(ST_MakePoint($1, $2),4326)
concats string อาจช่วยคุณประหยัดเวลาหากมีการทำซ้ำมากพอ