资源描述
全国省会城市经纬度
2010-04-25 18:19
北京
E116°28'
N39°54'
上海
E121°29'
N31°14'
天津
E117°11'
N39°09'
重庆
E106°32'
N29°32'
哈尔滨
E126°41'
N45°45'
长春
E125°19'
N43°52'
沈阳
E123°24'
N41°50'
呼和浩特
E111°48'
N40°49'
石家庄
E114°28'
N38°02'
太原
E112°34'
N37°52'
济南
E117°
N36°38'
郑州
E113°42'
N34°48'
西安
E108°54'
N34°16'
兰州
E103°49'
N36°03'
银川
E106°16'
N38°20'
西宁
E101°45'
N36°38'
乌鲁木齐
E87°36'
N43°48'
合肥
E117°18'
N31°51'
南京
E118°50'
N32°02'
杭州
E120°09'
N30°14'
长沙
E113°
N28°11'
南昌
E115°52'
N28°41'
武汉
E114°21'
N30°37'
成都
E104°05'
N30°39'
贵阳
E106°42'
N26°35'
福州
E119°18'
N26°05'
台北
E121°31'
N25°03'
广州
E113°15'
N23°08'
海口
E110°20'
N20°02'
南宁
E108°20'
N22°48'
昆明
E102°41'
N25°
拉萨
E90°08'
N29°39'
香港
E114°10'
N22°18'
澳门
E113°35'
N22°14'
台北
E121°31'
N25°03'
把地球当作一个正常的球体(其实它是椭球)来说,球面两点之间的距离计算并不复杂,运用球坐标很容易就能计算出两点之间的弧长。当然这都是高中的知识,我 和你一样,也没有那个耐心来将其推导,所以我就利用google map的经纬度到距离计算的js脚本,将球面弧长的公式给还原出来(估计这个公式是经过部分修正的),还原出来的公式如下:
公式解释如下:
公式中经纬度均用弧度表示,角度到弧度的转化应该是很简单的了吧,若不会,依然请参考这个这个经纬度算距离的工具;
Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;
a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差;
6378.137为地球半径,单位为公里;
matlab代码:
adress={'北京';
'上海';
'天津';
'重庆';
'哈尔滨';
'长春';
'沈阳';
'呼和浩特';
'石家庄';
'太原';
'济南';
'郑州';
'西安';
'兰州';
'银川';
'西宁';
'乌鲁木齐';
'合肥';
'南京';
'杭州';
'长沙';
'南昌';
'武汉';
'成都';
'贵阳';
'福州';
'台北';
'广州';
'海口';
'南宁';
'昆明';
'拉萨';
'香港';
'香港';
'澳门';
'台北'};
%经纬度,第一列是东经E,第二列是北纬N
EN=[116.28,39.54;
121.29,31.14;
117.11,39.09;
106.32,29.32;
126.41,45.45;
125.19,43.52;
123.24,41.5;
111.48,40.49;
114.28,38.02;
112.34,37.52;
117,36.38;
113.42,34.48;
108.54,34.16;
103.49,36.03;
106.16,38.2;
101.45,36.38;
87.36,43.48;
117.18,31.51;
118.5,32.02;
120.09,30.14;
113,28.11;
115.52,28.41;
114.21,30.37;
104.05,30.39;
106.42,26.35;
119.18,26.05;
121.31,25.03;
113.15,23.08;
110.2,20.02;
108.2,22.48;
102.41,25;
90.08,29.39;
114.1,22.18;
114.1,22.18;
113.35,22.14;
121.31,25.03];
%计算任意两点间的直线距离
ENNew(:,1)=(floor(EN(:,1))+(EN(:,1)-floor(EN(:,1)))/60)*pi/180;
ENNew(:,2)=(floor(EN(:,2))+(EN(:,2)-floor(EN(:,2)))/60)*pi/180;
%计算任意两点的距离,使用公式$2*6378.137*\arcsin\sqrt{sin^2(a)+cos(Lat2)*cos(Lat2)*sin^2(b/2)}$
%Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;
%a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差;
%Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;
SizeEN=size(EN,1);
Dis=zeros(SizeEN,SizeEN);
for i=1:SizeEN
for j=1:SizeEN
WeiDuCha=EN(i,2)-EN(j,2);
JingDuCha=EN(i,1)-EN(j,1);
Dis(i,j)= 2*6378.137*asin(sqrt(sin(WeiDuCha/2)^2+sin(JingDuCha/2)^2*cos(EN(i,2))*cos(EN(j,2))));
end
end
展开阅读全文