3

我一直在开发一个为用户存储位置的网络项目。该项目目前使用 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在本文中所做的方式

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

4

1 回答 1

4

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

我会看到迁移到 PostgreSQL 和 PostGIS 有更多好处。还有更多的 GIS 应用程序可以天真地与 PostGIS 一起工作,例如 QGIS、Geoserver 等。最新版本的 PostGIS 有一个 KNN 最近邻搜索运算符,可以快速查找,例如几百万行中最近的 25 个点到地图上的特定点(另请参见此处)。

请参阅JDBC 和 PostGIS手册。至于 JPA,请参阅PostGIS 和 JPA 2.0

至于距离计算,请参阅ST_DistanceST_Distance_Spheroid

于 2012-05-10T20:19:10.370 回答