楼主: 雯雯517
39875 51

[编程问题求助] 怎么用stata geodist命令算出任意两地间的距离? [推广有奖]

31
08zjliu 发表于 2017-9-18 20:13:47
jinlong1835 发表于 2017-9-18 18:39
我现在的问题有以下几个:第一,geodist计算的结果是什么呀?这个距离的单位是什么?为什么我自己用原始的 ...
结果计算的是两地之间的距离,单位应该是公里。跟三角函数计算肯定有差距,估计这个是曲线的距离,因为地球是圆形的,但是差距应该不会太大。

32
08zjliu 发表于 2017-9-18 20:15:28
jinlong1835 发表于 2017-9-18 18:39
我现在的问题有以下几个:第一,geodist计算的结果是什么呀?这个距离的单位是什么?为什么我自己用原始的 ...
* generate simulated data;

clear
set seed 1234
set obs 10
gen id1 = _n
gen double lat1 = 37 + (41 - 37) * uniform()
gen double lon1 = -109 + (109 - 102) * uniform()

* pairwise combination
preserve
rename (id1 lat1 lon1) (id2 lat2 lon2)
save geo_data, replace
restore

cross using geo_data

* 10*10 distance matrix
geodist lat1 lon1 lat2 lon2, generate(v)
keep id1 id2 v
reshape wide v, i(id1) j(id2)
使用deem编的程序,就可以得出同一组数据任何两地之间的距离,得出的是一个矩阵。

33
jinlong1835 发表于 2017-9-18 20:23:31
08zjliu 发表于 2017-9-18 20:15
* generate simulated data;

clear
您太牛了,学习了,厉害厉害,多谢您的帮助,受益匪浅。

34
08zjliu 发表于 2017-9-18 20:44:42
jinlong1835 发表于 2017-9-18 20:23
您太牛了,学习了,厉害厉害,多谢您的帮助,受益匪浅。
我也是跟人家学的,deem挺厉害的,帮了很多忙。非常感谢他!

35
08zjliu 发表于 2017-9-18 22:43:55
deem 发表于 2017-9-17 23:31
最后的结果一般不需要算出来任意两点的距离,你要想清楚自己最终要的是什么
您好,您能帮忙写一个循环程序吗,我学了半天,没有搞定。非常感谢。
geodist lat1 lon1  var1 var2, generate(a1)
geodist lat1 lon1  var3 var4, generate(a2)
geodist lat1 lon1  var5 var6, generate(a3
geodist lat1 lon1  var7 var8, generate(a4)
geodist lat1 lon1  var9 var10, generate(a5)
geodist lat1 lon1  var11 var12, generate(a6)
geodist lat1 lon1  var13 var14, generate(a7)
geodist lat1 lon1  var15 var16, generate(a8)
geodist lat1 lon1  var17 var18, generate(a9)
geodist lat1 lon1  var19 var20, generate(a10)
geodist lat1 lon1   ……    ……   ,    ……

36
pengming 在职认证  发表于 2017-11-11 09:28:44
08zjliu 发表于 2017-9-18 22:43
您好,您能帮忙写一个循环程序吗,我学了半天,没有搞定。非常感谢。
geodist lat1 lon1  var1 var2, ge ...
findit  globdist
ssc install globdist   or net install globdist

use c:\chm\数据.dta,clear  //导入数据
rename 纬度  lat               //变量重新命名
rename 经度 lon              //变量重新命名
forvalues k = 1(1)31 {              //31代表城市的数量
     local i = regionc[`k']             //regionc代表城市名称
     local lat_n = lat[`k']            //lat_n代表第n个城市的纬度的位置,local表局部暂元
     local lon_n = lon[`k']           //lon_n代表第n个城市的经度的位置,local表局部暂元
globdist kmTo`i', lat0(`lat_n') lon0(`lon_n')  // 第n个城市到第i个城市的距离
}
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
想吃芒果炒冰 + 1 + 1 + 1 精彩帖子
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

37
pengming 在职认证  发表于 2017-11-11 10:57:55
deem 发表于 2017-8-28 09:34
经过测试,可行,厉害,学习了很多,感谢!

38
15521078268 发表于 2019-12-26 20:42:23
请问为什么会显示纬度范围不对,要求在-90,90之间,可是我的数据明明已经在了呀

1.jpg (18.27 KB)

1.jpg

39
zhoujingguana 发表于 2020-1-28 16:27:46
15521078268 发表于 2019-12-26 20:42
请问为什么会显示纬度范围不对,要求在-90,90之间,可是我的数据明明已经在了呀
你的问题解决了吗,我也出现了这个报错

40
zabbyy 发表于 2020-3-13 10:48:55
15521078268 发表于 2019-12-26 20:42
请问为什么会显示纬度范围不对,要求在-90,90之间,可是我的数据明明已经在了呀
您的问题解决了吗  我也遇到了同样的情况

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-31 19:52