1

空間SQLクエリを使用して、Spatialiteの特定のポイントに最も近い機能を取得したいと思います。インデックステーブルを使ってスピードアップしたいのですが。空間インデックスの境界は、定義されたポイントと指定された許容値から計算する必要があります。クエリでは、rtreeバウンディングボックス内に完全に/部分的に含まれるすべての機能を使用する必要があります。

私はいくつかの方法を試しましたが、空間インデックスの境界に常に問題がありました。

このような:

SELECT *、Distance(GeomFromText('POINT(19.02658 47.51574)')、mo_utak_polyline.Geometry)as distance FROM mo_utak_polyline WHERE ROWID IN(SELECT pkid FROM idx_mo_utak_polyline_Geometry WHERE xmin> 19.01408 AND xmax <19.03908 AND ymin> 47.50324 AND ymax距離<=0.0025)距離による順序

またはこれ:

SELECT *、Intersects(GeomFromText('POINT(19.02658 47.51574)')、megyehatar_region.Geometry)as crosses FROM megyehatar_region WHERE ROWID IN(SELECT pkid FROM idx_megyehatar_region_Geometry WHERE xmin> 14.02658 AND xmax <24.02658 AND ymin> 42.51574 AND交差する=1

インデックスで定義されたバウンディングボックスに完全に含まれている機能をいつでも取得できます。これは私にとって大きな問題を引き起こします。たとえば、線の特徴をクエリしようとすると、長さがまったく異なる場合、1cmまたは1000kmになる可能性があるため、空間インデックスの境界ボックスのサイズを設定するのは困難です。

あなたはそれをするための最良の方法はどれだと思いますか?

クエリのこの部分を変更する方法

SELECT pkid FROM idx_mo_utak_polyline_Geometry WHERE xmin> 19.01408 AND xmax <19.03908 AND ymin> 47.50324 AND ymax <47.52824)

バウンディングボックスに含まれている機能だけでなく、境界ボックスと交差している機能も返すには?

前もって感謝します!

4

4 に答える 4

0

intersectsを実行できるよりも、インデックスへの最初のクエリを作成し、さらに良いことに、インデックス付きクエリから取得したジオメトリまでの距離 == 0を作成します。

ポイント座標 - X、Y

    SELECT * FROM table 
        WHERE pk_uid IN (SELECT pkid FROM idx_table_geometry 
                         WHERE xmin < X AND ymin < Y AND xmax > X AND ymax > Y) 
              AND distance( makepoint(X,Y), geometry ) == 0
于 2013-09-04T15:53:46.567 に答える
0

以下はどうでしょう。

SELECT count(*) FROM idx_mo_utak_polyline_Geometry WHERE 
MBRContains(BuildMBR('19.01408','47.50324' , '19.03908', '47.52824'), BuildMBR(xmin,ymin , xmax, ymax)) OR
MBRIntersects(BuildMBR('19.01408','47.50324' , '19.03908', '47.52824'), BuildMBR(xmin,ymin , xmax, ymax)) 
于 2012-02-13T09:27:47.097 に答える