0

我试图通过采用GeoSPARQL相关函数(sfTouchessfEqualssfContains等)在本体中表示一些几何对象(多边形线等)并计算它们的空间/拓扑关系。我正在使用 GraphDB,启用了 GeoSPARQL 插件。

我已经看到,在几何对象的WKT 表示中,GeoSPARQL 使用了默认空间参考系统的概念(即对应的 < http://www.opengis.net/def/crs/OGC/1.3/CRS84 > URI到WGS84坐标参考系统 ( CRS ))。但是,在我的用例中,几何对象的坐标实际上对应于二维笛卡尔坐标系中的值。

我在EPSG Geodetic Parameter Registry中找到了表示笛卡尔坐标的正确 CRS,并在 WKT 表示中附加了正确的 URI,但 GeoSPARQL 函数不返回任何结果或错误。

我的问题如下:“在任何其他类型的 CRS 中表示空间对象时,GeoSPARQL 函数是否正常运行,除了默认的吗? ”。

先感谢您。

4

2 回答 2

1

目前 GDB 不支持 WKT 文字中的替代 CRS,但支持 GML 文字中的替代 CRS(问题 GDB-3142)。GML 文字稍微复杂一些,但仍然很容易生成,如果您需要帮助,请告诉我们。

但是,我质疑你的断言,你有笛卡尔坐标。一方面,任何对 (lat,long) 或 (nothing,easting) 都是笛卡尔坐标。另一方面,由于地球不是平坦的,任何 CRS 或投影方法都只是一个近似值,其中许多是针对特定地点进行调整的。

所以请告诉我们您选择了哪个 EPSG CRS,以及您的数据的位置。

于 2019-03-10T11:50:48.513 回答
0

你的例子,稍微重新格式化,并使用正常的海龟缩短:

ex:polygon_ABCD rdf:type ex:ExampleEntity ;
  geo:hasGeometry ex:geometry_polygon_ABCD .

ex:geometry_polygon_ABCD a geo:Geometry, sf:Polygon ;
  geo:asWKT "<opengis.net/def/cs/EPSG/0/4499> Polygon((389.0 1052.0, 563.0 1052.0, 563.0 1280.0, 389.0 1280.0, 389.0 1052.0))"^^geo:wktLiteral .

ex:point_E rdf:type ex:ExampleEntity ; 
  geo:hasGeometry ex:geometry_point_E . 

ex:geometry_point_E a geo:Geometry, sf:Point ;
  geo:asWKT "<opengis.net/def/cs/EPSG/0/4499> Point(400.0 1100.0)"^^geo:wktLiteral ; .

您必须为 CRS 使用特定的 URL 并且不能省略http:,因此正确的 URL 是http://www.opengis.net/def/crs/EPSG/0/4499

但是从返回的描述中可以看出,这个CRS适用于“中国——120°E到126°E之间的陆上和海上”。我不是地理投影方面的专家,所以我不能保证这个 CRS 是否会满足您的需求“别管我的坐标,它们只是米”。我会寻找具有东向和北向坐标的英国(OrdnanceSurvey)CRS。

要了解如何格式化 GML:

  • 请参阅 GeoSPARQL 规范 (OGC 11-052r4) p18,其中给出了一个关于gml:Point.
  • 然后谷歌搜索gml:Polygon。有很多链接,但提供示例的链接是http://www.georss.org/gml.html

有了这些知识,我们可以将您的示例重新格式化为 GML:

ex:polygon_ABCD rdf:type ex:ExampleEntity ;
  geo:hasGeometry ex:geometry_polygon_ABCD .

ex:geometry_polygon_ABCD a geo:Geometry, sf:Polygon ;
  geo:asGML """
      <gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="http://www.opengis.net/def/crs/EPSG/0/TODO">
         <gml:exterior>
            <gml:LinearRing>
               <gml:posList>
389.0 1052.0, 563.0 1052.0, 563.0 1280.0, 389.0 1280.0, 389.0 1052.0
               </gml:posList>
            </gml:LinearRing>
         </gml:exterior>
      </gml:Polygon>
"""^^geo:gmlLiteral.

ex:point_E rdf:type ex:ExampleEntity ; 
  geo:hasGeometry ex:geometry_point_E . 

ex:geometry_point_E a geo:Geometry, sf:Point ;
  geo:asGML """
      <gml:Point xmlns:gml="http://www.opengis.net/gml" srsName="http://www.opengis.net/def/crs/EPSG/0/TODO">
        <gml:pos>
      400.0 1100.0
        </gml:pos>  
      </gml:Point>
"""^^geo:gmlLiteral.
  • """长引号)允许我们"在文字内部使用而不引用
  • 替换TODO为您选择的更好的 CRS
  • 文档http://graphdb.ontotext.com/documentation/master/enterprise/geosparql-support.html#geosparql-examples给出了一个类似于你的例子,但它有点作弊,因为所有坐标都在范围内(-90,+ 90)所以它可以只使用WGS。
  • 在使用geof:拓扑函数进行调试后,打开索引并切换到geo:谓词,因为这些函数很慢(它们检查每个几何体),而谓词使用特殊的地理索引

让我知道事情的后续!

于 2019-03-20T13:02:48.760 回答