Преобразование MySQL POINT в текст в PHP
Я нашел этот вопрос и ответ, и он решил мои проблемы. Но я не нашел решения для полигонов.
Есть ли у кого-нибудь решение конвертировать blob / polygon в текст, похожий на пример?
Если вы используете ST_NumGeometries (от https://dev.mysql.com/doc/refman/5.7/en/gis-geometrycollection-property-functions.html#function_st-numgeometries ), он должен дать вам количество очков, а затем вы можете использовать цикл и ST_GeometryN для извлечения каждой отдельной точки. Это все равно нужно будет декодировать, как и вы.
Вы можете преобразовать многоугольник обратно в текст (AsText), а затем проанализировать данные там.
Как вы знаете, MySQl (и MariDB) хранит данные геометрии следующим образом:
MySQL сохраняет значения геометрии с использованием 4 байтов, чтобы указать SRID, за которым следует представление WKB значения. Описание WKB-формата см. В разделе «Известный двоичный (WKB) формат).
Дополнительную информацию см. В документах MySQL .
Используя GeoPHP, вы можете конвертировать любые данные Geo (из моего MySQL) следующим образом:
$data = unpack("lsrid/H*wkb", $val); $wkb_reader = new WKB(); $geometry = $wkb_reader->read($data['wkb'], TRUE); $wkt_writer = new WKT(); $wkt = $wkt_writer->write($geometry); return $wkt;
Где $ val – значение столбца из таблицы MySQL.
Первая строка распаковывает данные на две части:
1- SRID: первые 4 байта 2- WKB: другие как hex strig
и преобразуйте шестнадцатеричную строку WKB в WKT с помощью GeoPHP.