LINESTRING 도형 열이있는 SF 개체에서 시작하는 Linnet 개체를 어떻게 만들 수 있나요?

기민한

현재 저는 선형 네트워크 (자동차 충돌)에서 포인트 패턴 이벤트가있는 프로젝트를 진행하고 있으며 spatstat책의 17 장 "공간 포인트 패턴 : R을 사용한 방법론 및 응용"을 읽고 있습니다.

이 책의 저자 lpp는 선형 네트워크에서 점 패턴을 분석하는 데 필요한 새로운 객체 클래스를 정의했다고 설명 합니다. lpp개체 의 골격은 개체이며 linnet개체를 생성하는 여러 기능이 있습니다 linnet. 내 응용 프로그램의 경우 관련 기능은 linnetas.linnet입니다. 이 함수 linnet는 각 꼭지점의 공간적 위치와 가장자리로 연결된 꼭지점에 대한 정보로부터 선형 네트워크 객체를 생성하고, 지정된 거리 임계 값을 사용하여 네트워크의 연결성을 추론하는 객체 로 변환되는 객체에 as.linnet함수를 적용 할 수 있습니다. .psplinnet

제가이 질문을하는 이유 sfLINESTRING지오메트리가 있는 객체 에서 시작하는 linnet 객체를 효율적으로 만드는 방법을 모르기 때문 입니다. 내가 아는 한, sf객체를 sp객체 (즉, SpatialLines객체)로 변환 할 수 있습니다. 그런 다음 sp객체를 객체로 변환 psp( as.psp함수 사용 ) 한 다음 다음을 psp사용하여 객체를 linnet 객체로 변환 할 수 있습니다 .as.psp.linnet함수 (maptools 패키지에 정의 됨). 이 접근 방식의 주요 문제는 (패키지 작성자가 책에서 말했듯이) 해당하는 linnet이 네트워크에서 인공 교차를 생성하기 때문에 네트워크 데이터에서 고가 또는 지하가 발생할 때마다 추론 된 네트워크가 잘못되었다는 것입니다. 게다가 저자가 책에서 말했듯이 코드는 기하 급수적으로 느려집니다.

다음 코드는 지금까지 수행 한 작업의 단순화 된 버전이지만 객체에서 linnet 객체를 생성하는 더 쉽고 더 나은 방법이 있어야한다고 생각 sf합니다. linnet함수를 사용 하지만 문제는 네트워크의 해당 정점에 대한 (희소 한) 인접 행렬 또는 네트워크 가장자리 사이의 링크 행렬을 만드는 방법을 모른다는 것입니다.

# packages
library(sf)
#> Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
library(spatstat)
#> Loading required package: spatstat.data
#> Loading required package: nlme
#> Loading required package: rpart
#> 
#> spatstat 1.61-0       (nickname: 'Puppy zoomies') 
#> For an introduction to spatstat, type 'beginner'
#> 
#> Note: spatstat version 1.61-0 is out of date by more than 11 weeks; a newer version should be available.
library(maptools)
#> Loading required package: sp
#> Checking rgeos availability: TRUE
library(osmdata)
#> Data (c) OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright


# download data
iow_polygon <- getbb("Isle of Wight, South East, England", format_out = "sf_polygon", featuretype = "state") %>% 
  st_transform(crs = 27700)
iow_highways <- st_read("https://download.geofabrik.de/europe/great-britain/england/isle-of-wight-latest.osm.pbf", layer = "lines") %>% 
  st_transform(crs = 27700)
#> Reading layer `lines' from data source `https://download.geofabrik.de/europe/great-britain/england/isle-of-wight-latest.osm.pbf' using driver `OSM'
#> Simple feature collection with 44800 features and 9 fields
#> geometry type:  LINESTRING
#> dimension:      XY
#> bbox:           xmin: -5.716262 ymin: 43.35489 xmax: 1.92832 ymax: 51.16517
#> epsg (SRID):    4326
#> proj4string:    +proj=longlat +datum=WGS84 +no_defs

# subset the data otherwise the code takes ages
iow_highways <- iow_highways[iow_polygon, ] %>% 
  subset(grepl(pattern = c("primary|secondary|tertiary"), x = highway))

# transform as sp 
iow_highways_sp <- as(iow_highways %>% st_geometry(), "Spatial")

# transform as psp
iow_highways_psp <- as.psp(iow_highways_sp)

# transform as linnet
iow_highways_linnet <- as.linnet.psp(iow_highways_psp, sparse = TRUE)

네트워크의 각 꼭지점의 좌표를 추출 할 수 있습니다.

stplanr::line2points(iow_highways)
#> Simple feature collection with 2814 features and 1 field
#> geometry type:  POINT
#> dimension:      XY
#> bbox:           xmin: 430780.7 ymin: 75702.05 xmax: 464851.7 ymax: 96103.72
#> epsg (SRID):    27700
#> proj4string:    +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs
#> First 10 features:
#>    id                  geometry
#> 1   1 POINT (464851.7 87789.73)
#> 2   1 POINT (464435.4 88250.85)
#> 3   2 POINT (464390.9 87412.27)
#> 4   2 POINT (464851.7 87789.73)
#> 5   3 POINT (462574.6 88987.62)
#> 6   3 POINT (462334.6 88709.92)
#> 7   4 POINT (464066.9 87576.84)
#> 8   4 POINT (464390.9 87412.27)
#> 9   5   POINT (464420 88227.79)
#> 10  5 POINT (464398.7 88225.33)  

하지만 인접 행렬을 만드는 방법을 모르겠습니다.

2019-12-02에 reprex 패키지 (v0.3.0)로 생성됨

Ege Rubak

로가는 psp도중에 형식을 검토하는 이유를 잘 모르겠습니다 linnet. 첫 번째 코드 청크의 마지막 두 줄을 다음과 같이 바꾸십시오.

iow_highways_linnet <- as.linnet.SpatialLines(iow_highways_sp)

이것은 정점을 공유하는 선 으로 SpatialLines직접 변환 linnet하고 융합합니다. 두 선이 교차점에 꼭지점이 없으면 지하도가 고가도로 융합 될 것이라고 생각하지 않습니다. 아래 예를 참조하십시오.

l1 <- sf::st_linestring(matrix(c(-1,1,-1,1,1,1,-1,-1), ncol = 2))
l2 <- sf::st_linestring(matrix(c(-1,-1,1,1,2,1,-1,-2), ncol = 2))
l_sf <- sf::st_sf(id = 1:2, geom = sf::st_sfc(l1,l2))
l_sp <- sf::as_Spatial(l_sf)
l <- maptools::as.linnet.SpatialLines(l_sp)
plot(l)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

구멍이있는 다각형에서 sf 개체를 만들고 crs 설정

분류에서Dev

두 개의 열을 대체 형식으로 혼합하는 Pandas 데이터 프레임에서 텍스트 파일을 어떻게 만들 수 있습니까?

분류에서Dev

ID가있는 개체에 대해 개체를 어떻게 만들 수 있습니까?

분류에서Dev

ID가있는 개체에 대해 개체를 어떻게 만들 수 있습니까?

분류에서Dev

vba에서 0과 구분할 수있는 기본 빈 개체를 어떻게 만들 수 있습니까?

분류에서Dev

예를 들어 문자열과 같은 객체를 어떻게 만들 수 있습니까? 많은 속성과 기본 console.log / evaluation 값이있는 개체

분류에서Dev

숫자를 특정 문자열과 연결하는 개체를 어떻게 만들 수 있습니까?

분류에서Dev

Chrome 앱에지도 개체를 어떻게 저장할 수 있나요?

분류에서Dev

개체를 어떻게 만들 수 있습니까?

분류에서Dev

N 개의 0이있는 배열을 어떻게 만들 수 있습니까?

분류에서Dev

어떻게 같은 개체의 수를 포함 생성자를 만들 수 있지만, 하나의 빈을 무시하는 경우?

분류에서Dev

개수를 알 수없는 개체 목록에 대한 MySql 매개 변수를 어떻게 만들 수 있습니까?

분류에서Dev

구조체에서 사용하지 않는 유형 매개 변수를 어떻게 가질 수 있습니까?

분류에서Dev

Azure DevOps에서 보드를 어떻게 만들 수 있나요?

분류에서Dev

Android에서 앱을 닫아도 작동 할 수있는 타이머를 어떻게 만들 수 있습니까?

분류에서Dev

여러 변수가있는 임의의 개체를 어떻게 만들 수 있습니까?

분류에서Dev

다른 개체 목록에서 데이터를 가져 오는 목록을 어떻게 만들 수 있습니까?

분류에서Dev

3 개의 개체를 변형하여 위치를 바꿀 수 있지만 개체가 이미 가고있는 위치로 이동하지 않도록하려면 어떻게해야합니까?

분류에서Dev

파이썬에서 서로 반복되는 두 개의 열을 어떻게 만들 수 있습니까?

분류에서Dev

값이있는 개체를 만들고지도에 추가

분류에서Dev

다른 개체의 속성 인 개체가있는 경우 속성 개체에서 기본 개체를 어떻게 참조 할 수 있습니까?

분류에서Dev

업데이트 작업을위한 양식 개체를 어떻게 만들 수 있습니까?

분류에서Dev

하나의 요청에서 자식 개체와 부모 개체를 모두 만들 수있는 방법 Django Rest Framework

분류에서Dev

Cloud Firestore에서 읽을 수있는 타임 스탬프를 만들려면 어떻게하나요?

분류에서Dev

javafx에서 객체의 배열 목록이있는 객체에서 콤보 상자를 어떻게 만들 수 있습니까?

분류에서Dev

문자열에있는 16 개 자리가있을 경우 어떻게 while 루프 체크를 만들려면

분류에서Dev

배열에있는 개체를 어떻게 가져올 수 있습니까?

분류에서Dev

Terraform을 사용하여 Azure에서 특수 이미지를 만들 수 있나요? 어떻게?

분류에서Dev

화면에서 나가지 않는 개체를 어떻게 애니메이션 할 수 있습니까?

Related 관련 기사

  1. 1

    구멍이있는 다각형에서 sf 개체를 만들고 crs 설정

  2. 2

    두 개의 열을 대체 형식으로 혼합하는 Pandas 데이터 프레임에서 텍스트 파일을 어떻게 만들 수 있습니까?

  3. 3

    ID가있는 개체에 대해 개체를 어떻게 만들 수 있습니까?

  4. 4

    ID가있는 개체에 대해 개체를 어떻게 만들 수 있습니까?

  5. 5

    vba에서 0과 구분할 수있는 기본 빈 개체를 어떻게 만들 수 있습니까?

  6. 6

    예를 들어 문자열과 같은 객체를 어떻게 만들 수 있습니까? 많은 속성과 기본 console.log / evaluation 값이있는 개체

  7. 7

    숫자를 특정 문자열과 연결하는 개체를 어떻게 만들 수 있습니까?

  8. 8

    Chrome 앱에지도 개체를 어떻게 저장할 수 있나요?

  9. 9

    개체를 어떻게 만들 수 있습니까?

  10. 10

    N 개의 0이있는 배열을 어떻게 만들 수 있습니까?

  11. 11

    어떻게 같은 개체의 수를 포함 생성자를 만들 수 있지만, 하나의 빈을 무시하는 경우?

  12. 12

    개수를 알 수없는 개체 목록에 대한 MySql 매개 변수를 어떻게 만들 수 있습니까?

  13. 13

    구조체에서 사용하지 않는 유형 매개 변수를 어떻게 가질 수 있습니까?

  14. 14

    Azure DevOps에서 보드를 어떻게 만들 수 있나요?

  15. 15

    Android에서 앱을 닫아도 작동 할 수있는 타이머를 어떻게 만들 수 있습니까?

  16. 16

    여러 변수가있는 임의의 개체를 어떻게 만들 수 있습니까?

  17. 17

    다른 개체 목록에서 데이터를 가져 오는 목록을 어떻게 만들 수 있습니까?

  18. 18

    3 개의 개체를 변형하여 위치를 바꿀 수 있지만 개체가 이미 가고있는 위치로 이동하지 않도록하려면 어떻게해야합니까?

  19. 19

    파이썬에서 서로 반복되는 두 개의 열을 어떻게 만들 수 있습니까?

  20. 20

    값이있는 개체를 만들고지도에 추가

  21. 21

    다른 개체의 속성 인 개체가있는 경우 속성 개체에서 기본 개체를 어떻게 참조 할 수 있습니까?

  22. 22

    업데이트 작업을위한 양식 개체를 어떻게 만들 수 있습니까?

  23. 23

    하나의 요청에서 자식 개체와 부모 개체를 모두 만들 수있는 방법 Django Rest Framework

  24. 24

    Cloud Firestore에서 읽을 수있는 타임 스탬프를 만들려면 어떻게하나요?

  25. 25

    javafx에서 객체의 배열 목록이있는 객체에서 콤보 상자를 어떻게 만들 수 있습니까?

  26. 26

    문자열에있는 16 개 자리가있을 경우 어떻게 while 루프 체크를 만들려면

  27. 27

    배열에있는 개체를 어떻게 가져올 수 있습니까?

  28. 28

    Terraform을 사용하여 Azure에서 특수 이미지를 만들 수 있나요? 어떻게?

  29. 29

    화면에서 나가지 않는 개체를 어떻게 애니메이션 할 수 있습니까?

뜨겁다태그

보관