Daha çox

Birden çox poliqonlu SpatialPolygonsDataFrame-ə məlumat çərçivəsi


Bir çox poliqonlu bir poliqon, bir çoxbucaq üçün bir neçə nöqtə olan bir məlumat çərçivəm var. Bunu a-ya necə çevirə bilərəm?MəkanPolygonsDataFrameetiraz?

Budur mənim məlumat çərçivəm:

> Buildings_df lon lat id 1 96.13597 16.83363 convocation_hall 2 96.13580 16.83315 convocation_hall 3 96.13631 16.83298 convocation_hall 4 96.13656 16.83351 convocation_hall 5 96.13400 16.83104 judson_church 6 96.13392 16.83073 judson_church 7 96.13432 16.83064 judson_church 8 96.13444 16.83085 judson_church 9 96.13596 16.83074 the_library 10 96.13586 16.83044 the_library 11 96.13615 16.83035 the_library 12 96.13626 16.83065 kitabxana 13 96.13599 16.83073 kitabxana

Bu:

> dput (барилга_df) quruluşu (siyahı (lon = c (96.135972, 96.1358, 96.136315, 96.136562, 96.133997, 96.133922, 96.134319, 96.134437, 96.135961, 96.135864, 96.136154, 96.136261, 96.13599.8, 16.135998, 16.135998, 16.135998, 16.833512, 16.831038, 16.830729, 16.830637, 16.830853, 16.83074, 16.830442, 16.83035, 16.830647, 16.830729), id = quruluş (c (1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3, 3L, 3L , 3L), .Label = c ("convocation_hall", "judson_church", "the_library"), class = "factor")), .Names = c ("lon", "lat", "id"), sıra. adlar = c (NA, -13L), sinif = "data.frame")

Bu data.frame-dən sonra bir siyahıya, sonra çoxbucaqlılara, daha sonra bir SpatialPolygons obyektinə çevirirəm

# bir siyahı qurun bina_sahibi <- bölün (binalar_df, bina_df $ id) # siyahıda yalnız lon-lats istəyər, bina_sahibinin adları deyil <- lapply (binalar_sahibi, funksiya (x) {x ["id"] <- NULL; x}) # məkan çoxbucaqlı halına data.frame, cf. http://jwhollister.com/iale_open_science/2015/07/05/03-Spatial-Data-In-R/ # SpatialPolygons Object yaradın, koordinatları çoxbucağa çevirin ps <- sapply (building_list, Polygon) # id dəyişənini əlavə edin p1 < - Çoxbucaqlılar (ps, ID = 1) # SpatialPolygons obyekti yaradır my_spatial_polys <- SpatialPolygons (list (p1), proj4string = CRS ("+ proj = longlat + datum = WGS84")) # görək məkan (my_spatial_polys)

İndiyə qədər yaxşı:

Və çoxbucaqlıların hər biri orada görünür ...

> str (my_spatial_polys) Formal sinif 'SpatialPolygons' [paketi "sp"] 4 yuvalı… @ çoxbucaqlılar: 1-in siyahısı… $: Formal sinif 'Polygons' [paketi "sp"] 5 yuvalı… @ Poligons: 3 siyahısı … $ Convocation_hall: 5 yuvalı rəsmi sinif 'Poligon' [paketi "sp"]… @ labpt: num [1: 2] 96.1 16.8… @ sahəsi: num 3.08e-07… @ deşik: logi YALAN ... @ ringDir: int 1… @ coords: num [1: 5, 1: 2] 96.1 96.1 96.1 96.1 96.1… $ judson_church: Formal sinif 'Çoxbucaqlı' [paket "sp"] 5 yuvalı… @ labpt: num [1: 2] 96.1 43.3 … @ Sahə: num 0.0204… @ delik: logi TRUE… @ ringDir: int -1… @ coords: num [1: 5, 1: 2] 96.1 96.1 96.1 96.1 96.1… $ kitabxana: Formal sinif 'Poligon' [paket " sp "] 5 yuvalı… @ labpt: num [1: 2] 96.1 43.3… @ sahəsi: num 0.00512… @ delik: logi DOĞRU ... @ ringDir: int -1… @ koordinatlar: num [1: 6, 1: 2 ] 96.1 96.1 96.1 96.1 96.1… @ plotOrder: int [1: 3] 1 2 3… @ labpt: num [1: 2] 96.1 16.8… @ ID: chr "1"… @ area: num 0.0302… @ plotOrder: int 1… @ bbox: num [1: 2, 1: 2] 96.1 16.8 96.1 16.8… - attr (*, " dimnames ") = 2-nin siyahısı… $: chr [1: 2]" x "" y "... $: chr [1: 2]" min "" max "… @ proj4string: Formal sinif 'CRS' [paketi" sp "] 1 slot ilə… @ projargs: chr" + proj = longlat + datum = WGS84 + ellps = WGS84 + towgs84 = 0,0,0 "

Ancaq gözlədiyim şəkildə qruplaşmırlar deyəsən. Üç şəxsiyyət dəyişənini təyin etməyə çalışdığımda səhv olur. SpatialPolygons-un hər birinin öz şəxsiyyət vəsiqəsi olan üç çoxbucaqlı olmasını necə əldə edə bilərəm?


Bir həll yolu dəyişdirməkdirp1 <- Poliqonlar (ps, ID = 1)birmüraciət edinkimi funksiyaÇoxbucaqlar ()funksiyası.-dəki çoxbucaqlıların hər birində ayrı-ayrılıqda işləyirpsobyekt.

ps <- lapply (building_list, Polygon) # add id dəyişən p1 <- lapply (seq_along (ps), function (i) Poligons (list (ps [[i]]), ID = names (building_list) [i])) # SpatialPolygons obyekti yaratmaq my_spatial_polys <- SpatialPolygons (p1, proj4string = CRS ("+ proj = longlat + datum = WGS84"))

O zamanMəkanPolygonsDataFramegözlənilən kimi şəxsiyyət vəsiqələri ilə, çoxbucaqlı başına bir unikal şəxsiyyət:

my_spatial_polys_df <- SpatialPolygonsDataFrame (my_spatial_polys, data.frame (id = unikal (binalar_df $ id), sıra.names = unikal (binalar_df $ id)))> str (my_spatial_polys_df) Formal sinif 'SpatialPolyg' slot… @ data: 'data.frame': 3 obs. 1 dəyişəndən:… $ id: 3 səviyyəli "convocation_hall" faktoru,…: 1 2 3… @ çoxbucaqlılar: 3 siyahısı: $: Formal sinif 'Çoxbucaqlar' [paket "sp"] 5 yuvalı… @ Çoxbucaqlılar: 1… $ siyahısı: 5 yuvalı rəsmi sinif 'Poliqon' [paket "sp"]… @ labpt: num [1: 2] 96.1 16.8… @ sahəsi: num 3.08e-07… @ deşik: logi YALAN ... @ ringDir : int 1… @ coords: num [1: 5, 1: 2] 96.1 96.1 96.1 96.1 96.1… @ plotOrder: int 1… @ labpt: num [1: 2] 96.1 16.8… @ ID: chr "convocation_hall"… @ sahə: num 0.0302… $: 5 yuvalı formal sinif 'Çoxbucaqlılar' [paket "sp"]… @ Çoxbucaqlılar: Siyahı 1… $: 5 yuvalı rəsmi sinif 'Çoxbucaqlı' [paket "sp"]… @ labpt: num [1: 2] 96.1 16.8… @ sahə: num 1.23e-07… @ delik: logi YALAN ... @ ringDir: int 1… @ coords: num [1: 5, 1: 2] 96.1 96.1 96.1 96.1 96.1… @ plotOrder : int 1… @ labpt: num [1: 2] 96.1 16.8… @ ID: chr "judson_church" ... @ area: num 0.0204… $: Formal sinif 'Poligons' [paketi "sp"] 5 slot ilə… @ Poligons: 1… $ siyahısı: 5 yuvalı rəsmi sinif 'Poliqon' [paket "sp"]… @ labpt: n um [1: 2] 96.1 16.8… @ sahə: num 9.7e-08… @ delik: logi FALSE ... @ ringDir: int 1… @ coords: num [1: 6, 1: 2] 96.1 96.1 96.1 96.1 96.1… @ plotOrder: int 1… @ labpt: num [1: 2] 96.1 16.8… @ ID: chr "the_library" ... @ area: num 0.00512… @ plotOrder: int [1: 3] 1 2 3… @ bbox: num [1 : 2, 1: 2] 96.1 16.8 96.1 16.8… - attr (*, "dimnames") = 2'nin siyahısı… $: chr [1: 2] "x" "y" ... $: chr [1: 2] " min "" max "... @ proj4string: Formal sinif 'CRS' [paketi" sp "] 1 yuvalı… @ projargs: chr" + proj = longlat + datum = WGS84 + ellps = WGS84 + towgs84 = 0,0,0 "


Videoya baxın: Creating a Map from a Shapefile with ggplot2 and rgdal (Oktyabr 2021).