Как использовать сохраненную геометрию в пространственных функциях?

Я пытался оценить использование OrientDB для наших пространственных данных. Я использую следующую версию:

OrientDB: orientdb-community-2.2.0-20160217.214325-39

OrientDB-Spatial: JAR, созданный из ветки разработки операционной системы github Repo:

Win7 64 бит

Прямо сейчас я должен был сделать, если у меня есть многоугольники, хранящиеся в базе данных, а входные данные - это местоположение (широта и долгота), тогда мне нужно получить многоугольник, который содержит это местоположение.

Я создал класс для хранения полигонов состояния следующим образом:

CREATE class state
CREATE PROPERTY state.name STRING
CREATE PROPERTY state.shape EMBEDDED OPolygon   

Я вставил состояние с помощью следующей команды:

INSERT INTO state SET name = 'Center', shape = ST_GeomFromText('POLYGON((77.16796875 26.068502530912397,75.7177734375 21.076171072527064,81.650390625 19.012137871930328,82.9248046875 25.196864372861896,77.16796875 26.068502530912397))')

Я пробовал несколько способов получить состояние, которое содержит заданный latlong, но все они дают ошибку.

Даже такое простое, как:

SELECT from state WHERE ST_Contains(shape, ST_GeomFromText('POINT(77.420654296875 23.23929558106523)'))

Выдает следующую ошибку:

com.orientechnologies.orient.core.sql.OCommandSQLParsingException: Ошибка при выполнении команды синтаксического анализа в позиции № 0: Ошибка синтаксического анализа запроса: ВЫБРАТЬ из состояния WHERE ST_Contains (shape, ST_GeomFromText ('POINT (77.420654296875 23.23929558106523)') строка 1 Обнаружено 1 , столбец 25. Ожидалось одно из: Storage URL = "plocal: E: /DevTools/OrientDB2.2_new/databases/spatial" Storage URL = "plocal: E: /DevTools/OrientDB2.2_new/databases/spatial" -> com.orientechnologies.orient.core.sql.OCommandSQLParsingException: обнаружено "" в строке 1, столбце 25. Ожидалось одно из: URL-адрес хранилища = "plocal: E: /DevTools/OrientDB2.2_new/databases/spatial"

Я могу запускать все пространственные функции, когда я ввожу геометрию непосредственно в пространственную функцию, например:

Select ST_Contains(ST_geomFromText('POLYGON((77.16796875 26.068502530912397,75.7177734375 21.076171072527064,81.650390625 19.012137871930328,82.9248046875 25.196864372861896,77.16796875 26.068502530912397))'), ST_GeomFromText('POINT(77.420654296875 23.23929558106523)'))

Я просто не могу понять, как заставить эту функцию работать с фигурами, которые хранятся как свойства в записях.

Как геометрии, которые хранятся, использоваться в этих пространственных функциях? Есть ли другой синтаксис для этого?


person Devdatta Tengshe    schedule 19.02.2016    source источник


Ответы (1)


попробуй это

SELECT from state WHERE ST_Contains(shape, ST_GeomFromText('POINT(77.420654296875 23.23929558106523)')) = true

Синтаксис с функцией where () пока не поддерживается

person wolf4ood    schedule 19.02.2016