【问题标题】:Retrieve Census tract from Coordinates [closed]从坐标中检索人口普查区[关闭]
【发布时间】:2019-01-01 02:56:39
【问题描述】:

我有一个包含经度和纬度坐标的数据集。我想检索相应的人口普查区。是否有允许我这样做的数据集或 API?

我的数据集如下所示:

       lat       lon   
1 40.61847 -74.02123   
2 40.71348 -73.96551   
3 40.69948 -73.96104    
4 40.70377 -73.93116   
5 40.67859 -73.99049   
6 40.71234 -73.92416   

我想添加一个包含相应人口普查区的列。

最终输出应该是这样的(这些不是正确的数字,只是一个例子)。

       lat       lon     Census_Tract_Label   
1 40.61847 -74.02123                   5.01
2 40.71348 -73.96551                     20
3 40.69948 -73.96104                     41
4 40.70377 -73.93116                  52.02
5 40.67859 -73.99049                     58
6 40.71234 -73.92416                     60

【问题讨论】:

    标签: r api google-maps ggmap census


    【解决方案1】:

    tigris 包包含一个名为 call_geolocator_latlon 的函数,它应该可以满足您的需求。这是一些使用

    的代码
        > coord <- data.frame(lat = c(40.61847, 40.71348, 40.69948, 40.70377, 40.67859, 40.71234),
        +                     long = c(-74.02123, -73.96551, -73.96104, -73.93116, -73.99049, -73.92416))
        > 
        > coord$census_code <- apply(coord, 1, function(row) call_geolocator_latlon(row['lat'], row['long']))
        > coord
               lat      long     census_code
        1 40.61847 -74.02123 360470152003001
        2 40.71348 -73.96551 360470551001009
        3 40.69948 -73.96104 360470537002011
        4 40.70377 -73.93116 360470425003000
        5 40.67859 -73.99049 360470077001000
        6 40.71234 -73.92416 360470449004075
    

    据我了解,15 位代码是几个代码放在一起(前两个是州,接下来三个是县,接下来六个是地区)。要获得人口普查区代码,我只需使用 substr 函数提取这六个数字。

        > coord$census_tract <- substr(coord$census_code, 6, 1)
        > coord
               lat      long     census_code census_tract
        1 40.61847 -74.02123 360470152003001       015200
        2 40.71348 -73.96551 360470551001009       055100
        3 40.69948 -73.96104 360470537002011       053700
        4 40.70377 -73.93116 360470425003000       042500
        5 40.67859 -73.99049 360470077001000       007700
        6 40.71234 -73.92416 360470449004075       044900
    

    希望对你有帮助!

    【讨论】:

    • 有没有办法矢量化call_geolocator_latlon?我想这样做,但坐标相对较大(200,000)。
    • 这个特定的函数看起来一次只调用一个 API。人口普查中的API Documentation 提到通过发送特殊格式的 csv 进行批量地理编码。他们给出的示例 curl 命令是:curl --form addressFile=@localfile.csv --form benchmark=9 https://geocoding.geo.census.gov/geocoder/locations/addressbatch --output geocoderesult.csv
    • 这很有帮助!如果我想指定一个特定的年份,我需要进行哪些修改?我试过coord$census_code &lt;- apply(coord, 1, function(row) call_geolocator_latlon(row['lat'], row['long'], vintage = 2010))coord$census_code &lt;- apply(coord, 1, function(row) call_geolocator_latlon(row['lat'], row['long'], rep(na, nrow(coord)), rep(2010, nrow(coord))),以及添加benchmarkvintage列然后做coord$census_code &lt;- apply(coord, 1, function(row) call_geolocator_latlon(row['lat'], row['long'], row['benchmark'], row['vintage'])
    猜你喜欢
    • 2021-10-10
    • 2020-10-30
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多