- 论坛徽章:
- 145
|
回复 1# kwunkau
$ awk 'BEGIN{pi=atan2(0,-1);OFS="\t"}function abs(n){return n>0?n:-n}function acos(x){return atan2(sqrt(abs(1-x*x)),x)}function r(n){return n/180*pi}function rad(n){return n/180*pi}function dist(p1,p2){lon1=lon[p1];lon2=lon[p2];lat1=lat[p1];lat2=lat[p2];d=6371004*acos(sin(r(lat1))*sin(r(lat2))+cos(r(lat1))*cos(r(lat2))*cos(r(lon2-lon1)));if(p1==p2)d=0;print lon1,lat1,p1,p2,d}{a[++c]=$3;lon[$3]=$1;lat[$3]=$2}END{for(n=1;n<=c;++n)for(m=1;m<=c;++m){dist(a[m],a[n])}}' a
112.475842 23.060001 A A 0
112.486325 23.064556 B A 1186.08
112.466711 23.088511 C A 3304.92
...
112.43079 23.078846 L N 8211.63
112.421788 23.082244 M N 9142.18
112.511062 23.078412 N N 0
|
|