从.shp到.kml到.shp而不会丢失属性


10

我已经将带有属性的shapefile转换为客户端的.kml。然后在Google Earth中编辑.kml和属性。我收到了更新的.kml,现在需要将其恢复为.shp。问题是:我的所有属性现在都为html格式,这使Google Earth中的弹出信息框成为可能。当我尝试转换回.shp时,我的属性会集中到一个(由Google创建的)“说明”字段中。而且我所有的属性和信息都集中在一个单元格中。有什么方法可以从“描述”字段中提取数据。即使我这样做,是否有一种简单的方法可以摆脱html格式并使其可用?

这是我在某些论坛上找到的“融合表”方法所得到的。您可以在左侧看到html,它继续显示。

http://s6.postimg.org/uf7jeuksh/problems.png

我正在使用ArcGIS Desktop 10.2。


您如何在两种格式之间转换?您可以改用ogr2​​ogr或QGIS吗?
bugmenot123

Answers:


3

我刚刚确认,使用数据互操作性扩展创建的Spatial ETL工具会将您的KML / KMZ文件的属性带回到结构完好无损的shapefile中。只需在工具创建向导中选择“ 动态模式”选项即可:

空间ETL步骤


一种解决方法是解析描述字段中所需的各种属性字段的值,然后将它们复制到适当的字段中。下次,让您的客户将属性添加到excel电子表格或其他内容中,以便您可以将其重新连接到shapefile进行更新。


1
我认为这是我目前唯一的解决方案。但是,下次我一定会提供一个Excel电子表格!
凯蒂·B

您可以访问ArcGIS的数据互操作性扩展吗?我在这个问题上没有经验,但是那里可能有作家可以重新映射您的见解
亚当

安全软件(基于数据互操作性)的FME也可以满足您的需求,但它也很昂贵。
亚当

3

我必须先在QGIS中打开kml并另存为shapefile,然后它才能维护属性。在QGIS中,添加矢量数据,然后在浏览下,将类型为“钥匙孔标记语言(KML)”的文件设置为浏览到要导入的KML,然后单击“打开”。将从KML导入的对象保存到Shapefile。在ArcMap中导入shapefile时,您将看到所有保留的属性。


2

凯文·马丁(Kevin Martin)开发的“ 导出到KML”工具完成了这项工作。

样式存在一些问题,但至少颜色和属性是正确的,并且有很多选项可以使用属性,标签等。


2

我只需要其中一个包含日期字符串的字段。使用arcMap,我能够通过使用字段计算器将其提取来解决此问题。如果您只需要提取几个字段,这可能对您有用,尽管有些乏味:

以下步骤将帮助您建立一行VB,以便在字段计算器中使用,以基于HTML标记和存储在表中的数据段从描述字段中剪切一个子字符串。

  1. 在GoogleEarth中,打开您的KML / KMZ,单击某个功能以打开弹出窗口。标识要检索的字段的确切名称。我的被​​称为“ DATE”
  2. 在ArcMap中,打开导入KML / KMZ时创建的图层的属性表。
  3. 标识描述字段。在我的数据中,它称为“ PopupInfo”
  4. 在第一条记录中,右键单击“ PopupInfo”单元格,然后单击“复制”
  5. 打开记事本并粘贴单元格的内容。现在,您将看到弹出窗口的HTML。
  6. 使用ctrl-F从KML / KMZ中查找字段名称(在我的情况下为“ DATE”)。这是截屏,仅显示我关心的HTML行。 在此处输入图片说明
  7. 计算字符数,包括从字段名称开头到数据开头的空格。在我的情况下,有15个字符。
  8. 确定要提取的字符数。对于我的子字符串,我需要19。例如,如果您只需要诸如AZ和WY之类的状态码,则可能只需要2。编辑:您可以稍后手动删除多余的字符,或使用instr()和rtrim()VB函数删除这些多余的字符。如果您需要帮助,请发邮件或发邮件给我。
  9. 在arcMap中,为图层添加一个新的TEXT字段,并确保为其提供至少与数据所需数量一样多的字符。默认值为50。

  10. 然后,为您的新字段打开字段计算器。使用InStr()函数找到数据的开始,并使用Mid()函数提取数据。键入以下VB命令:

    Mid([PopupInfo],InStr([PopupInfo],"DATE")+15,19)

当然,换掉我的字段名(从第3步和第6步开始),并将数字15和19的长度更改为子字符串的长度(在第7步和第8步中找到)。

在上面的VB行中:

  • [PopupInfo]是包含KML弹出窗口的HTML的烦人字段的名称。
  • “ DATE”是KML字段名称和HTML标签,其中包含我要提取的数据。
  • 15是从日期标签开始到实际日期数据开始的字符数。
  • 19是我们要保留的日期字符串中的字符数。

1

这是我发现的指南,它引导您完成一些使用ArcMap,Google Drive Fusion Tables和MS Excel的步骤,以在保留属性的同时将KML文件转换为.shp文件。

链接到具有指南的网站


是的,但这不能解决我的问题。我的属性仍然会集中到html格式的“描述”字段中。KML到图层工具不适用于我的情况。我什至尝试过其他脚本。
凯蒂·B

看到我编辑的答案。
卡梅隆·史隆2015年

再一次,我在原始问题中链接的图像是使用融合表方法时的结果。它不适用于我的情况。
凯蒂·

您是否将其带入Excel?
卡梅隆·史隆2015年

是的,同样的问题。我刚刚找到另一个论坛站点,其他人也遇到相同的问题。看来我将不得不遍历1000行脚本并删除代码,或者尝试执行“查找并替换”操作,感谢您的帮助。
凯蒂·

1

我已经能够使用游标和列表来完成此工作,以将PopupInfo xml字段拆分为有用的值

  1. 使用arcpy KML图层工具和项目工具进入所需的坐标系(我遇到了将字段添加到原始转换输出的问题,这可能是由于与之关联的图层文件)

  2. 使用.da.SearchCursor从第一行获取PopupInfo字符串。然后将其拆分为基于'<'的列表,删除前两个值(Google Earth的标签字段),并将带有'td>'标签但不包含'td>'结束标签的其余值放入新列表字段名称(偶数索引)和字段值(奇数索引)的集合

  3. 使用arcpy.AddField_management遍历字段名称列表以添加所有字段(如果它们已经存在,则跳过)

  4. 使用.da.UpdateCursor获取所有行的PopupInfo,然后像搜索光标一样拆分并创建新列表

  5. 这次,使用所有奇数索引值更新行(如果i%2 <> 0:row [(i-1)/ 2] = list [i]),然后使用cursor.updateRow(row)



0

更新:如果您遇到相同问题的线程,那么这里有一个工具供您使用!查看https://mygeodata.cloud/

我真的很好 我能够上传我的KML,并且导出的shapefile在自己的字段中正确拥有了我的所有属性。唯一的缺点是“免费”转换的数量有限。


-3

对于此转换问题,仍然没有简单的解决方案。在过去的几年中,这里多次被问到:

QCLIS中具有附加数据的KML

在桌面上的kgi2shp转换中保留属性

将kml转换为shapefile,而不会丢失属性数据

esri对其KmltoLayer转换工具的说明:

“作为Esri的KML工具的“所有者”,我可以说:在任何版本(9.3-10.3)的ArcGIS中使用KML图层工具时,KML内的ExtendedData元素都不会转换为字段属性。 Windows或Linux上的ArcGIS Server。我们正在考虑为将来的版本提供增强支持。”


2
嘿-我对你的回答人身冒犯。如果您要复制并粘贴我的评论并用引号引起来,请确定不要添加有关购买扩展程序的评论。
KHibma

@sirgeo在数据互操作性扩展中绝对可以解决此问题。似乎这不是您喜欢的解决方案。
亚当
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.