如何使用 R 找到哪个医院在哪个街区下?

How to find which hospital is under which block using R?

我有一个地址列表,我对其进行了地理编码以找到它们的纬度和经度。 这些地址有两个实体块名称和医院。 我有两个 them.Now 的 latlong 列表 我想知道哪个医院在哪个街区下?如何做到这一点? 我从列表中添加了一些条目,以便提高可理解性,原始列表中每个街区和医院大约有 100 个条目。

    Blocks List

    address lat long    accuracy
    Ajabpur 30.0431765  78.8255226  locality
    UHC Ajabpur 30.0431765  78.8255226  locality
    Asan Bag    30.5829083  77.7523608  locality
    Ashtad  30.6865869  77.8453043  locality
    Badripur    30.2843949  78.0656264  sublocality_level_1
    Balawala    30.2661801  78.1062092  sublocality_level_1

    Hospitals List
    hospitals   lat long    accuracy
    CHC Chakrata    30.7016208  77.8695996  locality
    PHC Tuni    30.066753   79.0192997  administrative_area_level_1
    SC- Bayala  30.7540332  77.7509303  locality
    SAD Bulhar  30.066753   79.0192997  administrative_area_level_1
    SAD Hatal   30.066753   79.0192997  administrative_area_level_1
    SAD Lakhwar 30.5345496  77.9610158  locality

这里有一些可以帮助您入门的东西。这是 over() (https://cran.r-project.org/web/packages/sp/vignettes/over.pdf) 的重要资源。

首先,您为 data_table 数据集创建一个缓冲区 (gbuffer())(多边形)。您可以更改缓冲区的大小。您还需要将 data_hop 数据集转换为空间数据框。现在您需要验证您的点数是否落入 +zone=47 并确保您拥有正确的 epsg:24047 (http://spatialreference.org/ref/epsg/indian-1975-utm-zone-47n/)。我没有得到我想要的输出,但我注意到您的某些块的坐标完全相同。请务必修复此问题。

希望这段代码能帮到您!

library(sp)
library(rgdal)
library(geosphere)
library(rgeos)

data_table <- read.table(text="
add         lat         long
Ajabpur     30.0431765  78.8255226
UHCAjabpur  30.0431765  78.8255226
AsanBag    30.5829083  77.7523608
Ashtad      30.6865869  77.8453043
Badripur    30.2843949  78.0656264
Balawala    30.2661801  78.1062092
Ballupur    30.3335862  78.0115041
Barontha    30.066753   79.0192997",
    header = TRUE)
#    
data_hop <- read.table(text="
    hospitals   lat long    accuracy
    CHCChakrata    30.7016208  77.8695996  locality
    PHCTuni    30.066753   79.0192997  administrative_area_level_1
    SC-Bayala  30.7540332  77.7509303  locality
    SADBulhar  30.066753   79.0192997  administrative_area_level_1
    SADHatal   30.066753   79.0192997  administrative_area_level_1
    SADLakhwar 30.5345496  77.9610158  locality",
    header = TRUE)
#    
coordinates(data_table) <- ~ long + lat 
proj4string(data_table) <- CRS("+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84")
pc <- spTransform(data_table, CRS( "+init=epsg:24047"))
pc10m <- gBuffer(pc, width=10, byid=TRUE)
#
coordinates(data_hop) <- ~ long + lat 
proj4string(data_hop) <- CRS("+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84")
WWc <- spTransform(data_hop, CRS("+init=epsg:24047")) 
#
testb <- over(WWc, pc10m, returnList = TRUE) #will return a list
test <- over(WWc, pc10m)
#
data_hop2 <- data_hop@data
finalb <- cbind(data_hop2, test)

> finalb
    hospitals                    accuracy     add
1 CHCChakrata                    locality Ajabpur
2     PHCTuni administrative_area_level_1 Ajabpur
3   SC-Bayala                    locality Ajabpur
4   SADBulhar administrative_area_level_1 Ajabpur
5    SADHatal administrative_area_level_1 Ajabpur
6  SADLakhwar                    locality Ajabpur