GeoSPARQL功能和空间参考系统(SRS)

时间:2019-03-08 09:44:25

标签: spatial graphdb geosparql

我试图在本体中表示一些几何对象(多边形线等),并计算其空间/拓扑关系,方法是采用 GeoSPARQL 相关功能( sfTouches sfEquals sfContains 等)。我正在使用启用了GeoSPARQL插件的GraphDB。

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

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

我的问题如下:“ 用默认类型以外的任何其他类型的CRS表示空间对象时,GeoSPARQL功能是否正常运行?”

先谢谢您。

2 个答案:

答案 0 :(得分:1)

当前,GDB在WKT文字中不支持替代CRS,但在GML文字中(发行GDB-3142)支持它们。 GML文字稍微复杂一点,但是仍然很容易生成,如果您需要帮助,请告诉我们。

但是,我质疑您关于您具有笛卡尔坐标的主张。一方面,任何一对(纬度,经度)或(无东西)均是笛卡尔坐标。另一方面,由于地球不是平坦的,所以任何CRS或投影方法都只是近似值,并且其中许多都针对特定位置进行了调整。

因此,请告诉我们您选择了哪种EPSG CRS,以及有关数据本地性的信息。

答案 1 :(得分: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,whchc给出了有关gml:Point的示例。
  • 然后用Google搜索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.
  • """(长引号)使我们可以在文字中使用"而不引用
  • 用您选择的更好的CRS代替TODO
  • 文档http://graphdb.ontotext.com/documentation/master/enterprise/geosparql-support.html#geosparql-examples提供了一个与您相似的示例,但是它有点作弊,因为所有坐标都在(-90,+ 90)范围内,因此它只能使用WGS。
  • 在使用geof:拓扑函数进行调试之后,请打开索引并切换到geo:谓词,因为这些函数很慢(它们会相互检查每个几何图形),而谓词则使用特殊的地理索引

让我知道怎么回事!