我想找出数据集中每栋房屋到市中心圆形边界的距离。例如,当房子在巴黎(当然市中心也是巴黎)时,找到离市中心圆形边界最近的距离。我已经设法划定了我正在查看的 4 个城市中心的边界。所以从技术上讲,一个房子的距离可以计算到四个不同的边界。对于房子,我可以访问房子所在的city以及latitude和longitude。但是我想设置一个 for 循环,这样当我经过每栋房子时,R 能够查看它所在的城市,然后计算到该城市边界的距离。我数据中的城市名称作为因素,但可以转换为字符串。
这是房屋坐标的外观(点变量)以及如何计算到“圆”是城市边界的边界的距离。
以下只是展示每个城市的市中心是如何分配的
# Define the latitude and longitude coordinates of city center
aarhus_center <- data.frame(lon = 10.203921, lat = 56.162939)
copenhagen_center<-data.frame(lon = 12.5804, lat = 55.6801)
odense_center<-data.frame(lon = 10.3883, lat = 55.3959)
aalborg_center<-data.frame(lon=9.9197,lat=57.048)
# Define the radius of the circle (in meters)
radius <- 500
# Define a function to convert meters to degrees of latitude and longitude
meters_to_degrees <- function(meters, latitude) {
degrees_lat <- meters / 111319.9
degrees_lon <- meters / (111319.9 * cos(latitude * pi / 180))
return(list(degrees_lat = degrees_lat, degrees_lon = degrees_lon))
}
## Calculate the degrees of latitude and longitude
#Copenhagen
degrees_C <- meters_to_degrees(radius, copenhagen_center$lat)
#Aarhus
degrees_AAR <- meters_to_degrees(radius, aarhus_center$lat)
#Odense
degrees_O<-meters_to_degrees(radius, odense_center$lat)
#Aalborg
degrees_AAl<-meters_to_degrees(radius, aalborg_center$lat)
# Create a circle using the calculated coordinates and radius
#Copenhagen
circle_C <- data.frame(
lon = copenhagen_center$lon + degrees$degrees_lon * cos(seq(0, 2 * pi, length.out = 100)),
lat = copenhagen_center$lat + degrees$degrees_lat * sin(seq(0, 2 * pi, length.out = 100))
)
#Aarhus
circle_AAR <- data.frame(
lon = aarhus_center$lon + degrees$degrees_lon * cos(seq(0, 2 * pi, length.out = 100)),
lat = aarhus_center$lat + degrees$degrees_lat * sin(seq(0, 2 * pi, length.out = 100))
)
#Odense
circle_O <- data.frame(
lon = odense_center$lon + degrees$degrees_lon * cos(seq(0, 2 * pi, length.out = 100)),
lat = odense_center$lat + degrees$degrees_lat * sin(seq(0, 2 * pi, length.out = 100))
)
#Aalborg
circle_AAL <- data.frame(
lon = aalborg_center$lon + degrees$degrees_lon * cos(seq(0, 2 * pi, length.out = 100)),
lat = aalborg_center$lat + degrees$degrees_lat * sin(seq(0, 2 * pi, length.out = 100))
)