1

我正在尝试使用 WKT 字段在数据框中绘制点。

library(rgeos)
library(rgdal)

> head(df)
  id_pixel     id_lote                                        geo
1  1000013    10000131  POINT(-6421630.0792544 -3100141.21446612)
2  1000013    10000132 POINT(-6421398.42289614 -3100141.21446612)
3  1002031 10020311447 POINT(-6423017.27939664 -3120987.67242424)
4  1002031 10020311449 POINT(-6422093.39197093 -3121221.94306813)
5  1002031 10020311450 POINT(-6422785.09835309 -3121218.46519762)
6  6020361      602036           POINT(-5550130.276 -3814563.524)
> dim(df)
[1] 790381      3

我使用 rgeos 中的 readWKT 将 WKT 转换为坐标,然后绘制点

point.sp <- SpatialPointsDataFrame(readWKT(df[1,3]), data=df[1,])

for (n in 2:dim(df)[[1]]) {
  point.sp <- rbind(point.sp, 
                    SpatialPointsDataFrame(readWKT(df[n,3]),data=df[n,]))
  print(n)
}

即使这是有效的,我也有几个问题需要解决。

首先,for 循环运行太慢。由于我的数据框有 790381 行,我需要让它更快。有没有办法让这个更有效?也许使用应用或其他功能?这是最重要的问题

其次,我得到的坐标被截断。我在 RGEOS WKT Functions 文档中没有找到任何关于此的内容。可以获得完整的坐标。

> point.sp
           coordinates id_pixel     id_lote                                        geo
1 (-6421630, -3100141)  1000013    10000131  POINT(-6421630.0792544 -3100141.21446612)
2 (-6421398, -3100141)  1000013    10000132 POINT(-6421398.42289614 -3100141.21446612)
3 (-6423017, -3120988)  1002031 10020311447 POINT(-6423017.27939664 -3120987.67242424)
4 (-6422093, -3121222)  1002031 10020311449 POINT(-6422093.39197093 -3121221.94306813)
5 (-6422785, -3121218)  1002031 10020311450 POINT(-6422785.09835309 -3121218.46519762)
6 (-5550130, -3814564)  6020361      602036           POINT(-5550130.276 -3814563.524)
7 (-5550362, -3814100)  6020362      602036           POINT(-5550361.932 -3814100.212)
8 (-5550362, -3814564)  6020363      602036           POINT(-5550361.932 -3814563.524)

第三,当我绘制点时,我无法操纵点的类型或大小。我收到此警告消息:

plot(point.sp, type="p" , lwd= 0.25,axes = 1,  col='orange')


Warning messages:
1: In axis(1, ...) : graphical parameter "type" is obsolete
2: In axis(2, ...) : graphical parameter "type" is obsolete
3: In title(...) : graphical parameter "type" is obsolete

在此处输入图像描述

所以也许我应该使用完全不同的方法,或者我可以通过一些调整让它工作吗?

谢谢!对不起我漂亮的英语...

4

0 回答 0