构建地理空间查询REST API

时间:2011-05-26 05:40:29

标签: django rest geospatial geodjango django-piston

我正在尝试构建一个iOS应用程序,它接受用户的位置,然后通过REST api查询后端为他/她附近的其他用户。我做了一些谷歌搜索,我的选择(根据我的经验)似乎是。

  • Django - 活塞与geodjango.Hosting on webfaction可能。
  • Google App Engine。

我更倾向于第一选择,因为谷歌应用引擎似乎不是那么开放,并且在开始时有一个陡峭的学习曲线。

现在在mysql数据库上进行位置查询似乎是令人生畏的。我的直觉是必须有更好的东西。我不想重新发明轮子!

任何人都可以请点亮

  • 我究竟要如何进行位置查询?...边界重叠或更好的东西?
  • 我应该使用什么数据库?...非关系数据库或关系数据库?
  • 如果关系......应该按位置索引数据库吗?
  • 位置数据是应该存储在单独的表中还是与其他用户数据存储在同一个表中?
  • 我应该使用时间戳来使旧的位置更新无效,还是有更好的方法来做到这一点?(例如,数据库本身可以周期性地删除位置更新)。

到目前为止,我一直是iOS开发人员,在构建网络应用程序方面经验很少。我们非常感谢任何建议。

如果有人问过类似的问题,请随时指出。

提前致谢。   - samyzee!

1 个答案:

答案 0 :(得分:2)

我担心你会问太多和一般性问题以获得有用的答案。我会试试:

如果你想做非常简单的地理空间的东西,试着坚持使用边界框。适合这个问题的最简单的技术非常值得探索。但是,您很快就会发现需要更多......

如果您想使用geodjango,请使用PostGIS数据库并忘记非关系数据库。你将开发一个后端,它对非webapp程序员有一个陡峭的学习曲线。从geodjango教程开始,逐步开发一个您熟悉的技术堆栈(使用geodjango可以轻松完成REST服务)。

选择非关系数据库的原因是特定于用例(您希望存储文档,图形,或者您不希望使用预定义的模式)或者需要进行扩展(同时读取和写入很多内容)大量数据,因此使用多个节点等)。如果你是一个非网络应用程序程序员,请雇用一个有经验的人(可以做一些'软件架构')来帮助你走上这条道路。

  
      
  • 位置数据是否应存储在单独的表或同一表中   作为其他用户数据?
  •   
  • 我应该使用时间戳来使旧的位置更新失效吗?   有更好的方法   那个?(例如数据库可以   本身peridically删除位置   更新)。
  •   

询问做过任何数据库设计的人来帮助您。到目前为止的问题描述中,您可以使用两个表:User(id, name)表和UserLocation(id, timestamp, user_id, xCoordinate, yCoordinate)表。为每个为用户获取的样本添加UserLocation行。您可以稍后设计(和更改)解释UserLocation表的规则,例如:

  • 最新的UserLocation是有效的
  • 如果时间戳超过4小时,则无法使用

从你的提问线来看,你觉得自己有点偏离联盟。但是,如果您坚持使用简单的技术并以务实的方式工作,那么您可以使您的服务正常运行。为什么不从mysql + php和边界查询开始?一旦你完成其他一切工作,就把它交换成别的东西吗?