Metre cinsinden geometri uzunluğu mu elde ediyorsunuz?


13

PostGIS'de ST_length()işlev, bazı birimlerdeki linestring uzunluğunu döndürür, ancak metre cinsinden döndürmez.

ST_Length()Metre cinsinden ama gibi bir fonksiyon var mı ?

Yanıtlar:


11

St_Length (), Mekansal Referans Sisteminin birimlerindeki uzunluğu döndürür. Metre almak istiyorsanız, özelliğinizi metre olarak birim olarak kullanan farklı bir SRS'ye dönüştürmeniz gerekir. Bu işlem anında yapılabilir, bu yüzden başka bir veri kümesi yazmak konusunda endişelenmeyin.

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

Bu örnekte, SRID 26915, UTM Bölge 15 N, NAD83'tür.


Ya da sadece kendi alanınızı ekleyin ve hesaplamayı kendiniz yönetin. NOT Kendi tetikleyicinizi yazmanız veya uzunluklarınızdaki değişikliklerde yeniden hesaplamanız gerekir.
Brad Nesom

18

PostGIS 2.0'dan (belki de daha önce) beri, bunu ST_Lengthgeometriyi coğrafyaya yeniden biçimlendirerek de yapabilirsiniz :

ST_Length(geom::geography)

Örneğin, 50 ° N, 12 ° E ve 51 ° N, 13 ° E arasındaki mesafe:

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

hangi verir

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


0

Aşağıdaki formülü kullanın:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.