我试图通过采用GeoSPARQL相关函数(sfTouches,sfEquals,sfContains等)在本体中表示几个几何对象(多边形,线,点等)并计算它们的空间/拓扑关系。我正在使用GraphDB,并启用了GeoSPARQL插件。
我已经看到,在几何对象的WKT representation中,GeoSPARQL使用默认空间参考系统的概念(即<http://www.opengis.net/def/crs/OGC/1.3/CRS84> URI,其对应于WGS84坐标参考系统(CRS))。但是,在我的用例中,几何对象的坐标实际上对应于2D笛卡尔坐标系中的值。
我在EPSG Geodetic Parameter Registry中找到了用于表示笛卡尔坐标的正确CRS,并在WKT表示中附加了正确的URI,但GeoSPARQL函数不返回任何结果或错误。
我的问题如下:“在表示任何其他类型的CRS中的空间对象时,GeoSPARQL函数是否正常运行,除了默认值?”。
先感谢您。
目前GDB不支持WKT文字中的替代CRS,但在GML文字中支持它们(问题GDB-3142)。 GML文字稍微复杂一些,但仍然很容易生成,如果您需要帮助,请告诉我们。
但是,我质疑你有关于笛卡尔坐标的断言。一方面,任何一对(纬度,长度)或(无,东)都是笛卡尔坐标。另一方面,由于地球不是平坦的,任何CRS或投影方法只是近似值,并且其中许多方法针对特定地点进行了调整。
所以请告诉我们您选择的EPSG CRS,以及您的数据的位置。
您的示例,稍微重新格式化,并使用正常的海龟缩短:
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:
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
geof:
拓扑函数进行调试之后,打开索引并切换到geo:
谓词,因为函数很慢(它们会相互检查每个几何),而谓词使用特殊的地理索引让我知道事情的后续!