如何使用 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
我有一个地址列表,我对其进行了地理编码以找到它们的纬度和经度。 这些地址有两个实体块名称和医院。 我有两个 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