我一直在从事一个为用户存储位置的Web项目.该项目当前使用MySql 5.5和JPA 2来映射关系数据库,并使用EJB 3.1作为中间层.我在MysqL的Decimal数据类型中存储经度和纬度数据.
我想扩展项目,以便用户可以在他/她在地图上标记出的位置附近搜索点(GPS坐标)(通过使用Google Map API 3).
在开始转换或更改项目中的组件之前,我需要一些提示和建议.如果可能,请提供教程以及如何实现更改以及使用哪些工具(库,开发工具等).这是我的问题.
>是否可以在MysqL中使用Spatial扩展(使用Point等数据类型)并将其映射到JPA 2支持的实体(例如datanucleus库,如果它们受JPA 2支持).重量轻,可以通过持久层自行持久保存.
>迁移到PostGIS和Postgres(似乎具有更好的空间支持)是否更好,因为它需要付出所有的痛苦和精力来更改数据库并改用休眠. Netbeans支持Hibernate,但是当尝试使用JDBC for PostGis时,我偶然发现了问题.如果我走这条路,需要一个好的教程来开始.
>使用已经就位的基础设施并计算距泌乳期A和哺乳期B的距离.类似于本文由Jan Philip Matuschek完成的方法
对不起,我将这些问题归类.
问候克里斯
解决方法:
如果您只有点位置,MysqL的Spatial扩展通常可以,但是如果您想在多边形中查找点(即按区域查询)或使用花式索引和搜索算法,则它会变得不知所措.有一个really good cross comparison帮助显示不同空间DB之间的差异.
我会看到迁移到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_Distance和ST_Distance_Spheroid.