0

皆さんこんにちは、良いお年をお迎えください!! 私はStSparql/Geosparql エンドポイントを使用しており、湖と川のジオメトリを持つ空間データセットを持っています私の目標は、互いに交差するすべての湖と川を見つけて地図上に表示することです。次のような簡単なことを試しました。

 SELECT ?s1 ?s2
WHERE 
{
?s1 geo:hasGeometry [ geo:asWKT ?o1 ] .
?s2 geo:hasGeometry [ geo:asWKT ?o2 ] .
FILTER(geof:sfIntersects(?o1, ?o2)).
} 

または、より正確には、次のようなより正確なもの:

PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX geor: <http://www.opengis.net/def/rule/geosparql/>
PREFIX strdf: <http://strdf.di.uoa.gr/ontology#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>>
PREFIX gag: <http://geo.linkedopendata.gr/gag/ontology/>
PREFIX water: <http://geo.linkedopendata.gr/water-bodies/ontology/>

    SELECT (geof:intersection(?river,geof:union(?lake)) AS ?TotalArea)
    WHERE
    {
    
      ?r  rdf:type water:Ποτάμι.
      ?r  water:είναι_το_υδάτινο_σώμα ?o.
      ?o  water:έχει_όνομα ?k.
      ?o  geo:hasGeometry ?rg.
      ?rg geo:asWKT ?river.
    
      ?l  rdf:type water:Λίμνη.
      ?l  water:είναι_το_υδάτινο_σώμα ?z.
      ?z  geo:hasGeometry ?lg.
      ?lg geo:asWKT ?lake.
    
    FILTER(geof:sfIntersects(?river ,?lake ))
    }

また、geof:buffer を ?river または ?lake に配置しようとしましたが、交差する川と湖の領域全体を取り戻すことができず、代わりに次のエラーが発生します。

org.openrdf.sail.rdbms.exceptions.RdbmsQueryEvaluationException: org.postgresql.util.PSQLException: エラー: GEOSIntersects: TopologyException: 側の場所の競合22.958592013338393 40.590552060768502 SELECT έ2.obj, l_k.value, NULL , NULL FROM triples_1 t0 内部結合 triples_6 ε1 ON (ε1.subj = t0.subj) INNER JOIN triples_19 (h3.subj = ε1.obj) INNER JOIN aswkt_26 a4 ON (a4.subj = h3.obj) INNER JOIN geo_values l_river ON (l_river.id = a4.obj) INNER JOIN geo_values l_lake ON ((ST_Intersects(l_river.strdfgeo, l_lake.strdfgeo))) 内部結合 aswkt_26 a6 オン (a6.obj = l_lake.id) 内部結合 hasgeometry_12 h7 オン (h7.obj = a6.subj) 内部結合 triples_6 ε8 オン (ε8.obj = h7.subj) 内部結合triples_1 t9 ON (t9.obj = ? AND t9.subj = ε8.subj) LEFT JOIN label_values l_k ON (l_k.id = έ2.obj) WHERE t0.obj = ?

私は多くのことを変更しましたが、エラーは解決せず、毎回私が投稿したものとほぼ同じです. geof:sfTouches や geof:sfContains などのさまざまな機能も試しましたが、なぜ機能しないのか理解できません...誰かアイデアはありますか??

4

0 に答える 0