Chuyển đổi KML thành shapefile mà không mất các thuộc tính bằng cách sử dụng QGIS?


29

Tôi có một tệp KML với hàng trăm điểm. Đến mỗi điểm đều có thông tin, chẳng hạn như Tên, Sức mạnh, Tuổi tác (đó là bản đồ của các nhà máy thủy điện). Nếu tôi nhập tệp KML đó vào QGIS, thông tin này sẽ bị mất.

Có cách nào tôi có thể giữ thông tin này?

Thông tin trông như thế này:

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

Có bất cứ điều gì sai với mã của tôi?


1
Làm thế nào bạn nhập khẩu .kmlvào QGIS? Định dạng này được hỗ trợ như một trong những định dạng cơ bản, vì vậy nó phải là một quá trình tương đối không gây đau đớn để thêm một kmltệp dưới dạng một lớp. Nếu bạn cung cấp thêm chi tiết, ai đó có thể giúp tìm ra điều gì đang xảy ra. Ngoài ra thông tin về nguồn của tập tin có thể hữu ích.
Nhận không gian

1
Bạn có một liên kết trực tiếp đến kml?
Mapperz

Tôi nghĩ rằng nó có thể thông qua FME, hoặc nếu bạn cảm thấy một chút phiêu lưu, bạn có thể viết một kịch bản python để phân tích kml (xml!) Và xuất thành shapefile. (thư viện để sử dụng: thư viện shapefile python, bất kỳ XML nào từ python)
U2ros

2
RK vâng tôi đã thấy cái đó Mặc dù tôi quyết định đặt câu hỏi mới với mô tả tốt hơn về vấn đề vì không có giải pháp thỏa mãn cho nó. Ngoài ra, sau một vòng thử nghiệm khác, vấn đề có thể là các tệp KML vùng đất ngập nước không phải là KML hợp lệ khi được kiểm tra trong trình xác thực KML trực tuyến và có nhiều lỗi ...
Miro

1
U2ros Tôi đã thử FME trực tuyến nhưng không thành công. Có lẽ là FME trên máy tính để bàn, tôi có thể thử nó trong "vòng cài đặt" tiếp theo ... Tôi chắc chắn không cảm thấy đủ phiêu lưu để lập trình kịch bản sẽ chuyển đổi kml thành shp :-). Nhưng trong trường hợp xấu nhất tôi có thể tưởng tượng việc viết tập lệnh sẽ đi qua KML, tìm "ExtendedData" cho mọi tính năng và tạo bảng / csv mà tôi có thể tham gia thông qua "name" để chuyển đổi KML trong QGIS / ArcGIS / Mapinfo ...
Miro

Câu trả lời:


15

ExtendedData không có giá trị "tên" chính xác.

Ví dụ

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

không được nhập bởi GDAL và Qgis Master, trong khi

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

được nhập khẩu.

Bạn có thể thay đổi điều đó với một trình soạn thảo văn bản tốt.

------------------- Được thêm bởi Miro ---------------------

Để chỉnh sửa KML, cần sử dụng trình soạn thảo văn bản cho phép "Biểu thức chính quy" trong chức năng Thay thế như PSPad (hoặc Notepad ++ và nhiều trình soạn thảo văn bản miễn phí khác)

Tìm thấy: <Data><displayName>(.*)</displayName>

Thay thế: <Data name="$1"><displayName>$1</displayName>

Sau đó, chỉ cần sử dụng QGIS (khóa là phiên bản "mới" - bao gồm phiên bản GDAL 1.9.2 trở đi) và "Thêm lớp vectơ" và lớp sẽ tải với tất cả "ExtendedData".


Cảm ơn bạn, đó là thông tin quan trọng. Tôi đã cố gắng thay thế nó trong một tập tin thử nghiệm và nó hoạt động hoàn hảo. Tất cả "ExtendedData" hiện đang ở trong bảng dưới dạng colums. Một lần nữa, cảm ơn bạn rất nhiều.
Miro

3
Trên thực tế, DisplayName không được Qgis sử dụng. Vì vậy, việc thay thế có thể được thực hiện mà không cần RegExp bằng cách thay thế <Dữ liệu> <DisplayName> bằng <Tên dữ liệu = "và thay thế </ DisplayName> bằng">.
AndreJ

1
Tệp KML của tôi cũng chứa thẻ <SchemaData> mà tôi phải nhận xét để mở tệp đó trong QGIS. Nhưng nếu không thì mánh khóe đã hoạt động hoàn hảo!
Djana

8

Tôi đã chuyển đổi một trong các vùng đất ngập nước với globalmapper để định hình: kèm theo hai ảnh chụp màn hình từ các tệp dbf được chuyển đổi (các vùng và đường): nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

hy vọng đây là những gì bạn muốn ..


Cảm ơn bạn, vâng đó chính xác là những gì tôi cần. Điều tốt để biết là có phần mềm có thể xử lý các KML này không tuân thủ tiêu chuẩn KML. Bởi vì đã có câu trả lời khác về cách thực hiện với QGIS miễn phí, tôi sẽ không thử Global Mapper nhưng nó chắc chắn có thể giúp đỡ người khác. Cám ơn bạn một lần nữa.
Miro

Thực sự là một công cụ chuyển đổi tuyệt vời, tuyệt vời !!
SIslam

6

Bạn có thể sử dụng phần mềm Global Mapper trong đó bạn có thể dễ dàng xuất / nhập tệp kml / kmz + đính kèm dữ liệu và rất nhiều định dạng vector và raster..Tôi là một trong những phần mềm tốt nhất ..

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


Cảm ơn bạn cho tiền boa. Tôi tin rằng nó có thể nhập / xuất các tệp kml / kmz nhưng tôi đã thử hơn 5 ứng dụng có thể làm điều đó. Và không ai trong số họ có thể đọc các thuộc tính ("ExtendedData"). Vì vậy, thực sự Global Mapper có thể làm điều đó?
Miro

5

Dường như libkml của Google không giao hàng với GDAL 1.9.2 trên Ubuntu, cụ thể là gdal-bin 1.9.2-2 ~ precision4:

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

Để có được một phiên bản hoạt động với libkml và ExtendedDatahỗ trợ, tôi đã phải xây dựng GDAL từ thân svn (r25473) sau khi xây dựng libkml từ thân svn (r864), lưu ý rằng bản phát hành 1.2.0 rõ ràng là không đủ, như được ghi lại trên trang web GDAL . Coi chừng việc cài đặt libkml0trên Ubuntu chính xác (hiện là 1.2.0-1ubfox6) sẽ không giúp ích gì. Bạn thực sự cần trung kế 1.3 hoặc svn mà tôi không thể tìm thấy PPA.

Cuối cùng tôi đã không thể xây dựng libkml trên Ubuntu một cách chính xác; có lỗi loại trong phiên bản boost đi kèm với nó, và có lỗi khi chạy libtool vì các phụ thuộc không theo thứ tự. Vì bất kỳ lý do gì, đây không phải là vấn đề đối với Debian, nơi tôi đã thành công:

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

Khi tôi đã bắt đầu, việc chạy ogr2ogr -f "ESRI Shapefile" foo.shp foo.kmlcho tôi một shapefile mà qgis có thể nhập, bảo toàn các ExtendedDatathuộc tính.


5

Trình điều khiển kml Ogr2ogr được sử dụng bởi Qgis 1.8.0 Lisboa không hỗ trợ các thẻ ExtendedData kml.

Trình điều khiển LIBKML có, nó được tích hợp trong phiên bản GDAL 1.9.2 trở đi, các gói OSGEO4W, MS4W và Qgis Master.

Dữ liệu của bạn không sai, nhưng trình điều khiển LIBKML trong OSGeo4W có một số vấn đề với SchemaData. Ngoài ra, các công việc sau đây:

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

EDIT: Lỗi SchemaData hiện đã được sửa trong gói GDAL 1.9.2-2 của OSGEO4W.


4

Sử dụng FME 2012 (SP4)

Tải Trình đọc KML

Chọn một Nhà văn (Shapefile)

kết nối các mục và chọn ghi ( sao chép các thuộc tính từ các loại tính năng )

Chạy không gian làm việc

nhập mô tả hình ảnh ở đây


Cảm ơn bạn, tôi đã tải xuống fme_install.msi nhưng có lỗi trong quá trình cài đặt và vì đã có giải pháp làm việc khác cho câu hỏi này nên tôi sẽ không tiếp tục theo cách này. Dù sao cũng cảm ơn bạn một lần nữa.
Miro


1

Tôi không biết bạn có thể đạt được điều đó với QGIS. MapWindow có một plugin KML2Shapefile .

KML2Shapefile là một plugin cho MapWindow GIS chuyển đổi các tệp KML và KMZ của Google Earth thành các shapefile để sử dụng trong GIS.

KML2Shapefile sẽ phân chia từng loại hình học KML thành một shapefile riêng. Nó hỗ trợ hình học phức tạp và có thể trình bày phần lớn KML dưới dạng dữ liệu thuộc tính.

MapWindow cũng là một gói GIS nguồn mở và miễn phí. Bạn có thể tải xuống và cài đặt nó miễn phí. Bạn có thể chuyển đổi KML thành shapefile bằng cách sử dụng plugin KML2Shapefile trong MapWindow và chỉ cần tải tệp hình dạng kết quả trong QGIS. Giả sử bạn đang ở trên Windows.

Giải pháp tốt nhất tôi có thể nghĩ ra bây giờ. Tôi hy vọng ai đó biết về một plugin để làm điều đó trong QGIS.


1
Cảm ơn bạn đã giúp đỡ. Tôi đã thử điều đó, nhưng dữ liệu vẫn bị mất. Thông tin trông như thế này: <ExtendedData> <SchemaData giảnUrl = "# vorlage"> <SimpleData name = "Name"> Test </ SimpleData> <SimpleData name = "Power"> 10895 </ SimpleData> <SimpleData name = "Location"> L </ SimpleData> </ SchemaData> </ ExtendedData> có gì sai với mã của tôi không?
Felix

Oh xin lỗi về điều đó. Tôi đã hy vọng nó sẽ làm việc.
RK

1
@Felix - Thông tin bạn cung cấp trong bình luận của bạn thực sự hữu ích. Tôi sẽ khuyên bạn nên chỉnh sửa câu hỏi của bạn và thêm nó vào đó để có thêm bối cảnh và rõ ràng.
Nhận Spatial

@AndreJoost - Âm thanh như bạn đã đưa ra một câu trả lời tốt. Sẽ đáng để thêm nó dưới dạng một câu trả lời thực tế để nó sẽ hiển thị trong kết quả tìm kiếm của bất kỳ ai khác có cùng vấn đề.
Nhận không gian

1

Nhận Global Mapper, tất cả những gì bạn phải làm là mang vào KMZ hoặc KML sau đó xuất Vector IMG (Tệp ESRI SHP). Bản đồ toàn cầu có thể đọc hầu hết các loại tập tin. Sau đó mở hình dạng trong ARC, Global mapper, Manifold, QGIS, ect và xem bảng thuộc tính. Tất cả thông tin sẽ ở đó. bạn cũng có thể mở tệp DBF từ SHP bằng Microsoft Excel tại thời điểm này và sau đó lưu dưới dạng mở rộng tệp XLXS nếu bạn cũng muốn.


1

Trong hội tụ QGIS 3.2.0 có thể dễ dàng thực hiện bằng cách sử dụng Hộp công cụ.

Chọn trong Hộp công cụ -> GDAL -> Hội tụ véc tơ -> Chuyển đổi định dạng .... (Caja de Herramientas de Procesos -> GDAL -> Conversión Vectorial -> Convertir Formato)

Chọn tệp KML, lưu dưới dạng tệp SHP. Tôi cũng đã phải thay đổi tệp resulkting ("Đã chuyển đổi") trong Thuộc tính -> Nguồn (Tab) -> Mã hóa nguồn từ "UTF-8" thành "Windows-1258" để xem đúng các ký tự tiếng Tây Ban Nha.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.