MySQL выбрать класс геометрии из коллекции геометрии
Я устанавливаю коллекцию Geometry в базе данных MySql. Я добавил различные классы геометрии таким образом:
SET @g = 'GEOMETRYCOLLECTION(POINT (1 1), LINESTRING (0 1,2 3,4 5), POINT (6 6))'; INSERT INTO myTable (geoCollectionField) VALUES (GeomFromText (@g));
geoCollectionField
отвечает, как и ожидалось в формате WKT:
ГЕОМЕТРИЧЕСКАЯ КОЛЛЕКЦИЯ (ТОЧКА (1 1), ЛИНИСТРИНГ (0 1,2 3,4 5), ТОЧКА (6 6))
Я могу получить данные из этой коллекции геометрии несколькими способами.
ВЫБЕРИТЕ geoCollectionField FROM myTable;
дает полную GEOMETRYCOLLECTION(ТОЧКА (1 1),LINESTRING...
ВЫБЕРИТЕ AsText(GeometryN(geoCollectionField, 1)) ОТ myTable;
дает индексированный класс геометрии POINT(1 1).
Я не смог написать SELECT, который выбирает только один тип класса, например, классы POINT, заканчивающиеся POINT((1 1),(6 6)).
Какие-нибудь мысли?
1 ответ
Рассмотрим следующие шаги:
- Получите количество геометрий в вашем
GeometryCollection
с помощьюSTNumGeometries
( Справочник по STNumGeometries) - Используйте цикл для перебора всех ваших геометрий в вашем
GeometryCollection
, - Получить геометрию по определенному индексу, используя
STGeometryN
( STGeometryN Ссылка) - Для каждой геометрии получите тип геометрии, используя
STGeometryType
( Ссылка на STGeometryType) - Проверьте, соответствует ли тип геометрии желаемому типу. Если у вас есть совпадение, вы можете добавить его к
GeometryCollection
,
Выполнение этих шагов приведет к
GEOMETRYCOLLECTION(POINT(1 1), POINT(6 6))
Вы также можете использовать другие коллекции в зависимости от желаемого типа геометрии (MultiPoint
, MultiLineString
, MultiPolygon
)
Многоточечный результат может выглядеть так:
MULTIPOINT((1 1), (6 6))