我陷入了转换。

我有一个带有某些坐标的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的压缩版本。

08-07 11:24