geodist——测测我们相距多远

2017-02-24 爬虫俱乐部朱子奇 爬虫俱乐部 爬虫俱乐部

诸君安!

爬虫俱乐部的成长离不开各位朋友长期以来的支持与关注!爬虫俱乐部向全国各地的朋友真诚地道一声谢谢!不知远隔万水千山的您是否收到了爬虫酱的感谢?而这句感谢究竟跨越了多少的万水千山才来到您的身边?今天爬虫酱就来测测您与爬虫酱在地理上相隔多远。。。

geodist计算测地距离,即最短曲线的长度,是在沿着地球表面的两个点之间的距离

语法:

geodist lat1 lon1 lat2 lon2 [if] [in] , generate(newvar) [options]

注:

纬度的范围在-90°90°之间,经度的范围在-180°180°之间。北纬0-90°与东经0-180°为正,南纬0-90°与西经0-180°为负

坐标可以用变量,标量或数字坐标字符串来表示。如果坐标是标量,或数字坐标字符串,则无须添加generate(newvar)

这里,geodist具有如下几个选项option:

miles:用miles来测度距离

ellipsoid(a,f):可参考椭圆体中两个定义常数(af),a即为长半轴,f即为短半轴,长半轴是地心到赤道的球半径长度,短半轴是地心到两级的球半径长度。这些是以米为单位的半长

轴的长度(即到赤道的半径)和扁平率。具体的计算方法可参考:

http://www.movable-type.co.uk/scripts/latlong-vincenty.html

maxiter(#):表示执行计算椭圆距离时的最大迭代次数。默认值为25。请注意实际上所有情况都需要少于10次迭代

sphere:计算大圆距离。geodist默认地球近似为球体,其平均半径为6371公里。具体的计算方法可参考:

http://www.movable-type.co.uk/scripts/latlong.html

radius:在计算大圆距离时,自定义半径为多少(以千米为单位)的球体

那么我们该如何测算距离呢?首先,我们得安装geodist命令:

ssc install geodist,replace

然后,这里我们选择了一组经纬度的数据分别用不同的option测量一下,会得到不同的结果:

geodist 42.270873 -83.726329 45.545448 -73.639075

以英里来表示距离:

geodist 42.270873 -83.726329 45.545448 -73.639075,miles

计算大圆距离:

geodist 42.270873 -83.726329 45.545448 -73.639075, sphere

自定义半径为6399.6km来测度距离:

geodist 42.270873 -83.726329 45.545448 -73.639075,radius(6399.6)

定义椭球的长半轴为6378136.49米,短半轴为6356755.00米:

geodist 42.270873 -83.726329 45.545448 -73.639075, ellipsoid(6378136.49, 6356755.00)

而在我们的公众号在2016924号发表了一文《爬虫俱乐部周末送大礼—chinagcode提取中文地址的经纬度》,我们可以通过中文地址来提取经纬度,那么,我们是不是就可以利用geodist命令来将经纬度转化成距离呢?

那么,我们就举个下面这个简单的例子来说明:

我们可以分别输入两所大学的所在具体地点,其中具体的地点中得包括省、市、区、地址,因为有的大学同时存在多个分校与校区,所以我们就必须得精确其地址:

clear

set more off

cap mkdir "D:/distance"

cd D:/distance

input str100 fulladdr1 str100 fulladdr2

"湖北省武汉市洪山区中南财经政法大学南湖校区" "湖北省武汉市洪山区武汉理工大学南湖校区"

end

list

我们将百度地图API的秘钥输入选项baidukey()中,得到我们需要的经纬度:

chinagcode, baidukey(40GD1PPONTXxKdrktzhGtC0NUyXsHP5c) ///

fulladdress(fulladdr1) lat(lat1) long(lon1)

chinagcode, baidukey(40GD1PPONTXxKdrktzhGtC0NUyXsHP5c)   ///

fulladdress(fulladdr2) lat(lat2) long(lon2)

list

最后,我们生成一个新的变量distance来测度其距离:

geodist lat1 lon1 lat2 lon2,gen(distance)

list fulladdr1 fulladdr2 distance

 save "distance.dta",replace

接下来是空气质量报告

全国空气质量如下

全国空气质量较佳

天津稍有逊色

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~,点赞打赏随您心意,么么哒~

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

文字编辑:张    欢

技术总编:刘贝贝



往期推文推荐:

1.合并输出回归结果和其他检验结果——esttab和estadd

2.关于RTF你不知道的命令

3.关于RTF你不知道的命令之番外篇

4.免费事件研究,一片片从邮局寄来

5.免费的股价同步性,一片片从邮局寄来

6.Stata叫你回家听音乐了!

7.一言不合就用stata写邮件(Outlook/Foxmail)

8.玩转stata之调用浏览器

9.I have a Stata, I have a python

10.I have a Stata, I have a Python之二——pdf转word




关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:

xueyuan19920310@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号