如何实现基于地理的数据存储和计算?

Posted

技术标签:

【中文标题】如何实现基于地理的数据存储和计算?【英文标题】:How to implement geo-based data store and computation? 【发布时间】:2011-02-25 20:05:29 【问题描述】:

好吧,让我简单解释一下:

1.我想建立一个提供基于位置服务的网站,例如http://fireeagle.yahoo.net/。

2.我猜这些服务大多与经度和纬度有关。

3.是否有任何特定的数据库/数据存储/数据结构非常适合此类应用程序?我的意思是易于存储经度、纬度和易于计算或易于使用。

我是新手,欢迎任何反馈

【问题讨论】:

【参考方案1】:

关系数据库系统的空间扩展提供地理/几何数据类型的存储和索引访问。它们允许您执行空间连接和各种空间查询。简而言之,它们正是您所需要的。

如果您使用的是开源堆栈,我会推荐 PostGIS,它是 Postgresql 的空间扩展。如果您使用的是 MS 堆栈,请尝试 spatial extensions to SQL Server 2008。

【讨论】:

关于开源栈这个话题,mysql也有地理空间支持-dev.mysql.com/doc/refman/5.0/en/gis-introduction.html【参考方案2】:

MySQL 有一个spatial extension 和教程here。获得快速查询的基本思想是设计具有空间索引列的表,R-tree 索引对于范围查询(例如“在此点附近给我点”)非常快。

当然,也有带有 PostGIS 的 Postgres,您可以从像 SimpleGeo 这样的公司购买这项服务。

【讨论】:

【参考方案3】:

我建议你考虑GeoDjango 它非常好,因为它融合了 Python/Django 的简单性和 PostGIS 的强大功能。但它也可能很复杂并提供太多功能,因此会浪费您的时间。

如果您没有特殊需求,还有另一种更简单的解决方案可以单独与 Django 或 Python 一起使用,即Geopy。虽然不向数据库添加空间扩展,但它允许您使用通用数据结构(也包括任何数据库)执行地理空间计算。您可以计算距离,进行(反向)地理编码。查看Getting Started 页面,也可以直接查看code,因为它有据可查。我将它用于动态拼车项目,效果很好。

这两种解决方案都非常适合 Django 框架,因此您可以轻松地围绕所提供的服务开发网站。

【讨论】:

以上是关于如何实现基于地理的数据存储和计算?的主要内容,如果未能解决你的问题,请参考以下文章

如何低成本实现数据库的存储计算分离?

Hadoop 和地理服务器

自研数据库CynosDB存储系统如何实现即时恢复

将经度和纬度数据存储在数据库中,并查询附近的记录

GIS等高线如何出数字

如何使用 SQL 查询将值传递给具有空间/地理数据类型的存储过程