ใน PostGIS ST_length()
ฟังก์ชันจะส่งคืนความยาวของการเปล่งแสงในบางหน่วย แต่ไม่ใช่ในหน่วยเมตร
มีฟังก์ชั่นเหมือนเป็นST_Length()
เมตรหรือไม่?
ใน PostGIS ST_length()
ฟังก์ชันจะส่งคืนความยาวของการเปล่งแสงในบางหน่วย แต่ไม่ใช่ในหน่วยเมตร
มีฟังก์ชั่นเหมือนเป็นST_Length()
เมตรหรือไม่?
คำตอบ:
St_Length () ส่งคืนความยาวในหน่วยของระบบอ้างอิงเชิงพื้นที่ หากคุณต้องการรับเมตรคุณจะต้องแปลงคุณสมบัติของคุณเป็น SRS อื่นที่ใช้เมตรเป็นหน่วย สิ่งนี้สามารถทำได้แบบทันทีดังนั้นไม่ต้องกังวลกับการเขียนชุดข้อมูลอื่น
SELECT ST_AsText(ST_Transform(the_geom,26915)) from my_table;
ในตัวอย่างนี้ SRID 26915 คือ UTM Zone 15 N, NAD83
ดูเหมือนว่าตั้งแต่ 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
ตัวอย่างของคำขอ SQL: วิธีคำนวณความยาวของโพลีไลน์เรขาคณิตสำหรับหลายตารางใน Postgis
คำขอ SQL (ความยาวเป็นกิโลเมตร (/ ลบ 1,000 ลบ.ม. )):
SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";
ใช้สูตรต่อไปนี้:
select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;