楼主: 雯雯517
39874 51

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

11
08zjliu 发表于 2017-9-17 21:15:32
deem 发表于 2017-9-17 13:13
非常感谢您的回答,不过我的问题更复杂些。id1和id2分别代表两组数据,怎么写程序求id2每个地方与id1中所有地方之间的距离?非常感激,愿意付出论坛币求教。
id1lat1lon1id2lat2lon2

1

36.4345005273115.9884387433

1

22.5408438779114.1073437386

2

38.3044167994116.8386942891

2

22.5739411063114.1289712414

3

39.7268362964116.3415800533

3

22.5388238085114.1150023445

4

38.1639583261114.6507245991

4

22.494806421113.9253

5

34.8254568173112.4451136144

5

22.5384661673114.1197

6

39.1258031075116.3916925454

6

22.5443198085114.1113

7

37.1914757238119.9634814343

7

22.5425299264114.0873

8

38.0002309195115.5600181231

8

22.5426343514114.1229

9

34.8310757279110.3291709124

9

22.5402387121114.0911

10

36.2913151777120.0203177897

10

22.5413547121114.0942

11

29.2468388525119.9110785558

11

22.5408483514114.1196

12

24.9496872654118.5135601716

12

22.4927325903113.9183

13

35.8009112101112.9183777177

13

22.5762051063114.1295

14

36.2913151777120.0203177897

14

22.5728342526114.1441

15

34.8255486701115.5421477633

15

22.5658913926114.102

16

34.8406677240119.1773057054

16

22.5384361647113.9962

17

38.1461892667114.5709685257

17

22.5762925302114.1225

18

36.6845776316118.4796830112

18

22.5419188085114.1184

12
08zjliu 发表于 2017-9-17 21:19:17
deem 发表于 2017-9-17 13:13
非常感谢您的回答,我的问题更复杂些。假设id1和id2代表两组地方经纬度,如何写程序求id2中每个地方与id2每个地方的距离。非常感谢,愿意付100币求教!
id1              lat1                              lon1              id2                lat2                        lon2
1        36.4345005273        115.9884387433        1        22.5408438779        114.1073437386
2        38.3044167994        116.8386942891        2        22.5739411063        114.1289712414
3        39.7268362964        116.3415800533        3        22.5388238085        114.1150023445
4        38.1639583261        114.6507245991        4        22.494806421        113.9252521
5        34.8254568173        112.4451136144        5        22.5384661673        114.1196634
6        39.1258031075        116.3916925454        6        22.5443198085        114.1112563
7        37.1914757238        119.9634814343        7        22.5425299264        114.0872721
8        38.0002309195        115.5600181231        8        22.5426343514        114.1228738
9        34.8310757279        110.3291709124        9        22.5402387121        114.0910752
10        36.2913151777        120.0203177897        10        22.5413547121        114.0942172
11        29.2468388525        119.9110785558        11        22.5408483514        114.1195538
12        24.9496872654        118.5135601716        12        22.4927325903        113.9183497
13        35.8009112101        112.9183777177        13        22.5762051063        114.1294792
14        36.2913151777        120.0203177897        14        22.5728342526        114.1440686
15        34.8255486701        115.5421477633        15        22.5658913926        114.102039
16        34.8406677240        119.1773057054        16        22.5384361647        113.996173
17        38.1461892667        114.5709685257        17        22.5762925302        114.1225164
18        36.6845776316        118.4796830112        18        22.5419188085        114.1183853

13
08zjliu 发表于 2017-9-17 21:22:59
deem 发表于 2017-9-17 13:13
非常感谢您的回答,不过我的问题比较复杂,就是两组经纬度分别有很多数据,假设第一组有10组经纬度,第二组有10组,如果写程序求第一组每组经纬度与第二组所有经纬度之间的距离?非常感谢,愿意付100币求教!麻烦您了

14
deem 学生认证  发表于 2017-9-17 22:14:10
08zjliu 发表于 2017-9-17 21:22
非常感谢您的回答,不过我的问题比较复杂,就是两组经纬度分别有很多数据,假设第一组有10组经纬度,第二 ...
不太明白 我在8楼的回答应该可以吧

15
08zjliu 发表于 2017-9-17 22:23:32
deem 发表于 2017-9-17 22:14
不太明白 我在8楼的回答应该可以吧
id1 lat1 lon1 id2 lat2 lon2
  1   a1  b1    4   c1   d1
  2   a2  b2    5  c2    d2
  3   a3 b3     6  c3    d3
假设id1、id2分别代表两组经纬度,a、c分别纬度,b、d代表纬度,如何求id1中1、2、3分别与id2中所有地点4、5、6的距离,也就是求1、4之间距离,1、5之间距离,1、6之间距离;2、4之间距离,2、5之间距离,2、6之间距离;3、4之间距离,3、5之间距离,3、6之间距离? 这样能明白吗?

16
deem 学生认证  发表于 2017-9-17 22:56:08
08zjliu 发表于 2017-9-17 22:23
id1 lat1 lon1 id2 lat2 lon2
  1   a1  b1    4   c1   d1
  2   a2  b2    5  c2    d2
  1. save dat1
  2. keep id2 lat2 lon2
  3. save dat2
  4. use dat1, clear
  5. keep id1 lat1 lon1
  6. cross using dat2
  7. geodist lat1 lon1 lat2 lon2, generate(v)
复制代码


17
08zjliu 发表于 2017-9-17 23:15:42
deem 发表于 2017-9-17 22:56
非常感谢,不用您之前讲的公式了吗?就是这些公式gen double lat1 = 37 + (41 - 37) * uniform()
gen double lon1 = -109 + (109 - 102) * uniform()

18
deem 学生认证  发表于 2017-9-17 23:18:14
08zjliu 发表于 2017-9-17 23:15
非常感谢,不用您之前讲的公式了吗?就是这些公式gen double lat1 = 37 + (41 - 37) * uniform()
gen do ...
那个是生成模拟数据的

19
08zjliu 发表于 2017-9-17 23:20:27
deem 发表于 2017-9-17 23:18
那个是生成模拟数据的
明白了,非常感谢啊。不过可能是我的数据太大了,用stata的时候,运行cross using dat2,会出现no room to add more observations,不知道怎么办

20
deem 学生认证  发表于 2017-9-17 23:31:23
08zjliu 发表于 2017-9-17 23:20
明白了,非常感谢啊。不过可能是我的数据太大了,用stata的时候,运行cross using dat2,会出现no room t ...
最后的结果一般不需要算出来任意两点的距离,你要想清楚自己最终要的是什么

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

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