geof:buffer函数使用问题求助及可行查询示例请求
GeoSPARQL中
geof:buffer函数使用问题 我在构建使用geof:buffer的有效查询时遇到困难。geof:buffer的定义为:
该函数返回一个几何对象,代表所有与geom1的距离小于或等于指定单位半径的点。计算基于geom1的空间参考系统。
数据集信息
我的数据集是10km范围内的1000个1km正方形网格,ex:center为该范围的中心点,定义如下:
<center> geo:asWKT "<http://www.opengis.net/def/crs/OGC/1.3/CRS84> POINT(138.5763200 -34.9500700)" .
查询3结果集中的一个网格示例:
<box122> a geo:Geometry ; geo:asWKT "<http://www.opengis.net/def/crs/OGC/1.3/CRS84> POLYGON((138.5559465 -34.9582197, 138.5778899 -34.9582197, 138.5778899 -34.9402337, 138.5559465 -34.9402337, 138.5559465 -34.9582197))"^^geo:wktLiteral .
各查询情况
查询1:无结果返回(预期约37条)
我期望该查询返回与查询3一致的约37条结果,且?buffer为填充圆形(多边近似),但实际无结果:
PREFIX geof: <http://www.opengis.net/def/function/geosparql/> PREFIX geo: <http://www.opengis.net/ont/geosparql#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX uom: <http://www.opengis.net/def/uom/OGC/1.0/> PREFIX ex: <http://example.com/> select ?thing (geof:distance(?box,?center ,uom:metre) as ?distance) where { ?thing geo:asWKT ?box. ex:center geo:asWKT ?center. bind (geof:buffer(?center,1000,uom:metre) as ?buffer). FILTER(geof:sfOverlaps(?box, ?buffer)) } ORDER BY ?distance
查询2:验证?buffer未绑定
执行后返回1条结果;若将!bound改为bound则无结果,说明geof:buffer未成功生成缓冲区对象:
PREFIX geof: <http://www.opengis.net/def/function/geosparql/> PREFIX geo: <http://www.opengis.net/ont/geosparql#> PREFIX uom: <http://www.opengis.net/def/uom/OGC/1.0/> PREFIX ex: <http://example.com/> select ?center ?buffer where { ex:center geo:asWKT ?center. bind (geof:buffer(?center,1000,uom:metre) as ?buffer). FILTER (!bound(?buffer)) } ORDER BY ?distance
查询3:使用geof:distance得到预期结果
该查询返回了我期望的37条结果:
PREFIX geof: <http://www.opengis.net/def/function/geosparql/> PREFIX geo: <http://www.opengis.net/ont/geosparql#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX uom: <http://www.opengis.net/def/uom/OGC/1.0/> PREFIX ex: <http://example.com/> select ?thing (geof:distance(?box,?center ,uom:metre) as ?distance) where { ?thing geo:asWKT ?box. ex:center geo:asWKT ?center. FILTER (geof:distance(?box,?center ,uom:metre) < 1000) } ORDER BY ?distance
疑问与需求
- 若
geof:buffer确实可用,能否将?buffer与sf:overlaps谓词配合使用而非函数? - 最终我希望查询距离某点一定范围内的网格,但不想使用Filter(预计性能差,需遍历所有几何对象),希望用谓词查询以利用空间索引。
内容的提问来源于stack exchange,提问作者alanr
相关产品推荐
相关产品推荐

