引入依赖
<!-- https://mvnrepository.com/artifact/org.locationtech.spatial4j/spatial4j -->
<dependency>
<groupId>org.locationtech.spatial4j</groupId>
<artifactId>spatial4j</artifactId>
<version>0.7</version>
</dependency>
java实例
double lon = 116.312528, lat = 39.983733; // 经纬度
int radius = 5; // 千米
SpatialContext geo = SpatialContext.GEO;
Rectangle rectangle = geo.getDistCalc().calcBoxByDistFromPt(geo.makePoint(lon, lat), radius * DistanceUtils.KM_TO_DEG, geo, null);
System.out.println(rectangle.getMinX() + " - " + rectangle.getMaxX()); // 经度范围 116.25384300580865 - 116.37121299419135
System.out.println(rectangle.getMinY() + " - " + rectangle.getMaxY()); // 纬度范围 39.93876698161192 - 40.02869901838808
传参给sql语句,获取5公里以内的数据
SELECT id, name FROM customer
WHERE (lon BETWEEN ? AND ?) AND (lat BETWEEN ? AND ?);
为了提升查找速度,可以建立索引
INDEX `idx_lon_lat` (`lon`, `lat`)