我一直在尝试评估OrientDB在空间数据中的使用。 我使用以下版本:
OrientDB:orientdb-community-2.2.0-20160217.214325-39
OrientDB-Spatial:从github Repo OS的develop分支构建的JAR:
Win7 64Bit
现在我要做的是,如果我有多边形存储在数据库中,输入是一个位置(纬度和经度),那么我需要得到包含该位置的多边形。
我创建了一个类来存储像这样的状态多边形:
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处的命令时出错:解析查询时出错:SELECT 来自州WHERE ST_Contains(形状, ST_GeomFromText(' POINT(77.420654296875 23.23929558106523)')) 遇到了#34;"在第1行,第25栏。期待其中一个:存储 URL =" plocal:E:/DevTools/OrientDB2.2_new/databases/spatial"存储 URL =" plocal:E:/DevTools/OrientDB2.2_new/databases/spatial" - > com.orientechnologies.orient.core.sql.OCommandSQLParsingException: 遇到了#34;"在第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)'))
我无法弄清楚如何让这些函数在存储为记录属性的形状上运行。
如何在这些空间函数中使用存储的几何图形?这样做还有其他一些语法吗?
答案 0 :(得分:2)
试试这个
SELECT from state WHERE ST_Contains(shape, ST_GeomFromText('POINT(77.420654296875 23.23929558106523)')) = true
不支持function()的语法