รับความยาวเรขาคณิตเป็นเมตรหรือไม่


13

ใน PostGIS ST_length()ฟังก์ชันจะส่งคืนความยาวของการเปล่งแสงในบางหน่วย แต่ไม่ใช่ในหน่วยเมตร

มีฟังก์ชั่นเหมือนเป็นST_Length()เมตรหรือไม่?

คำตอบ:


11

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

SELECT ST_AsText(ST_Transform(the_geom,26915)) from my_table;

ในตัวอย่างนี้ SRID 26915 คือ UTM Zone 15 N, NAD83


หรือเพิ่มเขตข้อมูลของคุณเองและจัดการการคำนวณด้วยตัวเอง หมายเหตุคุณต้องเขียนทริกเกอร์ของคุณเองหรือคำนวณใหม่ในการเปลี่ยนแปลงความยาวของคุณ
แบรด Nesom

18

ดูเหมือนว่าตั้งแต่ PostGIS 2.0 (อาจก่อนหน้านี้) คุณสามารถทำสิ่งนี้ด้วยST_Lengthการตกแต่งเรขาคณิตเป็นภูมิศาสตร์:

ST_Length(geom::geography)

ตัวอย่างเช่นระยะห่างระหว่าง 50 ° N, 12 ° E และ 51 ° N, 13 ° E:

SELECT ST_Length(geom) AS deg,
       ST_Length(geom::geography)/1000 AS km_1,
       ST_Length_Spheroid(geom, 'SPHEROID["WGS 84",6378137,298.257223563]')/1000 as km_2
FROM   ST_GeomFromText('LINESTRING(12 50, 13 51)' , 4326) AS geom

ซึ่งจะช่วยให้

       deg       |       km_1       |       km_2       
-----------------+------------------+------------------
 1.4142135623731 | 131.935962780384 | 131.935962780384


0

ใช้สูตรต่อไปนี้:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.