我陷入了转换。
我有一个带有某些坐标的KMZ文件。我这样读取文件:
m=Import["~/Desktop/locations.kmz","Data"]
我得到这样的东西:
{{LayerName->Point Features,
Geometry->{
Point[{-120.934,49.3321,372}],
Point[{-120.935,49.3275,375}],
Point[{-120.935,49.323,371}]},
Labels->{},LabeledData->{},ExtendedData->{},
PlacemarkNames->{1,2,3},
Overlays->{},NetworkLinks->{}
}}
我想从每个点中提取{x,y,z}以及与这些点关联的地标名称{1,2,3}。即使我可以从Geometry-> {}中得到点,这也很好,因为我可以使用List @@@将其提取到列表中,但是我迷失在无法提取Geometry的基本部分上“规则”。
谢谢你的帮助,
罗恩
最佳答案
尽管Leonid的答案是正确的,但您可能会发现它不适用于您的代码。原因是Import
命令的输出包含字符串(例如"LayerNames"
)而不是符号(例如LayerNames
)。我已将KML文件上传到我的网站空间,因此我们可以使用实际的Import
命令尝试此操作。尝试如下操作:
in = Import["http://facstaff.unca.edu/mcmcclur/my.kml", "Data"];
pointList = "Geometry" /.
Cases[in, Verbatim[Rule]["Geometry", _], Infinity];
pointList /. Point[stuff_] -> stuff
同样,请注意
"Geometry"
是一个字符串。实际上,in
的内容如下所示(在InputForm
中):{{"LayerName" -> "Waypoints",
"Geometry" -> {Point[{-82.5, 32.5, 0}]},
"Labels" -> {}, "LabeledData" -> {},
"ExtendedData" -> {}, "PlacemarkNames" -> {"asheville"},
"Overlays" -> {}, "NetworkLinks" -> {}}}
上下文:KML是指“锁孔标记语言”。 Keyhole是一家开发工具的公司,该工具在被Google收购后最终发展为Google Earth。 KMZ是KML的压缩版本。