pyorient を使用して Orientdb 2.2.17 で LUCENE Spatial クエリを使用する方法を理解しようとしています。
別のクラスのポリゴン頂点内にあるポイント頂点クラスのすべてのプロパティを選択する方法をまだ理解していません。
Region Vertex クラスには 2 つのプロパティがあります。
- 名前
座標 (EMBEDDED OPolygon) LUCENE インデックス
CREATE CLASS Region EXTENDS V
CREATE PROPERTY Region.name IF NOT EXISTS STRING
CREATE PROPERTY Region.coordinates IF NOT EXISTS EMBEDDED OPolygon
CREATE INDEX Region.coordinates ON Region(coordinates) SPATIAL ENGINE LUCENE
次の 2 つのプロパティを持つポイント頂点クラス:
- 駅名
座標 (EMBEDDED OPoint) LUCENE インデックス
CREATE CLASS Point EXTENDS V
CREATE PROPERTY Point.station_name IF NOT EXISTS STRING
CREATE PROPERTY Point.coordinates IF NOT EXISTS EMBEDDED OPoint
CREATE INDEX Point.coordinates ON Point(coordinates) SPATIAL ENGINE LUCENE
次に、リージョン ポリゴン ポイントを追加します。
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))")
ポイント頂点を追加する:
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)")
のようなものとそのバリエーションを試しましたが失敗しました。クエリの例を次に示します。
SELECT from Point WHERE ST_WITHIN(coordinates, ST_AsText(SELECT coordinates FROM Region where name='region01')) = true
次のエラーが発生しました。クエリでさまざまな方法を試しましたが、成功しませんでした。
クエリの解析エラー: SELECT from Point WHERE ST_WITHIN(coordinates, ST_AsText(SELECT 座標 FROM Region where name='region01')) = true ^ 行 1、列 25 で "" が検出されました。次のいずれかが予期されていました: DB name="envlay-デシベル」
予想される結果は、ポリゴンに含まれる station_name=0 のポイントを取得することです。
どんな助けでも大歓迎です。
;)
ヨベル