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

是否可以保存此信息?

信息如下所示:



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


我的代码有问题吗?

评论

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

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

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

R.K.是的,我见过那个。尽管我决定问一个新问题,用对问题的更好描述,因为没有令人满意的解决方案。此外,经过另一轮尝试后,问题可能出在在在线KML验证程序中测试时,湿地KML文件不是有效的KML,并且存在许多错误...

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

#1 楼

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




 GDAL和Qgis Master不会导入<Data><displayName>System</displayName><value>Riverine</value></Data>
 


,而

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


被导入。

您可以使用一个好的文本编辑器来更改它。

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

对于KML编辑,需要使用允许“替换功能(如PSPad(或Notepad ++和许多其他自由文本编辑器)中的“正则表达式”)

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

替换:<Data name=""><displayName></displayName>

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

评论


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

–米罗
2012年11月7日在2:02

实际上,Qgis不使用DisplayName。因此,可以在没有RegExp的情况下进行替换,方法是将 替换为替换为”>。

– AndreJ
2012年11月7日7:02

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

– Djana
2014年6月12日在7:24

#2 楼

我使用globalmapper将其中一个湿地文件转换为形状:封装了转换后的dbf文件的两个屏幕截图(区域和线条):




希望这是你想要什么..

评论


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

–米罗
2012年11月7日在1:56



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

– SIslam
15年5月24日在12:07

#3 楼

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

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

评论


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

–米罗
2012年11月5日在7:26

#4 楼

似乎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干线(r864)构建libkml后,从svn干线(r25473)构建GDAL。 ),具体请注意GDAL网站上记录的1.2.0版本显然不足。请注意,在Ubuntu精确版(当前为1.2.0-1ubuntu6)上安装libkml0将无济于事。您确实确实需要1.3或svn干线,但我找不到它的PPA。

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

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


一旦了解到这一点,运行ogr2ogr -f "ESRI Shapefile" foo.shp foo.kml就会给我一个qgis能够导入的shapefile,并保留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包中修复。

#6 楼

使用FME 2012(SP4)

加载阅读器KML属性类型的属性)

运行工作空间



评论


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

–米罗
2012年11月7日,下午1:47

#7 楼

您可以尝试kml2shp吗?

他们也有一个新的在线转换器。

#8 楼

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


KML2Shapefile是MapWindow GIS的插件,可将Google Earth转换为Google Earth中的KML和KMZ文件。 >
KML2Shapefile将每个KML几何类型拆分为单独的
shapefile。它支持复杂的几何形状,并且能够将大多数KML表示为属性数据。



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

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

评论


谢谢你的帮助。我尝试了一下,但是仍然丢失了数据。信息如下所示: Test 10895 L 我的代码有什么问题吗?

–费利克斯
2012-09-19 18:33



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

– R.K.
2012年9月19日在18:36

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

–获得空间
2012年9月20日0:14在

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

–获得空间
2012年9月20日下午0:15

#9 楼

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

#10 楼

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

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

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