很多專網環境下無法像互聯網一樣直接使用各廠提供的經緯度和地址的互逆轉換,像gd或者bd等提供的離線轉換引擎大概價位在200w+。
他們的算法基于兩種,一是POI庫,二是瓦片定位。 poi庫的話其實是可以通過算法算出來的,然后經過長時間的處理轉換即可得到真實的庫信息,只不過時間漫長,不適合大多緊急性的業務,可以作為一個愛好進行嘗試,根據提供的偽代碼進行拼接嘗試。如果嫌太費事或者緊急使用可以找我發送源碼或POI點位庫
/**
*計算距離
*/
public static Double getmeter(double long1, double lat1, double long2, double lat2) {
try {
double a, b, d, sa2, sb2;
lat1 = rad(lat1);
lat2 = rad(lat2);
a = lat1 - lat2;
b = rad(long1 - long2);
sa2 = Math.sin(a / 2.0);
sb2 = Math.sin(b / 2.0);
d = 2 * EARTH_RADIUS
* Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1)
* Math.cos(lat2) * sb2 * sb2));
d= d * 1000;
BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP);
return bg.doubleValue();
} catch (Exception e) {
return null;
}
}
//核心計算方式:
double lat = Math.asin(Math.sin(startLat)*Math.cos(δ)+Math.cos(startLat)*Math.sin(δ)*Math.cos(angle));
double lon = startLong + Math.atan2(Math.sin(angle)*Math.sin(δ)*Math.cos(startLat),Math.cos(δ)-Math.sin(startLat)*Math.sin(lat));