使用QGIS将KML转换为shapefile而不丢失属性?


29

我有一个包含数百个点的KML文件。每一点都有信息,例如名称,功率,年龄(这是水力发电厂的地图)。如果我将该KML文件导入QGIS,则会丢失此信息。

有什么办法可以保留我的信息吗?

该信息如下所示:

<ExtendedData>
 <SchemaData schemaUrl="#vorlage">
  <SimpleData name="Name">Test</SimpleData>
  <SimpleData name="Power">10895</SimpleData>
  <SimpleData name="Location">L</SimpleData>
 </SchemaData>
</ExtendedData>

我的代码有什么问题吗?


1
您如何将导入.kmlQGIS?支持此格式作为基本格式之一,因此将kml文件添加为图层应该是一个相对轻松的过程。如果您提供更多详细信息,则可能有人会帮助您找出问题所在。有关文件源的信息也可能很有用。
2012年

1
您是否有到kml的实时链接?
Mapperz

我认为可以通过FME实现,或者如果您觉得有点冒险,可以编写一个Python脚本来解析kml(xml!)并导出到shapefile中。(要使用的库:python shapefile库,来自python的任何XML)
U2ros 2012年

2
RK是的,我已经看到了那个。尽管我决定用更好的问题描述来询问新问题,因为还没有令人满意的解决方案。同样,经过又一轮尝试后,问题可能出在在在线KML验证程序中测试时,湿地KML文件不是有效的KML,并带有许多错误……
Miro 2012年

1
U2ros我尝试了在线FME,但没有成功。也许是台式机FME,我可以在下一个“安装回合”中尝试一下...我绝对不会冒险尝试编写将kml转换为shp :-)的脚本。但在最坏的情况下,我可以想象编写脚本将通过KML,为每个功能找到“ ExtendedData”,并创建表/ csv,然后可以通过“名称”将其加入以在QGIS / ArcGIS / Mapinfo中转换为KML ...
Miro

Answers:


15

ExtendedData没有正确的“名称”值。

例如

<Data><displayName>System</displayName><value>Riverine</value></Data>

不是由GDAL和Qgis Master导入的,而

<Data name="System"><displayName>System</displayName><value>Riverine</value></Data>

被进口。

您可以使用优质的文本编辑器进行更改。

-------------------由Miro添加---------------------

对于KML编辑,需要使用文本编辑器,该编辑器允许在诸如PSPad之类的Replace函数中使用“正则表达式”(或Notepad ++和许多其他自由文本编辑器)

找: <Data><displayName>(.*)</displayName>

更换: <Data name="$1"><displayName>$1</displayName>

之后,只需使用QGIS(关键是“新”版本-包括GDAL 1.9.2版及更高版本)和“添加矢量层”,该层将加载所有“ ExtendedData”。


谢谢,这是关键信息。我试图将其替换为一个测试文件,但效果很好。现在,所有“ ExtendedData”都以列的形式出现在表中。再次非常感谢您。
米罗2012年

3
实际上,Qgis不使用DisplayName。因此,可以在没有RegExp的情况下进行替换,方法是将<Data> <DisplayName>替换为<Data name =“,并将</ DisplayName>替换为”>。
AndreJ 2012年

1
我的KML文件还包含一个标记<SchemaData>,为了在QGIS中打开它,必须对其进行注释。但是,否则这个技巧就完美地起作用了!
Djana 2014年

8

我使用globalmapper将其中一个湿地文件转换为形状:包含转换后的dbf文件(区域和线条)的两个屏幕截图: 在此处输入图片说明

在此处输入图片说明

希望这是你想要的..


谢谢,是的,这正是我所需要的。很高兴知道有一些软件可以处理不符合KML标准的这些KML。因为已经有了使用免费QGIS的其他答案,所以我不会尝试使用Global Mapper,但它肯定可以帮助其他人。再次感谢你。
米罗2012年

真的是一个很棒的转换器,太酷了!
SIslam 2015年

6

您可以使用Global Mapper软件,在其中可以轻松导出/导入kml / kmz文件+附加数据以及许多矢量和栅格格式。这是最好的软件之一。

http://www.bluemarblegeo.com/global-mapper/product/formats.php


谢谢你的小费。我相信它可以导入/导出kml / kmz文件,但是我已经尝试了5种以上的应用程序。而且它们都不能够读取属性(“ ExtendedData”)。那么实际上Global Mapper可以做到吗?
米罗2012年

5

看来Google的libkml 并未在Ubuntu上附带GDAL 1.9.2,特别是gdal-bin 1.9.2-2〜precise4:

$ ogrinfo --formats | grep -i kml
  -> "KML" (read/write)

为了获得可以使用libkml和ExtendedData支持的版本,我必须从svn trunk(r864)构建libkml之后,再从svn trunk(r25473)构建GDAL ,特别要注意的是1.2.0版本显然不够用,如GDAL网站上所述。请注意,libkml0在Ubuntu精确版(当前为1.2.0-1ubuntu6)上安装将无济于事。您确实需要1.3或svn干线,但我找不到它的PPA。

我最终甚至无法在Ubuntu精确版上构建libkml。随附的boost版本中存在类型错误,并且由于依赖关系混乱而导致运行libtool时发生错误。无论出于什么原因,这些都不是我成功的Debian挤压问题:

$ ogrinfo --formats | grep -i kml
  -> "LIBKML" (read/write)
  -> "KML" (read/write)

一旦知道了,运行就会ogr2ogr -f "ESRI Shapefile" foo.shp foo.kml给我一个shapefile,qgis可以导入它,并保留ExtendedData属性。


5

Qgis 1.8.0 Lisboa使用的Ogr2ogr kml驱动程序不支持kml ExtendedData标记。

LIBKML驱动程序可以,它已并入GDAL 1.9.2版以上,OSGEO4W软件包,MS4W和Qgis Master。

您的数据没有错,但是OSGeo4W中的LIBKML驱动程序在SchemaData方面存在一些问题。或者,可以进行以下工作:

<ExtendedData>
 <Data name="Name"><value>Test</value></Data> 
 <Data name="Power"><value>10895</value></Data>
 <Data name="Location"><value>L</value></Data> 
</ExtendedData>

编辑:SchemaData错误现已在OSGEO4W的GDAL 1.9.2-2程序包中修复。


4

使用FME 2012(SP4)

加载阅读器KML

选择一个作家(形状文件)

连接项目并在写入选择上(复制要素类型的属性

运行工作区

在此处输入图片说明


谢谢,我已经下载了fme_install.msi,但是安装中出现错误,并且由于该问题已经存在不同的工作解决方案,因此我将不继续这种方式。无论如何,再次感谢您。
米罗2012年


1

我不知道您可以使用QGIS来实现。不过,MapWindow具有KML2Shapefile插件。

KML2Shapefile是MapWindow GIS的插件,可将Google Earth KML和KMZ文件转换为shapefile以在GIS中使用。

KML2Shapefile会将每种KML几何类型拆分为单独的shapefile。它支持复杂的几何图形,并且能够将大部分KML表示为属性数据。

顺便说一下,MapWindow也是一个免费的开源GIS软件包。您可以免费下载并安装。您可以使用MapWindow中的KML2Shapefile插件将KML转换为shapefile,只需将生成的形状文件加载到QGIS中。假设您仍然在Windows上。

我现在可以想到的最佳解决方案。我希望有人知道可以在QGIS中执行此操作的插件。


1
谢谢你的帮助。我尝试过,但仍然丢失了数据。信息如下所示:<ExtendedData> <SchemaData schemaUrl =“#vorlage”> <SimpleData name =“ Name”> Test </ SimpleData> <SimpleData name =“ Power”> 10895 </ SimpleData> <SimpleData name =“ Location”> L </ SimpleData> </ SchemaData> </ ExtendedData>我的代码有什么问题吗?
菲利克斯(Felix)2012年

哦,对此感到抱歉。我希望它能起作用。
RK 2012年

1
@Felix-您在评论中提供的信息非常有用。我建议编辑您的问题,并在其中添加它,以获得更多的上下文和清晰度。
获得空间

@AndreJoost-听起来您想出了一个不错的答案。值得将其添加为实际答案,以便它会出现在具有相同问题的其他任何人的搜索结果中。
2012年

1

获取Global Mapper,您所要做的就是导入KMZ或KML,然后导出Vector IMG(ESRI SHP文件)。全局映射器可以读取大多数文件类型。然后在ARC,全局映射器,歧管,QGIS中打开形状,并查看属性表。所有信息都在那里。您也可以在此时使用Microsoft Excel从SHP打开DBF文件,然后根据需要另存为XLXS文件扩展名。


1

在QGIS 3.2.0中,可以使用工具箱轻松进行转换。

在工具箱中选择-> GDAL->矢量转换->转换格式...。(Procesos的Cher de Herramientas de>-GDAL->ConversiónVectorial-> Convertir Formato)

选择KML文件,另存为SHP文件。我还必须将“属性”->“源”(Tab)->“源代码”中的重新转换文件(“已转换”)从“ UTF-8”更改为“ Windows-1258”,才能正确看到西班牙语字符。

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.