MySQL испытывает трудности с обработкой некорректных WKB - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть представление mysql, которое компилирует информацию из нескольких таблиц, чтобы предоставить моему GeoServer удобную таблицу для доступа и предоставить ряд служб OGC для.

Однако некоторые из геометрий, которые я хочуподвергаются минимальной деформации (самопересечение, вложенные оболочки, отверстия находятся вне оболочки, ...).Когда я пытаюсь преобразовать геометрии (которые хранятся в виде WKB) и преобразовать их в геометрии, которые GeoServer может прочитать, я получаю сообщения об ошибках для искаженных (# 3037 - неверные данные ГИС, предоставленные функции st_geometryfromwkb).Теперь я могу исправить неправильно сформированные геометрии в qgis и заново вставить их в базу данных, но я знаю, что в будущем я буду продолжать получать искаженные геометрии, и каждый раз, когда я это делаю, перестает работать весь вид и, следовательно, мой слой геосервера.

Есть ли способ указать моему sql-запросу / представлению проверить наличие некорректных геометрий и игнорировать их?

Вот так выглядит мой запрос:

SELECT 
name.`field_site_sitelong_value` AS name,
`uuid`,
basetable.`nid`,

ST_GeomFromWKB(`field_geo_bounding_box_geom`, 4326) AS geom

FROM `node` basetable
INNER JOIN `field_data_field_geo_bounding_box` coordinates
ON coordinates.`entity_id` = basetable.`nid`

INNER JOIN `field_data_field_site_sitelong` AS name
ON name.`entity_id` = basetable.`nid`

WHERE `field_geo_bounding_box_geo_type` = 'polygon' OR `field_geo_bounding_box_geo_type` = 
'multipolygon'

Если бы не неправильная геометрия, это работало бы отлично.

РЕДАКТИРОВАТЬ: я обнаружил, что даже простой оператор select не будет работать должным образом (в phpmyadmin, то же сообщение об ошибке "(# 3037 - InvalidДанные ГИС передаются в функцию st_geometryfromwkb) "), когда в столбце есть некорректные WKB.Как вы можете это поймать?

SELECT `name`, `geom` FROM `sites_boundaries`
...