㈠ 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
㈡ 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;
}
㈢ java根據經緯度算出日出日落時間
我現在想明白了這個跟時區沒有關系。它只跟太陽照在哪個緯度線上和你想知道哪根緯度線的日出時間有關系,卻跟經度卻沒有關系(跟時區也就沒有關系了)。
季節變化時太陽照在地球上的緯度線也就變了,對於當天太陽所照的那個緯度線上的人來說,白天和晚上的時間剛好都是12個小時,因此就是早上6:00日出,下午6:00日落;這裡面有個約定,那就是時間本身就是基於日出計算出來的,所以它是相對的,我們只是基於一個共同的標准來計算差異。所以,在還沒有時鍾古代滴漏這種計時工具時,我們就把大晴天時看見太陽的第一時刻當成是6:00。
當太陽不是照在我們所在的緯度線上時白天和黑夜的長度就不是剛12個小時,因此有了日出時間和日落時間的差異。那麼我們回家拿個燈照一個球形體,並模擬球形赤道線與太陽的夾角在變化(季節變化)就能知道怎麼計算了,當然還需要把這個計算的邏輯轉換成為數學方法;這裡面我們需要計算的就是(對於某個季度,比如假設太陽照在北緯23.5度時)對於每一個緯度圈,太陽能照到的弧長是多少,照到和照不到的也就是對應著白天和黑夜的長度,它把24小時切分了。這樣就計算出時間了。
這個數學公式就同時涉及了太陽所照的緯度以及你想知道的緯度,這裡面的數學公式對於一個數學從來都只是及格線附近徘徊的我來說是個挑戰;
當太陽照在緯度x時,那麼它同時照到的緯度圈y的弧長佔地球周長的百分比是多少(假設地球是一個均勻球體)。
下面圖片大概是先計算出目標查詢緯度圈 y 的半徑 r2,計算出高 h 再得到被遮擋弧的線到中軸的距離 a ,用它來計算被遮擋弧的角度來得到弧長所點緯度圈 r2 對應的周長的百分比,這個值與50%的差異也就是目標緯度y與當前太陽直射緯度x 兩個地區人們的白天時間差異所點百分比,用這個百分比來修正標准日出時間(6:00)得到一個估算的日出時間,日落時間也是相應地修正。
似乎是這么算的,如果大家看出啥錯誤的,就說說原因。
㈣ 如何根據經緯度計算距離的java代碼
思路是:通過傳入地址作為參數拼接url調用網路地圖,然後解析返回的頁面,提取經緯度坐標。以下為具體步驟1、修改excel表中的屬性名(方便後面用查詢讀取)然後倒入到資料庫。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
㈥ JAVA,已知當前經緯度和距離,計算符合距離條件的經度最大值、最小值和緯度的最大值、最小值。
自己算太麻煩了吧,用已有的工具包不行么?
如果支持GEO的話可以用spatial4j,不需要GEO用jts,畫個圓,取外切框就行吧
6378137這個數,是赤道的6378.137,南北極的是6371.0087714
㈦ java經度緯度計算
range = 180 / PI * 1 / 6372.797; //裡面的 1 就代表搜索 1km 之內,單位km
lngR = range / Math.cos(myLat * PI / 180);
maxLat =myLat + range;//最大緯度
minLat = myLat - range;//最小緯度
maxLng = myLng + lngR;//最大經度
minLng = myLng - lngR;//最小經度
類型全部是double
還有一種估算方法
http://..com/question/496238888
請參考
㈧ java中根據經度緯度如何計算航向
一般假設小塊區域是平面。
先通過 緯度計算當地兩個經度之間的距離(不同緯度上,不同經度距離是不一樣的)
再計算兩個經度間的距離。然後反切就可以算出角度。
㈨ java 里 兩點的經度緯度怎麼算距離
/**
* 計算地球上任意兩點(經緯度)距離
*
* @param long1
* 第一點經度
* @param lat1
* 第一點緯度
* @param long2
* 第二點經度
* @param lat2
* 第二點緯度
* @return 返回距離 單位:米
*/
public static double Distance(double long1, double lat1, double long2,
double lat2) {
double a, b, R;
R = 6378137; // 地球半徑
lat1 = lat1 * Math.PI / 180.0;
lat2 = lat2 * Math.PI / 180.0;
a = lat1 - lat2;
b = (long1 - long2) * Math.PI / 180.0;
double d;
double sa2, sb2;
sa2 = Math.sin(a / 2.0);
sb2 = Math.sin(b / 2.0);
d = 2
* R
* Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1)
* Math.cos(lat2) * sb2 * sb2));
return d;
}
㈩ java如何用經緯度計算兩點水平和垂直距離
/**
*計算地球上任意兩點(經緯度)距離
*
*@paramlong1
*第一點經度
*@paramlat1
*第一點緯度
*@paramlong2
*第二點經度
*@paramlat2
*第二點緯度
*@return返回距離單位:米
*/
publicstaticdoubleDistance(doublelong1,doublelat1,doublelong2,
doublelat2){
doublea,b,R;
R=6378137;//地球半徑
lat1=lat1*Math.PI/180.0;
lat2=lat2*Math.PI/180.0;
a=lat1-lat2;
b=(long1-long2)*Math.PI/180.0;
doubled;
doublesa2,sb2;
sa2=Math.sin(a/2.0);
sb2=Math.sin(b/2.0);
d=2
*R
*Math.asin(Math.sqrt(sa2*sa2+Math.cos(lat1)
*Math.cos(lat2)*sb2*sb2));
returnd;
}