Я пытался оценить использование 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)'))
Я просто не могу понять, как заставить эту функцию работать с фигурами, которые хранятся как свойства в записях.
Как геометрии, которые хранятся, использоваться в этих пространственных функциях? Есть ли другой синтаксис для этого?