经纬度是经度与纬度的合称组成一个坐标系统,它是一种利用三度空间的球面来定义地球上的空间的球面坐标系统,能够标示地球上的任何一个位置。怎么计算两个经纬度之间的距离,有什么计算公式或者方法技巧?
1 经纬度计算方法
在地球上任何地点,只要有只表,有根竹竿,一根卷尺,就可知道当地经纬度。但表必须与该国标准时校对。
方法如下: 1、先算两分日
比如在中国某地,杆影最短时是中午13点20分,且杆长与影长之比为1,则可知该地是北纬45°(tgα=1),东经100°(从120°里1小时减15°,4分钟减1°)杆长与影长之比需查表求α,这里用了特殊角。
2、再算两至日经度的算法不变 纬度在北半球冬至α+235°,夏至α-235°在任意一天加减修正值即可。
3、修正值算法:就是距两分或两至日的天数差乘以94/365 比如2013年2月17日,2013年3月22日春分差33天,即太阳直射点在南纬
33×94/365=85°
所以今天正午时得到的纬度是(arctgα+85)°
tgα= 杆长/影长
1 计算地球上两点距离d
1已知地球上两点的经度、纬度:(X1,Y1), (X2,Y2),其中X1,X2为经度,Y1,Y2为纬度;
视计算程序需要转化为弧度(31415926/180)
地球半径为R=63710 km
则两点距离d=Rarcos[cos(Y1)cos(Y2)cos(X1-X2)+sin(Y1)sin(Y2)]
2在地球上同一条经线上纬度相差一度,实际距离是111公里;在赤道经度相差一度,实际距离是111公里,在其他的纬线上,经度每相差一度,实际距离是111经度数cos经度数,例如在北纬30度,经度相差5度,实际距离是:1115cos30度。
1 用经纬度大致计算距离
地球赤道上环绕地球一周走一圈共 4007504公里
而一圈分成360°
而每1°(度)有60'
每一度一秒在赤道上的长度计算如下:
4007504km/360°=11131955km
11131955km/60'=18553258km=18553m
而每一分又有60秒
每一秒就代表 18553m/60=3092m
任意两点距离计算公式为
d=11112cos{1/[sinΦAsinΦB十 cosΦAcosΦBcos(λB-λA)]}
其中:A点经度,纬度分别为λA和ΦA
B点的经度、纬度分别为λB和ΦB,d为距离
地球上所有地方的纬度一分的距离都是约等于186公里,也就是一度等于186*60=111公里。
不同纬度处的经度线上的一分的实际长度是不同的,219国道基本在东经29-38度之间,29度处的一分经线长约163公里,38度处的一分经线长约147公里。
#define PI 31415926
#include<mathh>
#include<iostream>
using namespace std;
int days_of_month_1[]={31,28,31,30,31,30,31,31,30,31,30,31};
int days_of_month_2[]={31,29,31,30,31,30,31,31,30,31,30,31};
long double h=-0833;
//定义全局变量
void input_date(int c[]){
int i;
cout<<"Enter the date (form: 2009 03 10):"<<endl;
for(i=0;i<3;i++){
cin>>c[i];
}
}
//输入日期
void input_glat(int c[]){
int i;
cout<<"Enter the degree of latitude(range: 0°- 60°,form: 40 40 40 (means 40°40′40″)):"<<endl;
for(i=0;i<3;i++){
cin>>c[i];
}
}
//输入纬度
void input_glong(int c[]){
int i;
cout<<"Enter the degree of longitude(west is negativ,form: 40 40 40 (means 40°40′40″)):"<<endl;
for(i=0;i<3;i++){
cin>>c[i];
}
}
//输入经度
int leap_year(int year){
if(((year%400==0) || (year%100!=0) && (year%4==0))) return 1;
else return 0;
}
//判断是否为闰年:若为闰年,返回1;若非闰年,返回0
int days(int year, int month, int date){
int i,a=0;
for(i=2000;i<year;i++){
if(leap_year(i)) a=a+366;
else a=a+365;
}
if(leap_year(year)){
for(i=0;i<month-1;i++){
a=a+days_of_month_2[i];
}
}
else {
for(i=0;i<month-1;i++){
a=a+days_of_month_1[i];
}
}
a=a+date;
return a;
}
//求从格林威治时间公元2000年1月1日到计算日天数days
long double t_century(int days, long double UTo){
return ((long double)days+UTo/360)/36525;
}
//求格林威治时间公元2000年1月1日到计算日的世纪数t
long double L_sun(long double t_century){
return (280460+36000770t_century);
}
//求太阳的平黄径
long double G_sun(long double t_century){
return (357528+35999050t_century);
}
//求太阳的平近点角
long double ecliptic_longitude(long double L_sun,long double G_sun){
return (L_sun+1915sin(G_sunPI/180)+002sin(2G_sunPI/180));
}
//求黄道经度
long double earth_tilt(long double t_century){
return (234393-00130t_century);
}
//求地球倾角
long double sun_deviation(long double earth_tilt, long double ecliptic_longitude){
return (180/PIasin(sin(PI/180earth_tilt)sin(PI/180ecliptic_longitude)));
}
//求太阳偏差
long double GHA(long double UTo, long double G_sun, long double ecliptic_longitude){
return (UTo-180-1915sin(G_sunPI/180)-002sin(2G_sunPI/180)+2466sin(2ecliptic_longitudePI/180)-0053sin(4ecliptic_longitudePI/180));
}
//求格林威治时间的太阳时间角GHA
long double e(long double h, long double glat, long double sun_deviation){
return 180/PIacos((sin(hPI/180)-sin(glatPI/180)sin(sun_deviationPI/180))/(cos(glatPI/180)cos(sun_deviationPI/180)));
}
//求修正值e
long double UT_rise(long double UTo, long double GHA, long double glong, long double e){
return (UTo-(GHA+glong+e));
}
//求日出时间
long double UT_set(long double UTo, long double GHA, long double glong, long double e){
return (UTo-(GHA+glong-e));
}
//求日落时间
long double result_rise(long double UT, long double UTo, long double glong, long double glat, int year, int month, int date){
long double d;
if(UT>=UTo) d=UT-UTo;
else d=UTo-UT;
if(d>=01) {
UTo=UT;
UT=UT_rise(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo))))));
result_rise(UT,UTo,glong,glat,year,month,date);
}
return UT;
}
//判断并返回结果(日出)
long double result_set(long double UT, long double UTo, long double glong, long double glat, int year, int month, int date){
long double d;
if(UT>=UTo) d=UT-UTo;
else d=UTo-UT;
if(d>=01){
UTo=UT;
UT=UT_set(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo))))));
result_set(UT,UTo,glong,glat,year,month,date);
}
return UT;
}
//判断并返回结果(日落)
int Zone(long double glong){
if(glong>=0) return (int)((int)(glong/150)+1);
else return (int)((int)(glong/150)-1);
}
//求时区
void output(long double rise, long double set, long double glong){
if((int)(60(rise/15+Zone(glong)-(int)(rise/15+Zone(glong))))<10)
cout<<"The time at which the sun rises is "<<(int)(rise/15+Zone(glong))<<":0"<<(int)(60(rise/15+Zone(glong)-(int)(rise/15+Zone(glong))))<<" \n";
else cout<<"The time at which the sun rises is "<<(int)(rise/15+Zone(glong))<<":"<<(int)(60(rise/15+Zone(glong)-(int)(rise/15+Zone(glong))))<<" \n";
if((int)(60(set/15+Zone(glong)-(int)(set/15+Zone(glong))))<10)
cout<<"The time at which the sun sets is "<<(int)(set/15+Zone(glong))<<": "<<(int)(60(set/15+Zone(glong)-(int)(set/15+Zone(glong))))<<" \n";
else cout<<"The time at which the sun sets is "<<(int)(set/15+Zone(glong))<<":"<<(int)(60(set/15+Zone(glong)-(int)(set/15+Zone(glong))))<<" \n";
}
//打印结果
int main(){
long double UTo=1800;
int year,month,date;
long double glat,glong;
int c[3];
input_date(c);
year=c[0];
month=c[1];
date=c[2];
input_glat(c);
glat=c[0]+c[1]/60+c[2]/3600;
input_glong(c);
glong=c[0]+c[1]/60+c[2]/3600;
long double rise,set;
rise=result_rise(UT_rise(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))))),UTo,glong,glat,year,month,date);
set=result_set(UT_set(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))))),UTo,glong,glat,year,month,date);
output(rise,set,glong);
system("pause");
return 0;
}
[114°10′÷6°]+1=20(方括号为取整运算符),6N-3°=117°-----这是6度带带号和中央子午线; [(114°10′-15°)÷3°]+1=38,3N=114°----这是3度带带号和中央子午线。
二分日的日出时间是北京时间640 ,因北京时间是120度的地方时,也就是说120度的地方时是6:40所以6:00的地方应该是和他差四十分钟的地方也就是经度差十度,方位在西,因为东加西减,所以是东经120-10=110度
地图显示什么的一般写在html里
script代码如下
var map = new BMapMap("容器ID"); // 创建地图实例
var point = new BMapPoint(精度值, 纬度值);// Location, (经度, 纬度)mapcenterAndZoom(point, 18);
var mark = new BMapMarker(point);//做标记
mapaddOverlay(mark);//在地图显示上添加标记
mapaddControl(new BMapMapTypeControl()); //为地图添加2D3D切换控件
mapsetCurrentCity("城市名"); // 仅当设置城市信息时,MapTypeControl的切换功能才能可用
要加什么直接参考相应运营商的API。
东经117度45分34秒
6度带:带号是第20带,中央子午线经度是东经117度。
3度带:带号是第39带,中央子午线经度是东经117度。
从零度子午线开始,自西向东每个经差6度为一投影带,全球共分60个带,用1、2、3、4、5……表示,即东经0——6度为第一带,其中央经线的经度为东经3度,东经6——12度为第二带,其中央经线的经度为东经9度……
从东经15度的经线开始每隔3度为一带用123……表示全球共划分120个投影带即东经15——45度为第1带其中央经线的经度为东经3度东经45——75度为第2带其中央经线的经度为东经6度……
设地面点的经度为L,求其六度带的中央子午线经度:先求其所处的带号,套公式:n=int(L/6°)+1,带入题设L=131°58′求出n=22再利用公式L0(6°带的中央子午线经度)=6°n-3°带入求出的n=22得到L0=129°望采纳。。。
以上就是关于两个经纬度算距离公式及方法全部的内容,包括:两个经纬度算距离公式及方法、利用日期、经纬度求日出日落时间 C语言程序代码、某点的大地经度是150.3请计算该点所在的6度带带号和中央子午线经度,以及所在的3度带带号和中央子午线经度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)