Từ .shp đến .kml đến .shp mà không mất các thuộc tính


10

Tôi đã chuyển đổi một shapefile với các thuộc tính thành .kml cho một khách hàng. Các .kml và các thuộc tính sau đó đã được chỉnh sửa trong google earth. Tôi đã nhận được .kml cập nhật và bây giờ tôi cần đưa nó trở lại .shp. Vấn đề là: tất cả các thuộc tính của tôi hiện ở định dạng html, điều này làm cho hộp thông tin bật lên trong google earth. Khi tôi cố gắng chuyển đổi trở lại .shp, các thuộc tính của tôi được gộp vào trường "Mô tả" do google tạo. Và TẤT CẢ các thuộc tính và thông tin của tôi được gộp vào một ô duy nhất. Có cách nào để trích xuất dữ liệu từ trường "Mô tả" không. Ngay cả khi tôi làm điều đó, có cách nào dễ dàng để thoát khỏi định dạng html và làm cho nó có thể sử dụng được không?

Đây là những gì tôi nhận được bằng cách sử dụng phương pháp "Bảng tổng hợp" mà tôi tìm thấy trên một số diễn đàn. Bạn có thể thấy html ở bên trái, nó tiếp tục ở xa hơn nó hiển thị.

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

Tôi đang sử dụng ArcGIS Desktop 10.2.


Bạn sử dụng gì để chuyển đổi giữa các định dạng? Bạn có thể thử ogr2ogr hoặc QGIS không?
bugmenot123

Câu trả lời:


3

Tôi vừa xác nhận rằng một công cụ ETL không gian được tạo bằng tiện ích mở rộng Khả năng tương tác dữ liệu sẽ đưa các thuộc tính từ tệp KML / KMZ của bạn trở lại một shapefile với lược đồ một cách khéo léo. Chỉ cần chọn tùy chọn Lược đồ động trong trình hướng dẫn tạo công cụ:

Bước ETL không gian


một công việc xung quanh sẽ là phân tích trường mô tả cho các giá trị của các trường thuộc tính khác nhau mà bạn cần và sao chép chúng vào các trường thích hợp. Và lần tới, hãy để khách hàng của bạn thêm các thuộc tính vào một bảng tính excel hoặc một cái gì đó để bạn có thể tham gia lại vào shapefile của mình để cập nhật.


1
Tôi nghĩ rằng đó là giải pháp duy nhất của tôi tại thời điểm này. Nhưng tôi chắc chắn sẽ bao gồm một bảng tính excel vào lần tới!
Katie B.

Bạn có quyền truy cập vào tiện ích mở rộng Khả năng tương tác dữ liệu cho ArcGIS không? Tôi không có kinh nghiệm về vấn đề này, nhưng có thể có những nhà văn trong đó có thể sắp xếp lại những suy nghĩ của bạn
Adam

FME từ Phần mềm An toàn (dựa trên Khả năng Tương tác Dữ liệu) cũng sẽ làm những gì bạn cần, nhưng nó cũng rất tốn kém.
Adam

3

Tôi đã phải mở kml trong QGIS trước và lưu dưới dạng shapefile và nó duy trì các thuộc tính. Trong QGIS, Thêm dữ liệu vectơ và trong trình duyệt, đặt các tệp loại thành "Ngôn ngữ đánh dấu lỗ khóa (KML)" Duyệt đến KML mà bạn muốn nhập, sau đó nhấp vào mở. Lưu các đối tượng được nhập từ KML vào Shapefile. Khi nhập shapefile trong ArcMap, bạn sẽ thấy tất cả các thuộc tính được duy trì.


2

Công cụ này, Xuất ra KML được phát triển bởi Kevin Martin thực hiện công việc.

Có một số vấn đề với kiểu dáng nhưng ít nhất màu sắc và thuộc tính là chính xác và nó có rất nhiều tùy chọn để chơi với các thuộc tính, nhãn, v.v ...


2

Tôi chỉ cần một trong các trường chứa chuỗi ngày. Sử dụng arcMap, tôi có thể giải quyết điều này bằng cách sử dụng máy tính trường để giải nén nó. Nếu bạn chỉ cần trích xuất một vài trường, điều này có thể phù hợp với bạn, mặc dù hơi tẻ nhạt:

Các bước sau đây sẽ giúp bạn xây dựng một dòng VB để sử dụng trong máy tính trường để cắt một chuỗi con từ trường mô tả dựa trên các thẻ HTML và phần dữ liệu được lưu trữ trong bảng của bạn.

  1. Trong GoogleEarth, mở KML / KMZ của bạn, nhấp vào một tính năng để mở cửa sổ bật lên. Xác định tên chính xác của lĩnh vực bạn muốn thử lại. Của tôi được gọi là "NGÀY"
  2. Trong ArcMap, mở bảng thuộc tính của lớp mà bạn đã tạo khi nhập KML / KMZ.
  3. Xác định trường mô tả. Trong dữ liệu của tôi, nó được gọi là "PopupInfo"
  4. Trong bản ghi đầu tiên, nhấp chuột phải vào ô "PopupInfo" và nhấp vào "sao chép"
  5. Mở Notepad và dán nội dung của ô. Bây giờ bạn sẽ thấy HTML cho cửa sổ bật lên.
  6. Sử dụng ctrl-F để tìm tên trường từ KML / KMZ (trong trường hợp của tôi là "DATE"). Đây là một ảnh chụp màn hình chỉ hiển thị dòng HTML tôi quan tâm. nhập mô tả hình ảnh ở đây
  7. Đếm số lượng ký tự, bao gồm khoảng trắng từ đầu tên trường cho đến khi bắt đầu dữ liệu của bạn. Trong trường hợp của tôi có 15 ký tự.
  8. Xác định có bao nhiêu ký tự bạn muốn trích xuất. Đối với chuỗi con của tôi, tôi cần 19. Ví dụ: nếu bạn chỉ cần các mã trạng thái như AZ và WY, bạn có thể chỉ cần 2. Nếu dữ liệu của bạn không có các mục có độ dài nhất quán trong trường này, lỗi ở phía dài nhất. Chỉnh sửa: bạn có thể xóa các ký tự phụ sau đó bằng tay hoặc bằng cách sử dụng các hàm VB () và rtrim (). Gửi hoặc nhắn tin cho tôi nếu bạn cần giúp đỡ với điều đó.
  9. Trong arcMap, thêm một trường văn bản mới vào lớp của bạn và đảm bảo cung cấp cho nó ít nhất nhiều ký tự mà bạn cần cho dữ liệu của mình. Mặc định là 50.

  10. Sau đó, mở máy tính trường cho trường mới của bạn. Bắt đầu dữ liệu được tìm thấy bằng hàm InStr () và dữ liệu được trích xuất bằng hàm Mid (). Gõ lệnh VB sau:

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

Tất nhiên, hoán đổi tên trường của tôi cho tên của bạn (từ bước 3 và 6) và thay đổi độ dài của các số 15 và 19 thành độ dài của chuỗi con của bạn (tìm thấy trong bước 7 và 8).

Trong dòng VB ở trên:

  • [PopupInfo] là tên của trường gây phiền nhiễu có chứa HTML cho cửa sổ bật lên KML.
  • "NGÀY" là tên trường KML và thẻ HTML chứa dữ liệu mà tôi muốn trích xuất.
  • 15 là số lượng ký tự từ đầu thẻ ngày đến bắt đầu dữ liệu ngày thực tế.
  • 19 là số lượng ký tự trong chuỗi ngày mà chúng tôi muốn giữ lại.

1

Dưới đây là hướng dẫn mà tôi thấy rằng sẽ hướng dẫn bạn một số bước bằng ArcMap, Google Drive Fusion Table và MS Excel để chuyển đổi tệp KML thành tệp .shp trong khi bảo tồn các thuộc tính.

Liên kết đến trang web có hướng dẫn .


Có, nhưng điều đó không giải quyết vấn đề của tôi. Các thuộc tính của tôi vẫn được gộp vào trường "Mô tả" ở định dạng html. Công cụ KML to Layer không hoạt động cho tình huống của tôi. Tôi thậm chí đã thử các cung khác.
Katie B.

Xem câu trả lời chỉnh sửa của tôi.
Cameron Sloan

Một lần nữa, hình ảnh tôi liên kết trong câu hỏi ban đầu là kết quả của tôi khi sử dụng phương pháp bảng tổng hợp. Nó không hoạt động cho tình huống của tôi.
Katie B.

Bạn đã đưa nó vào excel?
Cameron Sloan

Vâng, cùng một vấn đề. Tôi chỉ tìm thấy một trang web diễn đàn nơi người khác đang gặp vấn đề tương tự. Có vẻ như tôi sẽ phải trải qua 1000 dòng script và xóa mã hoặc thử thực hiện "tìm và thay thế" Tôi đánh giá cao sự giúp đỡ của bạn.
Katie B.

1

Tôi đã có thể thực hiện công việc này bằng cách sử dụng con trỏ và danh sách để chia trường xml PopupInfo thành các giá trị hữu ích

  1. sử dụng công cụ lớp KML để tạo lớp và công cụ dự án để truy cập vào hệ tọa độ mong muốn (tôi gặp vấn đề khi thêm trường vào đầu ra chuyển đổi ban đầu, có thể là do tệp lớp được liên kết với nó)

  2. Sử dụng .da.SearchCthon để lấy chuỗi PopupInfo từ hàng đầu tiên. Sau đó chia nó thành một danh sách dựa trên '<', xóa hai giá trị đầu tiên (trường nhãn khỏi Google Earth) và đặt các giá trị còn lại có thẻ 'td>' nhưng không gắn thẻ 'td>' vào danh sách mới tên trường (chỉ mục chẵn) và giá trị trường (chỉ mục lẻ)

  3. Lặp lại danh sách tên trường với arcpy.AddField_man quản lý để thêm tất cả các trường (bỏ qua nếu chúng đã tồn tại)

  4. Sử dụng .da.UpdateCoder để nhận PopupInfo cho tất cả các hàng, sau đó phân tách và tạo danh sách mới giống như với con trỏ tìm kiếm

  5. lần này, sử dụng tất cả các giá trị chỉ mục lẻ để cập nhật các hàng (nếu i% 2 <> 0: row [(i-1) / 2] = list [i]) và sau đó con trỏ.updateRow (hàng)



0

CẬP NHẬT: nếu bạn gặp chủ đề này với cùng một vấn đề, có một công cụ dành cho bạn! Hãy xem https://mygeodata.cloud/

Tôi làm việc rất tốt Tôi đã có thể tải lên KML của mình và shapefile đã xuất có tất cả các thuộc tính của tôi một cách chính xác trong các trường riêng của chúng. Nhược điểm duy nhất là số lượng chuyển đổi "miễn phí" có giới hạn.


-3

Hiện vẫn chưa có giải pháp đơn giản cho vấn đề chuyển đổi này. Nó đã được hỏi ở đây nhiều lần trong vài năm qua:

kml-in-qgis-with-thêm-data

bảo quản-thuộc tính-trong-kml2shp-convert-in-arcgis-for-desktop

chuyển đổi-kml-thành-shapefile-không-mất-thuộc tính-dữ liệu

lời giải thích của esri cho công cụ chuyển đổi KmltoLayer của họ:

"Là 'chủ sở hữu' của công cụ KML tại Esri, tôi có thể nói: Các phần tử ExtendedData bên trong KML sẽ không chuyển thành các thuộc tính trường khi sử dụng công cụ KML sang Layer với ArcGIS ở bất kỳ phiên bản nào (9.3-10.3). Windows, hoặc ArcGIS Server trên Linux. Có một yêu cầu nâng cao để hỗ trợ điều này mà chúng tôi đang xem xét để phát hành trong tương lai. "


2
Này - tôi xúc phạm cá nhân đến câu trả lời của bạn. Nếu bạn định sao chép và dán nhận xét của tôi và đặt chúng trong dấu ngoặc kép, chắc chắn KHÔNG thêm bình luận của riêng bạn về việc mua tiện ích mở rộng.
KHibma

@sirgeo chắc chắn có một giải pháp cho vấn đề này, trong phần mở rộng Khả năng tương tác dữ liệu. Có vẻ như đây không phải là một giải pháp mà bạn thích.
Adam
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.