1

pyorient を使用して Orientdb 2.2.17 で LUCENE Spatial クエリを使用する方法を理解しようとしています。

別のクラスのポリゴン頂点内にあるポイント頂点クラスのすべてのプロパティを選択する方法をまだ理解していません。これは問題を視覚的に表現したもので、ラベルは station_names を表しています。

Region Vertex クラスには 2 つのプロパティがあります。

  1. 名前
  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 つのプロパティを持つポイント頂点クラス:

  1. 駅名
  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 のポイントを取得することです。

どんな助けでも大歓迎です。

;)

ヨベル

4

0 に答える 0