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 ответ

Рассмотрим следующие шаги:

  1. Получите количество геометрий в вашем GeometryCollection с помощью STNumGeometries ( Справочник по STNumGeometries)
  2. Используйте цикл для перебора всех ваших геометрий в вашем GeometryCollection,
  3. Получить геометрию по определенному индексу, используя STGeometryN ( STGeometryN Ссылка)
  4. Для каждой геометрии получите тип геометрии, используя STGeometryType ( Ссылка на STGeometryType)
  5. Проверьте, соответствует ли тип геометрии желаемому типу. Если у вас есть совпадение, вы можете добавить его к GeometryCollection,

Выполнение этих шагов приведет к

GEOMETRYCOLLECTION(POINT(1 1), POINT(6 6))

Вы также можете использовать другие коллекции в зависимости от желаемого типа геометрии (MultiPoint, MultiLineString, MultiPolygon)

Многоточечный результат может выглядеть так:

MULTIPOINT((1 1), (6 6))
Другие вопросы по тегам