以下为地图工具代码:
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;
}
}