การแปลง KML เป็น shapefile โดยไม่สูญเสียแอตทริบิวต์โดยใช้ QGIS


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
คุณนำเข้า.kmlสู่ QGIS อย่างไร รูปแบบนี้ได้รับการสนับสนุนเป็นหนึ่งในรูปแบบพื้นฐานดังนั้นจึงควรเป็นกระบวนการที่ค่อนข้างลำบากในการเพิ่มkmlไฟล์เป็นเลเยอร์ หากคุณให้รายละเอียดเพิ่มเติมใครบางคนอาจช่วยให้เข้าใจได้ว่าเกิดอะไรขึ้น ข้อมูลเกี่ยวกับแหล่งที่มาของไฟล์อาจมีประโยชน์เช่นกัน
Spatial

1
คุณมีลิงค์สดไปยัง kml หรือไม่?
Mapperz

ฉันคิดว่ามันจะเป็นไปได้ผ่านทาง FME หรือถ้าคุณรู้สึกถึงการผจญภัยเล็ก ๆ น้อย ๆ คุณสามารถเขียนสคริปต์ไพ ธ อนซึ่งจะแยกวิเคราะห์ kml (xml!) และส่งออกเป็นรูปร่างไฟล์ (
ไลบรารี่ที่

2
RK ใช่ฉันเห็นแล้ว แม้ว่าฉันจะตัดสินใจถามคำถามใหม่พร้อมคำอธิบายปัญหาที่ดีกว่าเพราะไม่มีวิธีแก้ปัญหาที่น่าพอใจ นอกจากนี้หลังจากลองวงกลมอีกครั้งปัญหาอาจเป็นได้ว่าไฟล์ KML ในพื้นที่ชุ่มน้ำไม่ถูกต้อง KML เมื่อทดสอบในเครื่องมือตรวจสอบ KML ออนไลน์และมาพร้อมกับข้อผิดพลาดมากมาย ...
Miro

1
U2ros ฉันลอง FME ออนไลน์ไม่สำเร็จ บางทีเดสก์ท็อป FME ฉันสามารถลองใน "ติดตั้งรอบ" ถัดไป ... ฉันไม่รู้สึกผจญภัยพอที่จะเขียนสคริปต์โปรแกรมซึ่งจะแปลง kml เป็น shp :-) แต่ในกรณีที่เลวร้ายที่สุดฉันสามารถจินตนาการการเขียนสคริปต์ซึ่งจะผ่าน KML ค้นหา "ExtendedData" สำหรับทุกคุณลักษณะและสร้างตาราง / csv ซึ่งฉันสามารถเข้าร่วมผ่าน "ชื่อ" เพื่อแปลง KML ใน QGIS / ArcGIS / Mapinfo ...
Miro

คำตอบ:


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 จำเป็นต้องใช้โปรแกรมแก้ไขข้อความซึ่งอนุญาตให้ "Regular Expression" ในฟังก์ชันแทนที่เช่น PSPad (หรือ Notepad ++ และโปรแกรมแก้ไขข้อความฟรีอื่น ๆ อีกมากมาย)

หา: <Data><displayName>(.*)</displayName>

แทนที่: <Data name="$1"><displayName>$1</displayName>

หลังจากนี้ให้ใช้ QGIS (กุญแจคือรุ่น "ใหม่" - รวม GDAL เวอร์ชัน 1.9.2 เป็นต้นไป) และ "เพิ่มเวกเตอร์เลเยอร์" และเลเยอร์จะโหลดด้วย "ExtendedData" ทั้งหมด


ขอบคุณนั่นคือข้อมูลที่สำคัญ ฉันพยายามแทนที่มันในไฟล์ทดสอบหนึ่งไฟล์และมันทำงานได้อย่างสมบูรณ์แบบ "ExtendedData" ทั้งหมดอยู่ในตารางเป็น colums ขอบคุณอีกครั้งมาก
Miro

3
ที่จริงแล้ว Displayg ไม่ได้ถูกใช้โดย Qgis ดังนั้นการแทนที่สามารถทำได้โดยไม่ต้อง RegExp โดยแทนที่ <Data> <DisplayName> ด้วย <Data name = "และแทนที่ </DisplayName> ด้วย">
AndreJ

1
ไฟล์ KML ของฉันยังมีแท็ก <SchemaData> ที่ฉันต้องแสดงความคิดเห็นเพื่อเปิดใน QGIS แต่อย่างอื่นเคล็ดลับการทำงานอย่างสมบูรณ์แบบ!
Djana

8

ฉันแปลงหนึ่งในพื้นที่ชุ่มน้ำด้วย globalmapper ให้เป็นรูปร่าง: แนบภาพหน้าจอสองภาพจากไฟล์ dbf ที่แปลง (พื้นที่และเส้น): ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

หวังว่านี่คือสิ่งที่คุณต้องการ ..


ขอบคุณใช่นั่นคือสิ่งที่ฉันต้องการ คำแนะนำมีซอฟต์แวร์ที่สามารถจัดการ KML เหล่านี้ซึ่งไม่ได้มาตรฐาน KML เนื่องจากมีคำตอบอื่น ๆ อยู่แล้วว่าจะทำอย่างไรกับ QGIS ฟรีฉันจะไม่ลอง Global Mapper แต่มันจะช่วยคนอื่นได้แน่นอน ขอขอบคุณอีกครั้ง.
Miro

ตัวแปลงที่ยอดเยี่ยมจริงๆเจ๋ง !!
SIslam

6

คุณสามารถใช้ซอฟต์แวร์ Global Mapper ซึ่งคุณสามารถส่งออก / นำเข้าไฟล์ kml / kmz + แนบข้อมูลและเวกเตอร์และแรสเตอร์รูปแบบมากมาย .. เป็นหนึ่งในซอฟต์แวร์ที่ดีที่สุด ..

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


ขอบคุณสำหรับเคล็ดลับ ฉันเชื่อว่ามันสามารถนำเข้า / ส่งออกไฟล์ kml / kmz แต่ฉันได้ลองใช้แอปมากกว่า 5 ตัวที่สามารถทำได้ และไม่สามารถอ่านแอตทริบิวต์ ("ExtendedData") ได้ Global Mapper สามารถทำเช่นนั้นได้จริงหรือ
Miro

5

ดูเหมือนว่า libkml ของ Google ไม่ได้จัดส่งด้วย GDAL 1.9.2 บน Ubuntu โดยเฉพาะ gdal-bin 1.9.2-2 ~ precision4:

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

ในการรับเวอร์ชันที่ทำงานกับ libkml และExtendedDataการสนับสนุนฉันต้องสร้าง GDAL จากsvn trunk (r25473) หลังจากสร้าง libkml จากsvn trunk (r864) โดยสังเกตว่าการเปิดตัว 1.2.0 นั้นไม่เพียงพออย่างชัดเจนตามที่ระบุไว้ในเว็บไซต์ GDAL . ระวังว่าการติดตั้งlibkml0บน Ubuntu แม่นยำ (ปัจจุบัน 1.2.0-1ubuntu6) จะไม่ช่วย คุณจำเป็นต้องใช้ลำต้น 1.3 หรือ svn ซึ่งฉันไม่สามารถหา PPA ได้

ในที่สุดฉันก็ไม่สามารถสร้าง libkml บน Ubuntu ได้อย่างแม่นยำ มีข้อผิดพลาดประเภทในรุ่นของการเพิ่มประสิทธิภาพที่มาพร้อมกับมันและมีข้อผิดพลาดในการใช้งาน libtool เนื่องจากการพึ่งพานั้นไม่เป็นไปตามลำดับ ไม่ว่าจะด้วยเหตุผลใดก็ตามสิ่งเหล่านี้ไม่ใช่ปัญหาของการบีบ Debian ซึ่งฉันก็ประสบความสำเร็จ:

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

เมื่อฉันได้สิ่งนั้นแล้วการวิ่งจะogr2ogr -f "ESRI Shapefile" foo.shp foo.kmlทำให้ฉันมีไฟล์รูปร่างที่ qgis สามารถนำเข้าExtendedDataได้


5

ไดรเวอร์ Ogr2ogr kml ที่ใช้โดย Qgis 1.8.0 Lisboa ไม่รองรับแท็ก ExtendedData ของ kml

ไดรเวอร์ LIBKML ทำเช่นนั้นรวมอยู่ใน GDAL เวอร์ชัน 1.9.2 เป็นต้นไปแพ็คเกจ OSGEO4W, MS4W และ Qgis Master

ข้อมูลของคุณไม่ผิด แต่ไดรเวอร์ LIBKML ใน OSGeo4W มีปัญหาบางอย่างกับ 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 ได้รับการแก้ไขแล้วในแพ็คเกจ GDAL 1.9.2-2 ของ OSGEO4W


4

ใช้ FME 2012 (SP4)

โหลด Reader KML

เลือกนักเขียน (Shapefile)

เชื่อมต่อรายการและในการเลือกการเขียน ( คัดลอกแอททริบิวจากประเภทสถานที่ )

เรียกใช้พื้นที่ทำงาน

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณฉันดาวน์โหลด fme_install.msi แล้ว แต่มีข้อผิดพลาดในการติดตั้งและเนื่องจากมีวิธีแก้ไขปัญหาการทำงานที่แตกต่างกันไปแล้วสำหรับคำถามนี้ฉันจะไม่ดำเนินการต่อด้วยวิธีนี้ อย่างไรก็ตามขอขอบคุณอีกครั้ง
Miro


1

ฉันไม่รู้ว่าคุณจะประสบความสำเร็จได้ด้วย QGIS MapWindow มีปลั๊กอินKML2Shapefileอยู่

KML2Shapefile เป็นปลั๊กอินสำหรับ MapWindow GIS ที่แปลงไฟล์ Google Earth KML และ KMZ ให้เป็นไฟล์รูปร่างสำหรับใช้ใน GIS

KML2Shapefile จะแบ่งประเภท KML เรขาคณิตแต่ละประเภทออกเป็นรูปร่างไฟล์แยก สนับสนุนรูปทรงเรขาคณิตที่ซับซ้อนและสามารถนำเสนอ KML เป็นข้อมูลแอตทริบิวต์ได้มาก

MapWindowเป็นแพ็คเกจ GIS ฟรีและโอเพ่นซอร์สเช่นกัน คุณสามารถดาวน์โหลดและติดตั้งได้ฟรี คุณสามารถแปลง KML เป็น shapefile โดยใช้ปลั๊กอิน KML2Shapefile ใน MapWindow และเพียงแค่โหลดไฟล์รูปร่างที่ได้ใน QGIS สมมติว่าคุณใช้ Windows อยู่แล้ว

ทางออกที่ดีที่สุดที่ฉันสามารถคิดได้ในตอนนี้ ฉันหวังว่าใครบางคนรู้ว่าปลั๊กอินที่จะทำใน QGIS แม้ว่า


1
ขอบคุณสำหรับความช่วยเหลือของคุณ. ฉันพยายามแล้ว แต่ยังคงข้อมูลหายไปข้อมูลมีลักษณะดังนี้: <ExtendedData> <SchemaData schemaUrl = "# vorlage"> <SimpleData name = "ชื่อ"> ทดสอบ </SimpleData> <SimpleData name = "Power"> 10895 </SimpleData> <SimpleData name = "สถานที่ตั้ง"> L </SimpleData> </SchemaData> </ExtendedData> รหัสของฉันผิดปกติหรือไม่
เฟลิกซ์

โอ้ขอโทษด้วย ฉันหวังว่ามันจะทำงาน
RK

1
@Felix - ข้อมูลที่คุณให้ไว้ในความคิดเห็นของคุณมีประโยชน์จริง ๆ ฉันอยากจะแนะนำการแก้ไขคำถามของคุณและเพิ่มในนั้นสำหรับบริบทเพิ่มเติมและความชัดเจน
Spatial

@AndreJoost - ฟังดูเหมือนว่าคุณจะได้คำตอบที่ดี มันจะเป็นการเพิ่มมูลค่าเป็นคำตอบจริงเพื่อที่จะปรากฏในผลการค้นหาของคนอื่นที่มีปัญหาเดียวกัน
Spatial

1

รับ Global Mapper สิ่งที่คุณต้องทำคือนำไฟล์ KMZ หรือ KML แล้วส่งออก Vector IMG (ไฟล์ ESRI SHP) Global mapper สามารถอ่านไฟล์ได้เกือบทุกชนิด จากนั้นเปิดรูปร่างใน ARC, Global mapper, Manifold, QGIS, ect และดูตารางคุณลักษณะ ข้อมูลทั้งหมดจะอยู่ที่นั่น คุณยังสามารถเปิดไฟล์ DBF จาก SHP ด้วย Microsoft Excel ณ จุดนี้แล้วบันทึกเป็นนามสกุลไฟล์ XLXS หากคุณต้องการเช่นกัน


1

ในการแปลง QGIS 3.2.0 สามารถทำให้ง่ายขึ้นโดยใช้กล่องเครื่องมือ

เลือกในกล่องเครื่องมือ -> GDAL -> การแปลงแบบเวกเตอร์ -> รูปแบบการแปลง .... (Caja de Herramientas de Procesos -> GDAL -> การแปลงเวกเตอร์ -> แปลงรูปแบบ)

เลือกไฟล์ KML บันทึกเป็นไฟล์ SHP ฉันยังต้องเปลี่ยนไฟล์ resulkting ("แปลงแล้ว") ใน Properties -> Source (Tab) -> Source Coding จาก "UTF-8" เป็น "Windows-1258" เพื่อให้เห็นตัวอักษรภาษาสเปนอย่างถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.