java經緯度計算
1. java,已知當前經緯度和距離,計算符合距離條件的經度最大值、最小值和緯度的最大值、最小值。
//拿走不謝
private final static double R = 6370996.81;
private final static double PI = 3.14159265;
private final static double RAD = Math.PI / 180.0;
/// <summary>
/// 根據提供的經度和緯度、以及半徑,取得此半徑內的最大最小經緯度
/// </summary>
/// <param name="lat">緯度</param>
/// <param name="lon">經度</param>
/// <param name="rais">半徑(米)</param>
/// <returns></returns>
public static double[] GetAround(double lat, double lon, int rais)
{
Double latitude = lat;
Double longitude = lon;
Double degree = (24901 * 1609) / 360.0;
double raisMile = rais;
Double dpmLat = 1 / degree;
Double radiusLat = dpmLat * raisMile;
Double minLat = latitude - radiusLat;
Double maxLat = latitude + radiusLat;
Double mpdLng = degree * Math.cos(latitude * (PI / 180));
Double dpmLng = 1 / mpdLng;
Double radiusLng = dpmLng * raisMile;
Double minLng = longitude - radiusLng;
Double maxLng = longitude + radiusLng;
return new double[] { minLat, minLng, maxLat, maxLng };
}
/// <summary>
/// 根據提供的兩個經緯度計算距離(米)
/// </summary>
/// <param name="lng1">經度1</param>
/// <param name="lat1">緯度1</param>
/// <param name="lng2">經度2</param>
/// <param name="lat2">緯度2</param>
/// <returns></returns>
public static double GetDistance(double lng1, double lat1, double lng2, double lat2)
{
double radLat1 = lat1 * RAD;
double radLat2 = lat2 * RAD;
double a = radLat1 - radLat2;
double b = (lng1 - lng2) * RAD;
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * R;
s = Math.round(s * 10000) / 10000;
return s;
}
2. java 如何根據一個給定的經緯度(坐標)計算出List<經緯度>中坐標點較近的一部分坐標
使用第三方jar包 jts包 例子如下面
//一個面所包含的經緯度(標準的經緯*3600000)
String str = "POLYGON ((419164412 143703543, 419164481 143702737, 419164494 143702527,419164412 143703543))";
WKTReader wkt = new WKTReader();
Geometry geojudge1 = wkt.read(str);
int xpoi = 419164481;
int ypoi = 143702737;
Geometry geojudge2 = wkt.read("POINT(" + xpoi + " " + ypoi + "))");
if(geojudge1.intersects(geojudge2)) {
System.out.println("xpoi、ypoi 在這個面里");
}
ps:在構成一個面的時候,第一個點的經緯度一定要與最後一個點的經緯度相同。否則會報錯誤:java.lang.IllegalArgumentException: points must form a closed linestring
3. java獲取位置信息
在Java中獲取位置信息可以通過多種方式實現,具體取決於所需的位置信息的類型和來源。以下是一些常見的方法:
通過IP地址獲取地理位置:
這種方法通常使用IP資料庫來解析IP地址並檢索其地理位置信息,如國家、省份、城市等。
可以使用現成的Java庫和框架,如ip2region、com.jthinking.common ipinfo等,這些庫提供了從IP地址獲取地理位置的功能。
使用第三方API進行經緯度查詢:
在有網路訪問的情況下,可以利用第三方地理編碼API(例如Google Maps Geocoding API)來根據經緯度查詢具體的地理位置信息。
這需要發送HTTP請求到API服務,並解析返回的JSON或XML格式的響應來獲取位置信息。
通過設備定位服務獲取位置信息(主要針對移動設備):
對於Android設備,可以利用Android的定位服務(如GPS、藍牙等)來獲取設備的位置信息。
這需要在Android應用中聲明適當的許可權,並在代碼中實現定位服務的使用。
從照片中獲取位置信息:
如果照片包含了EXIF元數據,可以使用Java庫來讀取這些元數據,並從中提取位置信息(如拍照時的經緯度)。
這種方法適用於已經拍攝並保存了位置信息的照片,通過解析EXIF元數據來獲取位置信息。
綜上所述,Java中獲取位置信息的方法多種多樣,選擇哪種方法取決於具體的應用場景和需求。例如,如果需要獲取用戶的實時位置信息,可以考慮使用設備定位服務;如果需要根據IP地址獲取大致的地理位置,可以使用IP資料庫或第三方API。在實際應用中,需要根據具體需求選擇合適的方法,並考慮其准確性、可靠性和性能等因素。
4. java 經緯度轉換米
在經線上,相差一緯度約為111km ,因此100m(0.1KM)在經線上對應約為0.1/111=0.0009度,這個度數和緯度沒有關系
在緯線上,相差一經度約為111cosα(α為該緯線的緯度)因此100m(0.1KM)在該緯線上對應約為0.1/(111*cos23.14)=0.0009797度,這個度數和緯度有關,
如果要知道經緯度差和距離差的換算規律,請查閱連接中的回答。
http://..com/question/711399588905395965.html?oldq=1