【问题标题】:Allegrograph Geospatial Prolog QueriesAllegrograph 地理空间 Prolog 查询
【发布时间】:2012-05-14 18:21:28
【问题描述】:

我有一些代表几个城市位置的三元组。我希望能够触发像

这样的 Prolog 查询
(select (?x ?y ?dist) 
(q- ?x !exns:geolocation ?locx)
(q- ?y !exns:geolocation ?locy)
(geo-distance ?locx ?locy ?dist))

但我收到此错误:

Server returned 400: attempt to call '#:geo-distance/3' which is an undefined function.

我想了解如何在 Prolog 查询中使用地理空间推理方法,例如 geo-distance(我认为它是内置的,因为他们使用它 here。但这不是真的吗?),因为这目前对我来说是一个谜,我还没有找到任何这样做的好例子。

我正在使用 Python API,顺便说一句,在 Python API tutorial 中,他们使用 getStatements 方法在某个半径的圆内检索三元组。我希望能够在 Prolog 查询中通过 Python API 而非 AllegroCL 执行此类操作——我想构建 Web 应用程序,但我不知道如何在 AllegroCL 中执行此操作,但我知道如何在 Python 中使用。

【问题讨论】:

  • 原来 geo-distance 不是一个内置函数,但它可以在 AllegroCL 中像这样定义:(<-- (geo-distance ?point1 ?point2 ?dist) (lisp ?dist (let (lon1 lat1 lon2 lat2) (setf (values lon1 lat1) (upi->longitude-latitude ?point1)) (setf (values lon2 lat2) (upi->longitude-latitude ?point2)) (haversine-miles lon1 lat1 lon2 lat2)))) 但是,这个定义不能使用 Python API 中的 addRules,因为它不会让你做 (lisp) 转义。

标签: prolog geospatial semantic-web allegrograph


【解决方案1】:

无法从 Python API 进行地理空间 Prolog 查询。您必须使用 Allegro Common Lisp IDE 来执行此操作。

编辑:不是这样!

使用 AllegroGraph 4.6,您可以做到这一点!问题是我使用的是 AllegroGraph 3.3,所以我是个白痴。

这是一个使用 AllegroGraph 4.6 从 Python API 工作的 Prolog 规则:

(<-- (geo-distance ?point1 ?point2 ?dist)
      (lisp ?dist (let (lon1 lat1 lon2 lat2)
           (setf (values lon1 lat1) (upi->longitude-latitude ?point1))
           (setf (values lon2 lat2) (upi->longitude-latitude ?point2))
           (haversine-miles lon1 lat1 lon2 lat2))))

特别感谢 Franz Allegro 的人们对我的帮助!

【讨论】:

    猜你喜欢
    • 2015-06-07
    • 2013-09-25
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多