2016-08-29 2 views
0

Я собираю коллекцию геометрии в базе данных MySql. Я добавил различные классы геометрии, таким образом:mysql выбрать класс геометрии из коллекции геометрии

SET @g = 'GEOMETRYCOLLECTION (POINT (1 1), LINESTRING (0 1,2 3,4 5), точка (6 6)); INSERT INTO myTable (geoCollectionField) VALUES (GeomFromText (@g));

The geoCollectionField реагирует ожидаемой в WKT formay:

GEOMETRYCOLLECTION (POINT (1 1), LINESTRING (0 1,2 3,4 5), точке (6) 6)

Я могу получить данные из этой коллекции геометрии несколькими способами.

SELECT geoCollectionField FROM myTable;

дает полную GEOMETRYCOLLECTION (POINT (1 1), ... LINESTRING

ВЫБОР AsText (GeometryN (geoCollectionField, 1)) ОТ MyTable;

дает индексированную геометрию класс POINT (1 1).

Я не смог написать SELECT, который выбирает только один тип класса, например классы POINT, в конечном итоге с POINT ((1 1), (6 6)).

Любые мысли?

ответ

0

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

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

После этих шагов приведет к

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

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

многоточечной результат может выглядеть следующим образом:

MULTIPOINT((1 1), (6 6)) 
Смежные вопросы