㈠ 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;
}