Проверьте правильную и / или правильную геометрию в MySQL - PullRequest
0 голосов
/ 01 февраля 2019

Перенос таблицы MariaDB с геометрическими данными в MySql, некоторые данные не могут быть вставлены, потому что они не правильно сформированы, даже если это не проблема для MariaDB.

Этот запрос работает на MariaDB (10.2).

CREATE TABLE IF NOT EXISTS geo (
    id INT AUTO_INCREMENT NOT NULL,
    value GEOMETRY NOT NULL,
    SPATIAL INDEX idx_value (value),
    PRIMARY KEY(id)
) ENGINE = InnoDB;
INSERT INTO geo (value) SELECT ST_GeomFromText('LINESTRING(1 2)');

Не на MySql (5.7.20), где ошибка:

3037 - неверные ГИС-данные, предоставленные функции st_geometryfromtext.

В MySql есть три функции для идентификации таких геометрий: ST_IsSimple(), ST_IsValid() и ST_Validate(), но они не работают с плохо отформатированными геометриями:

SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 2)'));
SELECT ST_IsValid(ST_GeomFromText('LINESTRING(1 2)'));
SELECT ST_AsText(ST_Validate(ST_GeomFromText('LINESTRING(1 1)')));

3055 -Строка байта Geometry должна иметь младший порядок.

Этот пример взят из https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html,, но он не работает.Так что это странно (документ не обновлялся для 5.7).Подробнее о действительности в mysql: https://dev.mysql.com/doc/refman/5.7/en/geometry-well-formedness-validity.html (mysql принимает любой синтаксически правильно сформированный ввод, но не геометрически неверный).

Подобные проблемы здесь:

Но ни один из них не отвечает на вопрос: как плохо идентифицироватьотформатированные геометрии на MySQL 5.7?

1 Ответ

0 голосов
/ 02 февраля 2019

LineString требуется как минимум две точки.Возможно, 5.6 небрежно указывал на это.

mysql> SELECT hex(ST_GeomFromText('LINESTRING(1 1)'));
ERROR 3037 (22023): Invalid GIS data provided to function st_geometryfromtext.

mysql> SELECT hex(ST_GeomFromText('LINESTRING(1 1, 2 3)'));
+--------------------------------------------------------------------------------------------+
| hex(ST_GeomFromText('LINESTRING(1 1, 2 3)'))                                               |
+--------------------------------------------------------------------------------------------+
| 00000000010200000002000000000000000000F03F000000000000F03F00000000000000400000000000000840 |
+--------------------------------------------------------------------------------------------+

mysql> SELECT @@version;
+-----------+
| @@version |
+-----------+
| 5.7.15    |
+-----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...