【问题标题】:What database and java library to use for Spatial Analysis?用于空间分析的数据库和 java 库?
【发布时间】:2012-05-08 12:43:49
【问题描述】:

我一直致力于为用户存储位置的网络项目。该项目目前使用 MySql 5.5 和 JPA 2 来映射关系数据库,并使用 EJB 3.1 作为中间层。我在 MySql 中以 Decimal 数据类型存储经度和纬度数据。

我想扩展项目,以便用户可以在地图上搜索他/她标记的位置附近的点(GPS 坐标)(通过使用 Google Map API 3)。

在开始转换或更改项目中的组件之前,我需要一些提示和建议。如果可能,请提供教程以及如何实现更改以及使用哪些工具(库、开发工具等)。这是我的问题。

  1. 我能否在 MySql 中使用 Spatial 扩展(使用 Point 等数据类型)并将其映射到 JPA 2 支持的实体(如 DataNucleus 库,如果 JPA 2 支持的话)。重量轻,可以通过持久层自行持久化。
  2. 迁移到 PostGIS 和 Postgres(它们似乎有更好的空间支持)是否会更好,因为更改数据库和使用 hibernate 需要付出所有的痛苦和努力。 Netbeans 具有 Hibernate 支持,但是在尝试使用 JDBC for PostGis 时,我偶然发现了一些问题。如果我走这条路,需要一个很好的教程才能开始。
  3. 使用已经就位的基础设施并计算与哺乳期 A 和 B 的距离。类似于 Jan Philip Matuschek 在本文中所做的方法

请原谅我对问题进行了聚类。 问候克里斯

【问题讨论】:

  • 我更加沉浸在其中。我现在所知道的是,我不仅需要空间分析。但我需要一个具有地理支持的数据库,而且我对纯笛卡尔计算不太感兴趣。由于我将收集的职位将在更大的区域范围内。 PostGIS支持WGS 84,功能不多。但它有我现在需要的一次。当我有一个工作原型时,我会报告。
  • 如果 MySQL 支持地理(大地)坐标,我还没有找到任何东西。
  • 我不知道 MySQL 对地理的支持,但这在 PostGIS 中都是可能的。 PostGIS 有一个“GISTree”索引,可让您索引您的地理(Oracle 中的 r-tree),从而实现更快的地理查询。您是否计划做“区域”(您可以使用纬度/经度定义多边形,然后搜索例如,哪些 DB 点位于该多边形中),或者您打算“最接近”或“距离该点 2 英里”?

标签: mysql hibernate postgresql jpa-2.0 postgis


【解决方案1】:

如果您只有点位置,MySQL 的 Spacial 扩展通常是可以的,但如果您想在多边形中查找点(即按区域查询),或者使用花哨的索引和搜索算法,它就会开始变得不堪重负。有一个really good cross comparison 可以帮助显示不同空间数据库之间的差异。

我发现迁移到 PostgreSQL 和 PostGIS 还有很多好处。还有更多的 GIS 应用程序可以天真地与 PostGIS 一起工作,例如 QGIS、Geoserver 等。 PostGIS 的最新版本有a KNN nearest neighbor search operator 可以快速查找,例如,从几百万行中找到最接近特定的 25 个点地图上的点(另请参阅here)。

有关 JDBC 和 PostGIS,请参阅 the manual。至于JPA,见PostGIS and JPA 2.0

距离计算见ST_DistanceST_Distance_Spheroid

【讨论】:

  • 我对 PostGIS 了解不多,但是关于 PostgreSQL 8.3 的比较已经过时了。
  • 肯定要进行比较刷新,尤其是现在 PostGIS 2.0 已经发布。该表的大部分内容仍然有效。值得注意的补充是 PostGIS 现在有一个 geography 类型(从 1.5 版开始)用于“真正的大地测量支持”。
  • 是的,我认为迁移到 postGIS 2 是一种好方法。由于我将在几个国家及其周边地区搜索位置,因此仅简单的笛卡尔计算是不够的。但我想到了 mongoDB,因为使用纯 Java 对象 (POJO) 似乎很容易。有没有人尝试过地理搜索(大地测量)在 mongoDB 中的位置?
  • MongoDB 中好像有geospatial indexing 支持,但我没有任何第一手经验。 “球形模型”看起来像是使用纬度/经度的线性距离的 OK 近似值。看起来它只使用 MBR 搜索,因此您无法可靠地进行详细的多边形点查询。
猜你喜欢
  • 1970-01-01
  • 2012-04-07
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多