Daha çox

PostGIS - OSGB 36-dan çevrildikdən sonra WGS84-dən linring uzunluğu necə hesablanır


Məlumatların EPSG: 27700 - OSGB 1936 / British National Grid-dən EPSG: 4326 / WGS 84-ə çevrildikdən sonra çoxsaylı daşlardan uzunluq əldə etmək problemi yaşayıram.

Mən bu konvertasiyanı yol şəklindəki faylı varsayılan olaraq WGS84 istifadə edən bir PostGIS verilənlər bazasına gətirmək üçün edirəm. Ancaq uzunluqları ölçməyə çalışarkən qəribə oxunuşlar keçirirəm.

Əvvəlcə bəzi səhv çevrilmələr haqqında düşündüm, ancaq təbəqəni dəyişdirmədən (OSGB 1936 referansı) idxal edən boş bir verilənlər bazasında əlavə testlər etdikdən sonra hələ də təəccübləndim:

Aşağıdakı sorğu ziddiyyətli nəticələr verir

ST_Length (geom) length_OSGB, ST_Length_Spheroid (ST_Transform (geom, 4326), 'SPHEROID ["WGS 84", 6378137,298.257223563]') length_WGS84 from osgb36_data WHERE id = 108 SEÇİN

bu, OSGB36 uzunluğu üçün 338 metr və WGS84 uzunluğu üçün 482 metrdir. Doğru 338 metrdir.

QGIS və DBmanager istifadə edərək verilənlər bazasına idxal etdim.

Ayrıca .prj-nin itkin olduğu üçün ilkin proyeksiyaları təxmin etməli idim, lakin nəticəni google maps üzərində proyeksiya etmək mükəmməl bir uyğunlaşma ilə nəticələndi.

Hər hansı bir ipucu xoş gəlmisiniz

RED:

Təklif olunan kimi, nümunədəki element üçün WKT:

SRID = 27700; ÇOK ÇOXLU ((423216.279 574665.249 0, 423206.315 574708.077 44.649, 423158.458 574896.911 242.525, 423132.406 574993.061 344))

Qəribədir, görünür ki, linestringdəki hər nöqtə üçün yığılmış məsafəni qeyd etmək üçün z koordinatından istifadə edirdilər ... Bu məsələni səhv məsafələrlə izah edə bilər.


Uzunluq funksiyaları 3B linestring həndəsələr ilə fərqli işləyir:

  • ST_Uzunluq - üçün 2D məsafəni qaytarırhəndəsənövləri və qəribə 3D məsafələricoğrafiyanövlər (lakin bu sualda deyil)
  • ST_Length_Spheroid - Üçüncü məsafələri qaytarırhəndəsənövləri

Nümunəniz 3D şəklindədir, buna görə də 3D uzunluğunu hesablayacaqdırST_Length_Spheroidvə ilə 2D uzunluğuST_Uzunluqüzərində üstündəhəndəsə.

Bununla birlikdə, hər zaman 2B uzunluqlar istəsəniz, həndəsəni ya birini istifadə edərək 2B linestringə məcbur edə bilərsiniz ST_Force2Dvə yaST_Force_2D funksiyası (PostGIS 2.1-də ad dəyişikliyi).

ST_Length (geom) AS length_27700, ST_Length_Spheroid (ST_Transform (ST_Force2d (geom), 4326), spheroid) AS length_spheroid_2d, ST_Length_Spheroid (ST_Transform (geom, 4326), spheroid) AS length_spheroid 2799 SER; 574665.249 0, 423206.315 574708.077 44.649, 423158.458 574896.911 242.525, 423132.406 574993.061 344)) ':: geometry AS geom,' SPHEROID ["WGS 84", 6378137,298.257223563] ':: sphe uzunluq_27700 | uzunluq_spheroid_2d | length_spheroid_3d ----------------- + -------------------- + ---------- ---------- 338.39264086563 | 338.515774984236 | 482.622196178051

Postgis düzdür.

Xəttiniz 3d məkanda və hətta İngilis Milli Şəbəkəsində belə ~ 482 m uzunluğa malikdir.

338 metr də düzgündür, lakin 3-cü xəttin 2-ci fəzada proyeksiyasına cavab verir.

as (select st_Geomfromewkt ('SRID = 27700; MULTILINESTRING ((423216.279 574665.249 0, 423206.315 574708.077 44.649, 423158.458 574896.911 242.525, 423132.406 574993Length "uzun) 2) (uzun)) A-dan "3D_Length"; 2d_length | 3d_length ----------------- + ----------------- 338.39264086563 | 482.54086040695 (1 sıra)

Manual Links:
ST_Uzunluq
ST_3D uzunluq

Redaktə edin:
Əlaqəli:
http://revenant.ca/www/postgis/workshop/measurement.html


Videoya baxın: RÖNESANS. HSE İSG MUHTEŞEM EĞİTİMİ 1 (Oktyabr 2021).