![](/img/trans.png)
[英]How to remove '$osm_points' that are used plot other spatial objects like '$osm_polygons' and '$multipolygons' within osmdata objects in R
[英]How to import OSM polygons data from PostGIS to R?
我是使用R进行空间分析的新手。使用此链接,我下载了.osm.pbf格式的OSM数据。 然后,我使用osm2pgsql工具在PostgreSQL(PostGIS扩展)中获取数据。 现在我的数据库中有几个表,我想访问R中的多边形表,然后对多边形矢量数据执行空间分析。 我一直在搜索分配,但是无法在R中导入所需的数据。我发现本教程与我正在寻找的教程非常相似,但在Python中却很相似。 我想使用R从PostGIS访问多边形数据。
因此,从本质上讲,我想了解R与PostGIS的交互。 有人可以推荐我有关此主题的任何书籍吗? 到目前为止,由于找不到适合我的Windows 10 64位计算机上的博客或教程。
感谢您的宝贵时间,期待您的建议。
我仍然没有找到一种使用R中可用的rgdal包从PostGIS获取所需数据的方法。可能是因为我的操作系统问题。 (我不确定,因为我不是专家)。 但是我找到了rgdal的替代方法,它确实完成了我想要的操作。 代码如下:
library(RPostgreSQL)
library(rgeos)
library(sp)
# Load data from the PostGIS server
conn = dbConnect(
dbDriver("PostgreSQL"), dbname="dbNAME", host="localhost", port=5432,
user="username", password="pw"
)
strSQL = "SELECT osm_id, name, area, highway, railway, place, ST_AsText(way) AS wkt_geometry FROM table"
df = dbGetQuery(conn, strSQL)
#Geomtery column as R list
geo_col = df$wkt_geometry
polygon_list = suppressWarnings(lapply(geo_col, function(x){
x <- gsub("POLYGON\\(\\(", "", x)
x <- gsub("\\)", "", x)
x <- strsplit(x, ",")[[1]]
#Now each polygon has been parsed by removing POLYGON(( from the start and )) from the end
#Now for each POLYGON its xValues and yValues are to be extracted to for Polygon object
xy <- strsplit(x, " ")
v_xy = suppressWarnings(sapply(xy, function(p){
xValue = p[1]
yValue = p[2]
vec = c(xValue, yValue)
}))
#Now we have all x values in first column of v_xy and all y values in second column of v_xy
#Let us make the Polygon object now
p_xvalues = as.numeric(v_xy[1, ])
p_yvalues = as.numeric(v_xy[2, ])
p_object <- Polygon(cbind(p_xvalues, p_yvalues))
}))
#Now we have all of the polygons in polygon object format
#Let us join it with main data frame, i.e. df
df$object_polygon <- polygon_list
#View(df)
#Now Let us form SpatialPolygons() object out of it
Ps_list = list()
for (i in seq(nrow(df))) {
Ps_list[[i]] <- Polygons(polygon_list[i], ID=df[i,][1])
}
SPs = SpatialPolygons(Ps_list)
#Now FINALY its the time to form SpatialPolygonsDataFrame
row.names(df) = df$osm_id
SPDF = SpatialPolygonsDataFrame(Sr = SPs, data = df[, 1:6], match.ID = TRUE)
因此,从本质上讲,我必须编写一个解析器来获取所需的数据,而readOGR()只需一行就可以了。
我不了解R,但是对Postgis非常熟悉。 Postgis只是SQL函数,如果可以使用Select
可以访问postgis,
因此,如果要访问多边形,只需在postgres中创建新函数。
但是,如果要显示多边形,则需要使用R检查可用的功能,我通常使用Openlayer
javascript api在网页中显示结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.