gpt4 book ai didi

r - 传单添加多条折线

转载 作者:行者123 更新时间:2023-12-04 16:05:08 25 4
gpt4 key购买 nike

我见过类似的问题,但到目前为止没有一个符合我的需求(至少在我理解它们的范围内)所以如果已经回答了这个问题,我会提前道歉。我也是一个 R 新手。

我有一个数据框,每行包含两组 Lat/Lon。实际数据包含数百行和多列相关数据。我正在绘制两组 Lat/Lon 的点,并希望将连接每一对的线绘制为单独的线。这是结果应该是什么样子的示例。

[![在此处输入图像描述][1]][1]

这是数据的简化示例。将有重复的 Event 和 Location 值。

Event_lat   Event_lon   Event   Location    Location_latitude   Location_longitude
40.791151 -124.054008 704832643 60005 40.790961 -124.1825609
38.900882 -122.660353 704653051 60009 38.873889 -122.709722
38.921488 -122.600049 704681147 60011 38.85111099 -122.593333
38.921488 -122.600049 704681147 60011 38.85111099 -122.593333
39.141877 -123.044724 706777142 60012 39.22794396 -123.064722
38.928113 -122.611386 708644013 60016 38.98950003 -122.7695828
39.02361 -122.72195 708582623 60016 38.98950003 -122.7695828
38.87586 -122.842684 708336092 60016 38.98950003 -122.7695828
39.239926 -123.145497 709020144 60017 39.24138798 -123.2163878
39.3307 -123.221674 708875205 60017 39.24138798 -123.2163878

这是映射点的代码的简化示例:
library(leaflet)
myData <-read.csv("Book1.csv",header=TRUE, sep=",")
leaflet()%>%
addTiles() %>%
addCircles(myData,lng = myData$lsr_lon,lat = myData$lsr_lat, radius=20, color = "red",group = "events") %>%
addCircles(myData,lng = myData$site_longitude,lat = myData$site_latitude, radius=20, color = "blue",group = 'Locations')

最佳答案

我自己刚刚开始使用 R 和传单的地理使用,所以这可能不是解决这个问题的最有效方法..不过它对我来说很好用......
随时欢迎反馈!

结果

result

样本数据

df <- read.table( text = "Event_lat   Event_lon   Event   Location    Location_latitude   Location_longitude
40.791151 -124.054008 704832643 60005 40.790961 -124.1825609
38.900882 -122.660353 704653051 60009 38.873889 -122.709722
38.921488 -122.600049 704681147 60011 38.85111099 -122.593333
38.921488 -122.600049 704681147 60011 38.85111099 -122.593333
39.141877 -123.044724 706777142 60012 39.22794396 -123.064722
38.928113 -122.611386 708644013 60016 38.98950003 -122.7695828
39.02361 -122.72195 708582623 60016 38.98950003 -122.7695828
38.87586 -122.842684 708336092 60016 38.98950003 -122.7695828
39.239926 -123.145497 709020144 60017 39.24138798 -123.2163878
39.3307 -123.221674 708875205 60017 39.24138798 -123.2163878", header = TRUE)

代码

我想创建一个空间线对象,我可以用 addPolylines 在传单中绘制它.

首先,我想用唯一的 id 创建一个只有纬度/经度的 data.frame每个事件位置的组合。
library(tidyverse)
#craete a column with unique id's per event-location combination
df <- df %>% mutate( id = row_number() )
#create a temporaty df with events
events.df <- df %>%
select( id, Event_lat, Event_lon) %>%
rename( latitude = Event_lat, longitude = Event_lon)
#create a temporaty df with locations
locations.df <- df %>%
select( id, Location_latitude, Location_longitude) %>%
rename( latitude = Location_latitude, longitude = Location_longitude)
#merge the two temp.df's together
df.sp <- bind_rows( events.df, locations.df )

# id latitude longitude
# 1 1 40.79115 -124.0540
# 2 2 38.90088 -122.6604
# 3 3 38.92149 -122.6000
# 4 4 38.92149 -122.6000
# 5 5 39.14188 -123.0447
# 6 6 38.92811 -122.6114
# 7 7 39.02361 -122.7220
# 8 8 38.87586 -122.8427
# 9 9 39.23993 -123.1455
# 10 10 39.33070 -123.2217
# 11 1 40.79096 -124.1826
# 12 2 38.87389 -122.7097
# 13 3 38.85111 -122.5933
# 14 4 38.85111 -122.5933
# 15 5 39.22794 -123.0647
# 16 6 38.98950 -122.7696
# 17 7 38.98950 -122.7696
# 18 8 38.98950 -122.7696
# 19 9 39.24139 -123.2164
# 20 10 39.24139 -123.2164

现在创建空间线对象
library(maptools)
library(sp)
#make df.sp a spatialdataframe
coordinates( df.sp ) <- c( "longitude", "latitude" )

#create a list per id
id.list <- sp::split( df.sp, df.sp[["id"]] )

#initialisation of counter
id <- 1

#for each id, create a line that connects all points with that id
for ( i in id.list ) {
event.lines <- SpatialLines( list( Lines( Line( i[1]@coords ), ID = id ) ),
proj4string = CRS( "+init=epsg:4326" ) )
if ( id == 1 ) {
sp_lines <- event.lines
} else {
sp_lines <- spRbind( sp_lines, event.lines )
}
id <- id + 1
}

查看。
head(sp_lines,1)

# An object of class "SpatialLines"
# Slot "lines":
# [[1]]
# An object of class "Lines"
# Slot "Lines":
# [[1]]
# An object of class "Line"
# Slot "coords":
# longitude latitude
# [1,] -124.0540 40.79115
# [2,] -124.1826 40.79096
#
# Slot "ID":
# [1] "1"
#
# Slot "bbox":
# min max
# x -124.18256 -124.05401
# y 40.79096 40.79115
#
# Slot "proj4string":
# CRS arguments:
# +init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0

现在,在传单中绘制点和折线
library(leaflet)
leaflet()%>%
addTiles() %>%
addCircles(df,lng = df$Event_lon, lat = df$Event_lat, radius=20, color = "red", group = "events") %>%
addCircles(df,lng = df$Location_longitude, lat = df$Location_latitude, radius=20, color = "blue", group = 'Locations') %>%
addPolylines( data = sp_lines )

关于r - 传单添加多条折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50867215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com