【问题标题】:Creating x and y distance coordinates for R from a .kml file从 .kml 文件为 R 创建 x 和 y 距离坐标
【发布时间】:2011-10-26 18:32:17
【问题描述】:

我想使用 .kml 轨迹文件来制作一组 x、y 坐标以在 R 中使用。

我现在拥有的是一个 GoogleEarth 轨道,我相信它是一个 LineString。我听说rgdal package 通常是人们使用的,但它不适用于 Mac 版本的 R。如果可能的话,我想在 Mac 上执行此操作,并在其中进行其余的分析。如有必要,我可以使用 Windows 在 R64 上进行转换,然后将坐标带到我的 Mac 上,但这似乎……笨拙。

.kml 代码的开头如下所示:

    <?xml version="1.0" encoding="UTF-8"?>  
<kml xmlns="http://www.opengis.net/kml/2.2"  
xmlns:gx="http://www.google.com/kml/ext/2.2"  xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
    <Document>  
    <name>Perimeter_Track.kml</name>
<Placemark>
    <name>ACTIVE LOG</name>
    <LineString>
        <coordinates>
            -157.80736808,21.4323436,20.324951171875  

我想将其转换为 x , y 坐标,以距离我地图中的一个点为单位。成品将是水体的线条轮廓,上面覆盖着物种丰度数据。

我已经尝试了几种方法:
1. 将.kml文件转成.csv并使用read.csv导入r;
2.使用maptools包中的getKMLcoordinates导入坐标。

(1) 的问题是,当我尝试将 .kml 坐标转换为 csv 时,转换器程序 (kmlcsv) 中出现错误,提示它无法读取文件(我不知道为什么- 错误日志不可用)。

当我尝试 (2) 时,我得到的坐标排列很奇怪。
spa<-getKMLcoordinates("Perimeter_Track.kml", ignoreAltitude=TRUE)
summary(spa)
返回:

 Length Class  Mode   

[1,] 128 -none- 数字

[2,] 242 -none- 数字

[3,] 34 -none- 数字

[4,] 126 -none- 数字

我相信这是因为 .kml 文件实际上是四个单独的轨道,由小间隙隔开(即,他们关闭 GPS 很短时间,然后重新开始)。我是否需要单独导入这些才能获得整个形状?如果是这样,我该怎么做?

最终,我希望在 x x y km 的网格上获得此形状,其中坐标以 km 为单位,而不是 GPS 坐标。如果有人对如何做到这一点有任何见解,我很乐意听取您的意见!
提前非常感谢。

【问题讨论】:

  • 请注意:尝试str(spa) 以获取有关此内容的信息。看起来它是 4 个向量的列表。在这种情况下,lapply(spa, summary) 应该会给你一个合理的总结。您可以使用plyr 包走得更远:ldply(spa, summary) 将生成一个漂亮的小数据框。如果它是一个列表,那么它可能是由你、Spacedman 和 John 比我更了解的元素组成的......

标签: r gis kml


【解决方案1】:

即使预编译包不可用,您仍然可以在 Mac 上从其源代码安装 rgdal,如下所示:

  1. http://www.kyngchaos.com/software/frameworks 安装“GDAL 完整”框架。

  2. 将您刚刚安装的程序的位置添加到您的 unix 路径。在 mac 终端中,执行:

    PATH=/Library/Frameworks/GDAL.framework/unix/bin:/Library/Frameworks/PROJ.framework/unix/bin$PATH
    
  3. 从 CRAN 的 http://cran.r-project.org/web/packages/rgdal/index.html 下载 rgdal 包的源代码。

  4. 打开 R 并构建/安装 rgdal 包。请注意,我们必须为我们刚刚安装的一些东西指定位置。

    install.packages('~/Downloads/rgdal_0.7-1.tar.gz', repos=NULL, type='source', configure.args=c('--with-proj-include=/Library/Frameworks/PROJ.framework/unix/include', '--with-proj-lib=/Library/Frameworks/PROJ.framework/unix/lib'))
    

这可以在我的 Mac OS X 10.6 上正常安装。祝你好运!


因此,您的数据的基本思路可能是:

library(rgdal)
library(maptools)

# Load KML coordinates
coords = getKMLcoordinates('data.kml')
coords = SpatialPoints(coords, CRS('+proj=longlat'))

# Load US Maps (get from www.gadm.org)
load('USA_adm1.RData') 
hawaii = gadm[gadm$NAME_1 == 'Hawaii', ]

# Transform coordinates
hawaii.proj = spTransform(hawaii, CRS=CRS('+init=epsg:2784 +units=km'))
coords.proj = spTransform(coords, CRS=CRS('+init=epsg:2784 +units=km'))

# Plot
dev.new(width=4, height=4)
plot(hawaii.proj, axes=T, xlim=c(450,550), ylim=c(0,60))
points(coords.proj, pch=16, col='red')

居住的好地方!

【讨论】:

  • 谢谢,约翰。知道如何将 GPS 坐标转换为 km x km 空间吗?
  • @Margaret 请参阅 Spacedman 的回复,以及我在上面的编辑。希望这会有所帮助。
  • EPSG 代码是夏威夷(3 区)的 NAD83 代码:spatialreference.org/ref/epsg/2784 [非常方便的网站]
  • @John,我知道这已经延迟了很长时间(我最终还是使用了 maptools)但现在我实际上需要 rgdal,而你的安装方法没有奏效(我有 OS 10.6.8 )。我收到“无效包”警告:错误:错误:未指定包警告消息:在 install.packages("~/Downloads/rgdal_0.7-1.tar.gz", repos = NULL, : install of package '/用户/megsiple/Downloads/rgdal_0.7-1.tar.gz' 退出状态非零 知道可能是什么问题吗?Rgdal 会很有帮助!
【解决方案2】:

一旦您使用 rgdal 中的 readOGR 将某些内容读入“sp”类对象(这里可能是 SpatialLinesDataFrame),您就可以使用 spTransform 函数将其转换为从 lat-long 的笛卡尔系统。

将其转换成哪个系统取决于它在地球上的哪个位置。有一堆标准变换取决于经度,称为“UTM”区域(通用横轴墨卡托)。只需在区域中查找您的经度,找到 EPSG 代码,然后启动 spTransform。

对于英国,有一个名为 Ordnance Survey Grid 的标准网格系统,其 EPSG 代码为 27700。因此,要将经纬度 (EPSG:4326) 中的某些内容转换为 OSGB 米,我会这样做:

mapOS = spTransform(mapLL,CRS=CRS("+init=epsg:27700"))

spTransform 的帮助中有很多例子。

请注意,只有当您的数据位于地球的一小部分时,这一切都很好......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2021-04-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多