以下为地图工具代码:
import java.text.DecimalFormat; /** * 地图工具类 * * @author licd * */ public class MapUtil { private final static double PI = 3.14159265358979323; // 圆周率 private final static double R = 6371229; // 地球的半径 private final static double DEFAULT_LONGT = 116.390471;// 默认经度 private final static double DEFAULT_LAT = 39.861012;// 默认纬度 private final static DecimalFormat DOUBLE_FORMAT = new DecimalFormat("#.000000");//经度默认格式 public final static int NEARBY_DISTANCE = 1000;//附近的距离 public final static int STIPULATE_DISTANCE = 1000;//附近规定的距离 /** * 获取坐标距离(米) * * @param longt1 * 起始经度 * @param lat1 * 起始纬度 * @param longt2 * 目地地经度 * @param lat2 * 目的地纬度 * @return */ public static int getDistance(double longt1, double lat1, double longt2, double lat2) { double x, y, distance; x = (longt2 - longt1) * PI * R * Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180; y = (lat2 - lat1) * PI * R / 180; distance = Math.hypot(x, y); return (int) (distance + 0.5); } /** * 将String经度转换成Double * * @param longitude * @return */ public static double getLongitude(String longitude) { if (!Utility.isStrNotNull(longitude)) { return DEFAULT_LONGT; } if (longitude.length() > 10) { longitude = longitude.substring(0, 10); } return Utility.toDouble(longitude, DEFAULT_LONGT); } /** * 将String纬度转换成Double * * @param latitude * @return */ public static double getLatitude(String latitude) { if (!Utility.isStrNotNull(latitude)) { return DEFAULT_LAT; } if (latitude.length() > 10) { latitude = latitude.substring(0, 10); } return Utility.toDouble(latitude, DEFAULT_LAT); } /** * 根据距离返回,经纬度范围 返回顺序 minLat,minLng,maxLat,maxLng * * @param lat * @param lon * @param raidus * @return */ public static double[] getAround(double lat, double lon, int raidus) { try { Double latitude = lat; Double longitude = lon; Double degree = (24901 * 1609) / 360.0; double raidusMile = raidus; Double dpmLat = 1 / degree; Double radiusLat = dpmLat * raidusMile; Double minLat = latitude - radiusLat; Double maxLat = latitude + radiusLat; Double mpdLng = degree * Math.cos(latitude * (PI / 180)); Double dpmLng = 1 / mpdLng; Double radiusLng = dpmLng * raidusMile; Double minLng = longitude - radiusLng; Double maxLng = longitude + radiusLng; // 格式化 minLat = Double.parseDouble(DOUBLE_FORMAT.format(minLat)); minLng = Double.parseDouble(DOUBLE_FORMAT.format(minLng)); maxLat = Double.parseDouble(DOUBLE_FORMAT.format(maxLat)); maxLng = Double.parseDouble(DOUBLE_FORMAT.format(maxLng)); return new double[] { minLat, minLng, maxLat, maxLng }; } catch (NumberFormatException e) { } return null; } /** * 判断是否超出规定距离范围 * * @param longt1 * 起始经度 * @param lat1 * 起始纬度 * @param longt2 * 目地地经度 * @param lat2 * 目的地纬度 * @return */ public static boolean isOutOfRange(double longt1, double lat1, double longt2, double lat2) { int distance = getDistance(longt1, lat1, longt2, lat2); if(distance > STIPULATE_DISTANCE){ return Boolean.TRUE; } return Boolean.FALSE; } }