【问题标题】:How to convert Geom object from PostGis in R in latitude and longitude?如何在纬度和经度中从 R 中的 PostGis 转换 Geom 对象?
【发布时间】:2019-01-01 21:47:45
【问题描述】:

我有一个具有“位置”属性的数据库,它被保存为 geom 对象,如下所示:0101000020E6100000000000603D1D5EC0000000A06D424740

有没有办法在 R 中从中提取坐标?这些值作为字符串加载到 R 中。它还发出警告:

Warning message:
In postgresqlExecStatement(conn, statement, ...) :
  RS-DBI driver warning: (unrecognized PostgreSQL field type geometry (id:18832) in column 2)

任何帮助表示赞赏。

【问题讨论】:

标签: r postgresql geolocation coordinates postgis


【解决方案1】:

您是否尝试过使用rgeos 函数?一种选择是直接从数据库中读取 WKT(使用 ST_AsText)...

SELECT ST_AsText('0101000020E6100000000000603D1D5EC0000000A06D424740');
                st_astext                 
------------------------------------------
 POINT(-120.456871032715 46.518970489502)
(1 Zeile)

在 R 中,使用 readWKT 然后您可以提取坐标对:

> readWKT("POINT(-120.456871032715 46.518970489502)")
SpatialPoints:
          x        y
1 -120.4569 46.51897
Coordinate Reference System (CRS) arguments: NA 

另一种选择是使用ST_XST_Y 直接从数据库中读取x,y

 SELECT ST_X('0101000020E6100000000000603D1D5EC0000000A06D424740'),
        ST_Y('0101000020E6100000000000603D1D5EC0000000A06D424740');
       st_x        |      st_y       
-------------------+-----------------
 -120.456871032715 | 46.518970489502
(1 Zeile)

【讨论】:

  • 谢谢,我不知道!但是,我使用 postgres 做了与 ST_X 和 ST_Y 相同的操作,然后在 Rstudio 中加载了我的表。
  • @Nata 肯定有一百万种方法可以从几何图形中获取坐标对。但我想这个满足您的需求就足够了。祝你好运:)
【解决方案2】:

我看到Jim Jones 的答案主要使用 postgis 而不是 R。 SF 包允许将 Well Known Binary (WKB) 转换为简单的特征列 (sfc),然后再将其转换为坐标。
st_as_sfc documentation
代码:

library(sf)
#> Warning: package 'sf' was built under R version 4.0.3
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
wkb = structure(list("0101000020E6100000000000603D1D5EC0000000A06D424740"), class = "WKB")
st_as_sfc(wkb,EWKB = TRUE) %>% st_coordinates()
#>           X        Y
#> 1 -120.4569 46.51897

【讨论】:

    猜你喜欢
    • 2015-11-13
    • 2011-02-01
    • 1970-01-01
    • 2013-05-03
    • 2012-02-16
    • 2017-03-21
    • 2015-07-13
    • 2016-07-30
    • 2012-12-30
    相关资源
    最近更新 更多