1 億 5000 万のステートメントを持つトリプル ストアがあり、そのすべてにジオメトリが含まれています。現在、GraphDB トリプル ストアとその geosparql 拡張機能を使用しています。geosparql とフィルター クエリを組み合わせると、エンドポイントが奇妙なことを行っているだけです。GraphDB 側は、geosparql 拡張機能にいくつかの問題があることを確認しています。フィルタークエリと組み合わせた場合、一般的にgeosparqlクエリでこれが正常かどうか疑問に思っています。geosparql が (たとえば virtuoso で) はるかに高速である必要がある場合は、virtuoso に移行するだけです。そうでなければ、他の解決策を考え出す必要があるかもしれません。これは、別のより一般的な質問につながる可能性があります。地理データを扱う場合、空間クエリを実行する効率的な方法は何ですか?
パフォーマンスの問題の例を次に示します。
このクエリ (geosparql コンポーネントを含まない単なるフィルター クエリ) には 2 ~ 15 秒かかります (それでも非常に長い時間です)。
PREFIX geo-pos: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX sf: <http://www.opengis.net/def/sf#>
select ?a
WHERE {
?a :hasPrimaryName ?o .
FILTER (contains(?o,'Paris'))
}
このクエリ (GraphDB の geosparql 拡張機能を使用) は、制限の有無にかかわらず約 5 秒かかります。
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX geo-pos: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX omgeo: <http://www.ontotext.com/owlim/geo#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
select *
WHERE {
?a geo:hasGeometry ?aGeom .
?aGeom geo:asWKT ?aWKT .
FILTER (geof:sfWithin(?aWKT, '''<http://www.opengis.net/def/crs/OGC/1.3/CRS84> POLYGON((1.549072265625 49.468124067331644,3.31787109375 49.468124067331644,3.31787109375 48.436489955944154,1.549072265625 48.436489955944154,1.549072265625 49.468124067331644))'''^^geo:wktLiteral))
}
両方のクエリを組み合わせると、制限を使用するかどうかに関係なく (60 秒後に) タイムアウトになります。
PREFIX geo-pos: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX sf: <http://www.opengis.net/def/sf#>
select ?a
WHERE {
?a geo:hasGeometry ?aGeom .
?aGeom geo:asWKT ?aWKT .
FILTER (geof:sfWithin(?aWKT, '''<http://www.opengis.net/def/crs/OGC/1.3/CRS84> POLYGON((1.549072265625 49.468124067331644,3.31787109375 49.468124067331644,3.31787109375 48.436489955944154,1.549072265625 48.436489955944154,1.549072265625 49.468124067331644))'''^^geo:wktLiteral))
?a :hasPrimaryName ?o . FILTER (contains(?o,'Paris'))
}
通常、Web マップ インターフェイスのサーバーとしてトリプル ストアを使用し、Web マップで多くの空間クエリを実行しているため、geosparql クエリの効率は重要です。60 秒などのクエリ時間は受け入れられません。この状況を改善する方法はありますか?サーバー側 (geosparql クエリ) または Web マップ側 (javascript を使用しています) のどちらですか? ありがとう!