使用经度和纬度获取国家
Getting country using longitude and latitude
首先我需要说明的是,我在地理数据方面没有太多使用 SAS 的经验。我有一个包含经度和纬度的数据集,我需要按国家/地区查看分布情况。我尝试 Google 并且我找到的唯一解决方案是:
https://communities.sas.com/t5/Base-SAS-Programming/Is-there-a-way-to-get-County-using-latitude-and-longitude/td-p/145233
它适用于美国数据,但适用于世界其他地区的数据非常差(低于 10%)。
我使用此代码:
proc ginside data=gps map=maps.world out=gpscounties;
id id cont;
run;
其中 GPS 是我的经纬度数据。
这个 10% 的比例是正常的还是我漏掉了什么?或者可能有其他更好的方法来解决我的问题?
我正在使用 SAS 9.4 TS1M2。
这是一个例子:
data gps;
input x y;
datalines;
143.21 -33.494
119.306 26.0614
119.306 26.0614
143.21 -33.494
113.25 23.1167
139.751 35.685
113.25 23.1167
133.935 34.6617
133.935 34.6617
133.051 35.4722
;
run;
至少你的部分问题是你有 lat/long 但你需要极弧度。
data gps;
input x y;
x=x*arcos(-1)/180;
x=x*(-1);
y=y*arcos(-1)/180;
datalines;
143.21 -33.494
119.306 26.0614
119.306 26.0614
143.21 -33.494
113.25 23.1167
139.751 35.685
113.25 23.1167
133.935 34.6617
133.935 34.6617
133.051 35.4722
;
run;
但是,这不是您的全部问题,因为它对我仍然不起作用。我怀疑您需要使用 GPROJECT 将笛卡尔坐标转换为 x/y 坐标。
不过,由于您使用的是 9.4,因此您拥有 GFK 地图,这应该会更容易,因为它们保存了投影信息!
查看以下内容:
data gps;
input x y;
rownum = _n_;
datalines;
143.21 -33.494
119.306 26.0614
119.306 26.0614
143.21 -33.494
113.25 23.1167
139.751 35.685
113.25 23.1167
133.935 34.6617
133.935 34.6617
133.051 35.4722
;
run;
proc gproject data=gps out=projected
parmin=mapsgfk.projparm parmentry=world;
id rownum;
run;
proc ginside data=projected map=mapsgfk.world out=countries;
id idname id;
run;
这似乎对我有用。
首先我需要说明的是,我在地理数据方面没有太多使用 SAS 的经验。我有一个包含经度和纬度的数据集,我需要按国家/地区查看分布情况。我尝试 Google 并且我找到的唯一解决方案是: https://communities.sas.com/t5/Base-SAS-Programming/Is-there-a-way-to-get-County-using-latitude-and-longitude/td-p/145233 它适用于美国数据,但适用于世界其他地区的数据非常差(低于 10%)。 我使用此代码:
proc ginside data=gps map=maps.world out=gpscounties;
id id cont;
run;
其中 GPS 是我的经纬度数据。 这个 10% 的比例是正常的还是我漏掉了什么?或者可能有其他更好的方法来解决我的问题?
我正在使用 SAS 9.4 TS1M2。
这是一个例子:
data gps;
input x y;
datalines;
143.21 -33.494
119.306 26.0614
119.306 26.0614
143.21 -33.494
113.25 23.1167
139.751 35.685
113.25 23.1167
133.935 34.6617
133.935 34.6617
133.051 35.4722
;
run;
至少你的部分问题是你有 lat/long 但你需要极弧度。
data gps;
input x y;
x=x*arcos(-1)/180;
x=x*(-1);
y=y*arcos(-1)/180;
datalines;
143.21 -33.494
119.306 26.0614
119.306 26.0614
143.21 -33.494
113.25 23.1167
139.751 35.685
113.25 23.1167
133.935 34.6617
133.935 34.6617
133.051 35.4722
;
run;
但是,这不是您的全部问题,因为它对我仍然不起作用。我怀疑您需要使用 GPROJECT 将笛卡尔坐标转换为 x/y 坐标。
不过,由于您使用的是 9.4,因此您拥有 GFK 地图,这应该会更容易,因为它们保存了投影信息!
查看以下内容:
data gps;
input x y;
rownum = _n_;
datalines;
143.21 -33.494
119.306 26.0614
119.306 26.0614
143.21 -33.494
113.25 23.1167
139.751 35.685
113.25 23.1167
133.935 34.6617
133.935 34.6617
133.051 35.4722
;
run;
proc gproject data=gps out=projected
parmin=mapsgfk.projparm parmentry=world;
id rownum;
run;
proc ginside data=projected map=mapsgfk.world out=countries;
id idname id;
run;
这似乎对我有用。