Подсчитать расстояние LineString в MySql
Всем привет, имеется LineString для которого надо рассчитать длину. Пытался сделать так,
SELECT ST_Length(AsText(`coordinates`)) FROM cabledata limit 5;
но на выходе всегда получаю null. Есть ли вообще возможность посчитать длину в MySql?
Желаемый результат:
| meters |
|---|
| 2500 |
| 750 |
| 2364 |
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
Пример расчёта длины LINESTRING:
CREATE TABLE test (line GEOMETRY); INSERT INTO test VALUES (ST_GeomFromText('LINESTRING (1 1, 2 2, 3 1, 4 2)'));
SELECT ST_AsText(line), ST_Length(line) FROM test;
ST_AsText(line) ST_Length(line) LINESTRING(1 1,2 2,3 1,4 2) 4.242640687119286
db<>fiddle here
Расчёт на предоставленных данных (SRID изменён с 0 на 4326), в метрах.
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=4a65c16c260064f74c0b03933014da12
CREATE TABLE IF NOT EXISTS `cabledata` ( `id` int(10) NOT NULL AUTO_INCREMENT, `coordinates` linestring NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `cabledata` set coordinates = ST_GeomFromText("LINESTRING(57.223896543525 60.08284845505477,57.224666502604 60.08295820801504,57.225172514244 60.083046018147,57.225704981303 60.08310879476994,57.226027409155 60.0832051653,57.226187441077 60.083256293377985)",4326); INSERT INTO `cabledata` set coordinates = ST_GeomFromText("LINESTRING(57.230589493775 60.08595911328098,57.231265870806 60.08602692418094,57.2315360436 60.08612390578401,57.23189156935 60.086119848024964,57.232287739405 60.08614797677296)",4326); INSERT INTO `cabledata` set coordinates = ST_GeomFromText("LINESTRING(57.237716659958 60.086963747497975,57.23796277784 60.08699119328696,57.23865898327 60.08710815884797,57.238934277198 60.08714999292306)",4326); INSERT INTO `cabledata` set coordinates = ST_GeomFromText("LINESTRING(58.267664587347 57.820157781244,58.267666527077 57.819787636399,58.267708848424 57.81961530447,58.267707085035 57.81907081604)",4326);
SELECT id, ST_Length(coordinates, 'metre') FROM cabledata;
id ST_Length(coordinates, 'metre') 1 256.4856608555175 2 189.83422511452227 3 136.07477319241113 4 64.84093932155407