簡體   English   中英

映射點和多邊形

[英]Mapping points and polygons

我是R初學者,第一次使用R和空間數據進行處理。 所以我希望我能說清楚。

我有一個意大利地區的shapefile,分為幾個人口普查部門。 另一方面,我有一個csv文件,其中包含一個案件列表和每個案件的地址。 我想映射點和shapefile,並獲取每個普查區中有多少點的計數。

這是我從現在開始所做的事情:

#get cases file
cases <- read.csv("cases.csv", sep =';', header = TRUE)
names(cases)
[1] "name"    "address"

#geocode addresses from Google Maps
library(GISTools)
library(rgeos)
library(ggmap)
geolocalize <- geocode(as.character(cases$address))

# bind latitude and longitude to the previous cases data frame
cases <- data.frame(cases, geolocalize)
names(cases)
[1] "name"    "address" "lon"     "lat"

#make cases a SpatialPointDataFrame
#since addresses were retrieved using GoogleMaps, I set proj4string as follows
cases.points <- SpatialPointsDataFrame(cases[,3:4], cases, proj4string = CRS("+init=EPSG:3857"))

#get the shapefile
region <- readOGR("R02_11_WGS84.shp")

現在,我能夠分別繪制case.points和shapefile,但不能將它們添加到同一圖中。 就像我說的那樣,我還要計算每個多邊形中有多少個點(即“區域”的人口普查分區)。

我必須承認我不太熱衷於地理。 我懷疑是否可能存在不同的坐標和/或投影參考系,因此我進行了檢查。

head(coordinates(region))
[,1]    [,2]
0 364509.0 5065900
1 363916.3 5056629
2 372585.0 5068078
3 360692.3 5048321
4 356029.7 5062399
5 360012.1 5065663


coordinates(cases)
lon      lat
[1,] 7.323667 45.73664

proj4string(region)
[1] "+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"

proj4string(cases.points)
[1] "+init=EPSG:3857 +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"

shapefile坐標可能以度為單位,而格坐標是十進制? 如果是這樣,如何轉換它們?

謝謝,薩羅

您有兩種不同的投影方式-您的“區域” shapefile投影在UTM區域32中,並且您告訴R將Web Mercator用於“案例”。 但是,如果您只是從Google下載經/緯度的案例數據,則您不想告訴R他們的投影是Web Mercator,因為不是-它不是投影的WGS 84,所以您需要EPSG 4326。 Web Mercator是Google用於顯示地圖的工具,但是如果您下載經/緯度,那只是未投影的坐標。 要正確讀取經/緯度數據,請使用:

library(sp)
cases.points <- SpatialPointsDataFrame(cases[,3:4], cases, 
                                   proj4string = CRS("+init=EPSG:4326"))

然后對於投影,您需要spTransform-嘗試:

cases.points.utm32 <- spTransform(cases.points, CRS(proj4string(region)))

使用不適當或不匹配的預測會產生很多問題,而且這些問題並不總是立即可見。

編輯:對於在多邊形內選擇點,您還希望從sp包獲得over()函數(這是一個單獨的問題)。 請仔細閱讀sp軟件包的基本功能以及sp類的工作原理-基本上是從over()的幫助部分復制以下內容。

region$pointCount <- sapply(over(region, geometry(cases.points), 
                             returnList = TRUE), length)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM