3

複数のジオメトリ KML ファイルを R に読み込むためのワークフローを構築しています。これは、ポイントとパスのジオメトリを使用した作業マップです。(再現可能な) R スクリプトは次のとおりです。

library(rgdal)
setwd( {SPECIFY A FOLDER} )
download.file("http://www.scribblemaps.com/maps/kml/shackleton.kml", "file.kml")
(lyr = ogrListLayers("file.kml"))
map = readOGR ("file.kml", layer=lyr, verbose = TRUE, drop_unsupported_fields=T, dropNULLGeometries=T)

これは失敗します:

Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) : 
  Cannot open layer

これを回避する方法はありますか?

パス エントリだけの新しい KML を作成して、パス データを取得することができました。Google Earth で、kml オブジェクト リストのパス エントリをクリックし、[コピー] を選択して、テキスト エディタに貼り付け、KML として保存します。これは R で次のように開きます。

(lyr = ogrListLayers("path.kml"))
pathkml = readOGR ("path.kml", layer=lyr, verbose = TRUE, drop_unsupported_fields=T, dropNULLGeometries=T)
coordinates(pathkml)

しかし、ポイント ラベルと注釈を含むポイント データのワークフローは実現していません。望ましい解決策は、元の KML を読み取り、Google Earth の必要性を否定することですが、もちろん、何をしてもうまくいきます。


付録:

これを解析するために XML を使用することを検討しています。データはタグ内に構造化されているようです。私はしなければならない:

require(XML)
d = xmlParse("shackleton.kml")
doc = xpathSApply(d, "//Placemark")

しかし、これは何の役にも立たないようです。

4

2 に答える 2

3

この R 関数は、Google マップからエクスポートされた KML から Placemark 情報 (名前、説明、およびポイント座標) を抽出する必要があります。

手元にある 2 つのマップで問題なく動作しNA、名前と説明で値をサポートします (これにより、内部get_field関数がどのようにコーディングされているかが説明されます)。

改善は大歓迎です。

追加。ポリゴンを扱う機能を追加しました。このコードでは、次のように KML ポイントとポリゴンをプロットできるようになりました。

ggplot(kml_points(map),
       aes(x = longitude, y = latitude)) +
  geom_polygon(data = kml_polygons(map), fill = "red", alpha = 0.5) +
  geom_point()

wheremapは、KML ファイルへのパスを保持します。

警告:マルチジオメトリ (穴のあるマルチポリゴンなど) はサポートされていません。

于 2016-12-26T19:54:44.153 に答える