Allegrograph Geospatial Prolog Queries

与世无争的帅哥 提交于 2019-12-13 14:29:44

问题


I have some triples that represent the locations of several cities. I want to be able to fire off a Prolog query like

(select (?x ?y ?dist) 
(q- ?x !exns:geolocation ?locx)
(q- ?y !exns:geolocation ?locy)
(geo-distance ?locx ?locy ?dist))

but I get this error:

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

I'd like to understand how to use the geospatial reasoning methods like geo-distance (I assumed it was built-in because they use it here. Is this not true though?) in a Prolog query, because this is currently a mystery to me and I haven't found any good examples for doing this.

I am using the Python API, BTW, and in the Python API tutorial they use the getStatements method to retrieve triples within a circle of some radius. I want to be able to do this kind of thing in a Prolog query, and from the Python API, not from AllegroCL--I'd like to build web apps and I don't know how to do that in AllegroCL, but I do know how in Python.


回答1:


It's not possible to make geospatial Prolog queries from the Python API. You have to use the Allegro Common Lisp IDE to do this.

EDIT: Not So!

With AllegroGraph 4.6 you can do this! The problem was that I was using AllegroGraph 3.3, so I'm an idiot.

Here's a Prolog rule that works from the Python API using AllegroGraph 4.6:

(<-- (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))))

Special thanks to the folks at Franz Allegro support for helping me!



来源:https://stackoverflow.com/questions/10588865/allegrograph-geospatial-prolog-queries

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!