问题
I am trying to understand how to use the LUCENE Spatial queries in Orientdb 2.2.17 using pyorient.
I have note yet figure it out how to select all the properties of a point vertex class that is within a polygon vertex from another class.
Region Vertex Class has two properties:
- name
coordinates (EMBEDDED OPolygon) LUCENE index
CREATE CLASS Region EXTENDS VCREATE PROPERTY Region.name IF NOT EXISTS STRINGCREATE PROPERTY Region.coordinates IF NOT EXISTS EMBEDDED OPolygonCREATE INDEX Region.coordinates ON Region(coordinates) SPATIAL ENGINE LUCENE
Points vertex class, also with two properties:
- station_name
coordinates (EMBEDDED OPoint) LUCENE index
CREATE CLASS Point EXTENDS VCREATE PROPERTY Point.station_name IF NOT EXISTS STRINGCREATE PROPERTY Point.coordinates IF NOT EXISTS EMBEDDED OPointCREATE INDEX Point.coordinates ON Point(coordinates) SPATIAL ENGINE LUCENE
Now, addding region polygon points:
INSERT INTO Region SET name = 'region01', coordinates = St_GeomFromText("POLYGON ((13.178784796476098 59.058001210852922,14.161006039084404 59.058001210852922,14.176596852459138 58.122552408368826,13.178784796476098 58.122552408368826,13.178784796476098 59.058001210852922))")
Adding the Points vertex:
INSERT INTO Point SET station_name = 0, coordinates = st_GeomFromText("POINT (13.459419437221328 58.808548196857167)")
INSERT INTO Point SET station_name = 1, coordinates = st_GeomFromText("POINT (14.332504986206489 58.605867622985606)")
INSERT INTO Point SET station_name = 2, coordinates = st_GeomFromText("POINT (13.724463264591824 57.779554514124655)")
INSERT INTO Point SET station_name = 3, coordinates = st_GeomFromText("POINT (12.617515514985637 58.66823087648455)")
I tried with something like and its variations but failed, here is the query example:
SELECT from Point WHERE ST_WITHIN(coordinates, ST_AsText(SELECT coordinates FROM Region where name='region01')) = true
I got the following error, I have tried different ways on the query without success.
Error parsing query: SELECT from Point WHERE ST_WITHIN(coordinates, ST_AsText(SELECT coordinates FROM Region where name='region01')) = true ^ Encountered "" at line 1, column 25. Was expecting one of: DB name="envlay-db"
The expected result is to retrieve the point with station_name=0 that is contained by the polygon.
Any help would be most appreciated.
;)
Jobel
来源:https://stackoverflow.com/questions/43861961/how-to-make-a-st-spatial-query-st-within-orientdb-by-selecting-spatial-classes