首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >映射点和多边形

映射点和多边形
EN

Stack Overflow用户
提问于 2017-06-27 12:17:21
回答 1查看 864关注 0票数 1

我是一个R初学者第一次处理与R和空间数据。所以我希望我能说清楚。

我有一个意大利地区的档案,分为几个人口普查区。另一方面,我有一个csv文件,有一个案例列表和每个案例的地址。我想要地图点和形状文件,并得到有多少点是在每个人口普查部门。

以下是我从现在开始所做的事情:

代码语言:javascript
运行
复制
#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")

现在,我可以分别绘制cases.points和shapefile,但不能将它们添加到相同的绘图中。同时,正如我所说,我想计算每个多边形(即“区域”的人口普查划分)中有多少个点。

我必须承认我对地理不太感兴趣。我怀疑不同的坐标和/或投影参考系统可能是问题所在,因此我进行了检查。

代码语言:javascript
运行
复制
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"

形状文件坐标是否可能是以度为单位,而大小写坐标是十进制的呢?如果是的话,如何将其转化?

谢谢你,萨罗

EN

Stack Overflow用户

回答已采纳

发布于 2017-06-27 13:14:49

您有两个不同的投影-您的“区域”形状文件投影在UTM区32和您告诉R使用Web Mercator的“案例”。然而,如果你只是从谷歌下载案例数据为lat/long,那么你就不想告诉R他们的投影是Web Mercator,因为它不是--它是未投影的WGS 84,所以你会想要EPSG 4326。what是谷歌用于显示地图的工具,但如果下载lat/long,这只是非投影坐标。若要正确读取lat/long数据,请使用:

代码语言:javascript
运行
复制
library(sp)
cases.points <- SpatialPointsDataFrame(cases[,3:4], cases, 
                                   proj4string = CRS("+init=EPSG:4326"))

然后,对于投影,您需要spTransform -尝试:

代码语言:javascript
运行
复制
cases.points.utm32 <- spTransform(cases.points, CRS(proj4string(region)))

使用不适当或不匹配的投影可能会造成许多问题,而且它们并不总是立即被注意到的。

编辑:对于在多边形中选择点,您需要over()函数,也要来自sp包(这是一个独立的问题)。请阅读sp包的基本功能以及sp类是如何工作的-下面的内容基本上是从over()的help部分复制的。

代码语言:javascript
运行
复制
region$pointCount <- sapply(over(region, geometry(cases.points), 
                             returnList = TRUE), length)
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44780107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档