จาก. shp ถึง. kml ถึง. shp โดยไม่สูญเสียคุณสมบัติ


10

ฉันได้แปลงรูปร่างไฟล์ที่มีคุณสมบัติเป็น. kml สำหรับลูกค้า จากนั้น. kml และแอตทริบิวต์จะถูกแก้ไขภายใน google earth ฉันได้รับ. kml ที่อัปเดตแล้วและตอนนี้ฉันต้องกลับไปที่. shp ปัญหาคือ: คุณลักษณะทั้งหมดของฉันตอนนี้อยู่ในรูปแบบ html ซึ่งทำให้กล่องข้อมูลป๊อปอัปใน Google Earth เมื่อฉันพยายามแปลงกลับเป็น. shp คุณลักษณะของฉันจะถูกรวมเป็นฟิลด์ (สร้างโดย Google) "คำอธิบาย" คุณลักษณะและข้อมูลของฉันทั้งหมดถูกรวมเข้าในเซลล์เดียว มีวิธีดึงข้อมูลจากเขตข้อมูล "คำอธิบาย" แม้ว่าฉันจะทำเช่นนั้นมีวิธีที่ง่ายในการกำจัดรูปแบบ html และทำให้ใช้งานได้หรือไม่

นี่คือสิ่งที่ฉันใช้โดยใช้ "ตารางฟิวชั่น" ที่ฉันพบในบางฟอรัม คุณสามารถเห็น html ทางด้านซ้ายมันจะดำเนินต่อไปมากกว่าที่จะแสดง

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

ฉันใช้ ArcGIS Desktop 10.2


คุณใช้อะไรในการแปลงระหว่างรูปแบบ? คุณลอง ogr2ogr หรือ QGIS แทนได้ไหม
— bugmenot123

คำตอบ:


3

ฉันเพิ่งยืนยันว่าเครื่องมือ Spatial ETL ที่สร้างขึ้นโดยใช้ส่วนขยายการทำงานร่วมกันของข้อมูลจะนำแอตทริบิวต์จากไฟล์ KML / KMZ ของคุณกลับไปที่รูปร่างไฟล์พร้อมกับสคีมาในชั้นเชิง เพียงเลือกตัวเลือกDynamic Schemaในตัวช่วยสร้างเครื่องมือ:

ขั้นตอน ETL เชิงพื้นที่


วิธีแก้ไขคือการแยกฟิลด์คำอธิบายสำหรับค่าของฟิลด์แอ็ตทริบิวต์ต่างๆที่คุณต้องการและคัดลอกลงในฟิลด์ที่เหมาะสม และครั้งต่อไปให้ลูกค้าของคุณเพิ่มแอททริบิวต์ลงในสเปรดชีต excel หรืออะไรก็ได้เพื่อที่คุณจะสามารถรวมมันกลับไปที่ shapefile เพื่ออัพเดท


1
ฉันคิดว่านั่นเป็นทางออกเดียวของฉัน ณ จุดนี้ แต่ฉันจะใส่แผ่นชีท Excel ในครั้งต่อไป!
— Katie B.

คุณสามารถเข้าถึงส่วนขยายการทำงานร่วมกันของข้อมูลสำหรับ ArcGIS ได้หรือไม่ ฉันไม่ได้มีประสบการณ์กับมันสำหรับปัญหานี้ แต่อาจมีนักเขียนอยู่ในนั้นซึ่งสามารถแมปทัศนคติของคุณ
— Adam

FME จากซอฟต์แวร์ที่ปลอดภัย (การทำงานร่วมกันของข้อมูลเป็นพื้นฐาน) จะทำสิ่งที่คุณต้องการ แต่ก็มีราคาแพงเช่นกัน
— Adam

3

ฉันต้องเปิด kml ใน QGIS ก่อนและบันทึกเป็นรูปร่างไฟล์และมันยังคงคุณสมบัติไว้ ใน QGIS เพิ่มข้อมูลเวกเตอร์และภายใต้การสืบค้นตั้งไฟล์ประเภทเป็น "Keyhole Markup Language (KML)" เรียกดูไปยัง KML ที่คุณต้องการนำเข้าแล้วคลิกเปิด บันทึกวัตถุที่นำเข้าจาก KML ไปยัง Shapefile ในการนำเข้า Shapefile ใน ArcMap คุณจะเห็นคุณลักษณะทั้งหมดที่เก็บรักษาไว้


2

เครื่องมือนี้ส่งออกเป็น KML ที่พัฒนาโดย Kevin Martin ทำงาน

มีปัญหาบางอย่างเกี่ยวกับสไตล์ แต่อย่างน้อยสีและแอตทริบิวต์นั้นถูกต้องและมีตัวเลือกมากมายให้เล่นกับคุณลักษณะป้ายกำกับ ฯลฯ ...


2

ฉันต้องการเพียงหนึ่งในฟิลด์ซึ่งมีสตริงวันที่ ใช้ arcMap ฉันสามารถแก้ปัญหานี้ได้โดยใช้เครื่องคำนวณภาคสนามเพื่อแยกมันออกมา หากคุณต้องการแยกเขตข้อมูลเพียงสองเขตข้อมูลนี้อาจเหมาะกับคุณแม้ว่าจะค่อนข้างน่าเบื่อ

ขั้นตอนต่อไปนี้จะช่วยให้คุณสร้างบรรทัด VB เพื่อใช้ในเครื่องคำนวณฟิลด์เพื่อตัดสตริงย่อยจากฟิลด์คำอธิบายตามแท็ก HTML และความยาวของข้อมูลที่เก็บไว้ในตารางของคุณ

  1. ใน GoogleEarth ให้เปิด KML / KMZ ของคุณคลิกที่คุณสมบัติเพื่อเปิดป๊อปอัป ระบุชื่อที่แน่นอนของเขตข้อมูลที่คุณต้องการเรียกคืน ของฉันถูกเรียกว่า "DATE"
  2. ใน ArcMap เปิดตารางแอตทริบิวต์ของเลเยอร์ที่คุณสร้างขึ้นเมื่อนำเข้า KML / KMZ
  3. ระบุฟิลด์คำอธิบาย ในข้อมูลของฉันเรียกว่า "PopupInfo"
  4. ในระเบียนแรกให้คลิกขวาในเซลล์ "PopupInfo" และคลิก "คัดลอก"
  5. เปิด Notepad และวางเนื้อหาของเซลล์ ตอนนี้คุณจะเห็น HTML สำหรับป๊อปอัป
  6. ใช้ ctrl-F เพื่อค้นหาชื่อฟิลด์จาก KML / KMZ (ในกรณีของฉันคือ "DATE") นี่คือภาพหน้าจอที่แสดงเพียงบรรทัดของ HTML ที่ฉันสนใจ ป้อนคำอธิบายรูปภาพที่นี่
  7. นับจำนวนอักขระรวมถึงช่องว่างจากจุดเริ่มต้นของชื่อฟิลด์จนกระทั่งเริ่มต้นข้อมูลของคุณ ในกรณีของฉันมี 15 ตัวอักษร
  8. กำหนดจำนวนอักขระที่คุณต้องการแยก สำหรับสตริงย่อยของฉันฉันต้องการ 19 ตัวอย่างเช่นถ้าคุณต้องการรหัสสถานะเช่น AZ และ WY คุณอาจต้องการเพียง 2 เท่านั้นหากข้อมูลของคุณไม่มีรายการความยาวที่สอดคล้องกันในฟิลด์นี้ให้ทำเครื่องหมายที่ด้านยาวที่สุด แก้ไข: คุณสามารถลบอักขระพิเศษในภายหลังด้วยตนเองหรือโดยใช้ฟังก์ชั่น instr () และ rtrim () VB โพสต์หรือส่งข้อความหาฉันหากคุณต้องการความช่วยเหลือ
  9. ใน arcMap ให้เพิ่มฟิลด์ TEXT ใหม่ของเลเยอร์ของคุณและอย่าลืมใส่อย่างน้อยอักขระให้มากที่สุดเท่าที่คุณต้องการสำหรับข้อมูลของคุณ ค่าเริ่มต้นคือ 50

  10. จากนั้นเปิดเครื่องคำนวณภาคสนามสำหรับสาขาใหม่ของคุณ พบจุดเริ่มต้นของข้อมูลโดยใช้ฟังก์ชัน InStr () และดึงข้อมูลโดยใช้ฟังก์ชัน Mid () พิมพ์คำสั่ง VB ต่อไปนี้:

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

แน่นอนเปลี่ยนชื่อฟิลด์ของฉันสำหรับคุณ (จากขั้นตอนที่ 3 และ 6) และเปลี่ยนความยาวของตัวเลข 15 และ 19 เป็นความยาวของสตริงย่อยของคุณ (พบได้ในขั้นตอนที่ 7 และ 8)

ในบรรทัด VB ข้างต้น:

  • [PopupInfo] เป็นชื่อของฟิลด์ที่น่ารำคาญที่มี HTML สำหรับป๊อปอัป KML
  • "DATE" เป็นชื่อฟิลด์ KML และแท็ก HTML ที่มีข้อมูลที่ฉันต้องการแยก
  • 15 คือจำนวนอักขระตั้งแต่เริ่มต้นแท็กวันที่จนถึงเริ่มต้นข้อมูลวันที่จริง
  • 19 คือจำนวนอักขระในสตริงวันที่ของเจ้าที่เราต้องการเก็บไว้

1

นี่คือคำแนะนำที่ฉันพบว่าจะนำคุณผ่านขั้นตอนต่างๆโดยใช้ ArcMap, Google Drive Fusion Tables และ MS Excel เพื่อแปลงไฟล์ KML เป็นไฟล์. shp ในขณะที่ยังคงรักษาคุณลักษณะ

เชื่อมโยงไปยังเว็บไซต์ที่มีคำแนะนำ


ใช่ แต่นั่นไม่ได้แก้ปัญหาของฉัน แอตทริบิวต์ของฉันยังคงมีอยู่ในฟิลด์ "คำอธิบาย" ในรูปแบบ html เครื่องมือ KML ไปยังเลเยอร์ไม่ทำงานกับสถานการณ์ของฉัน ฉันเคยลอง arcscripts อื่น
— Katie B.

ดูคำตอบที่แก้ไขของฉัน
— คาเมรอนสโลน

อีกครั้งรูปภาพที่ฉันเชื่อมโยงในคำถามเดิมของฉันคือผลลัพธ์ของฉันเมื่อใช้วิธีตารางฟิวชั่น มันไม่ทำงานสำหรับสถานการณ์ของฉัน
— Katie B.

คุณนำมันมาสู่ excel หรือไม่?
— คาเมรอนสโลน

ใช่ปัญหาเดียวกัน ฉันเพิ่งพบไซต์ฟอรัมอื่นที่มีบุคคลอื่นมีปัญหาเดียวกัน ดูเหมือนว่าฉันจะต้องผ่านสคริปต์ 1,000 บรรทัดและลบรหัสหรือลองทำ "ค้นหาและแทนที่" ฉันขอขอบคุณสำหรับความช่วยเหลือของคุณ
— Katie B.

1

ฉันสามารถทำให้งานนี้ใช้เคอร์เซอร์และรายการเพื่อแยกฟิลด์ PopupInfo xml เป็นค่าที่มีประโยชน์

  1. ใช้ arcpy KML เพื่อเลเยอร์เครื่องมือและเครื่องมือโครงการเพื่อเข้าสู่ระบบพิกัดที่ต้องการ (ฉันพบปัญหาในการเพิ่มฟิลด์ในเอาต์พุตการแปลงดั้งเดิมซึ่งอาจเกิดจากไฟล์เลเยอร์ที่เกี่ยวข้อง)

  2. ใช้ .da.SearchCursor เพื่อรับสตริง PopupInfo จากแถวแรก จากนั้นแยกเป็นรายการโดยใช้ '<' ลบค่าสองรายการแรก (ฟิลด์ป้ายกำกับจาก Google Earth) และใส่ค่าที่เหลือที่มีแท็ก 'td>' แต่ไม่ใช่แท็กปิด 'td>' ลงในรายการใหม่ ของชื่อฟิลด์ (แม้แต่ดัชนี) และค่าของฟิลด์ (ดัชนีคี่)

  3. วนรอบรายการชื่อเขตข้อมูลด้วย arcpy.AddField_management เพื่อเพิ่มเขตข้อมูลทั้งหมด (ข้ามหากมีอยู่แล้ว)

  4. ใช้ .da.UpdateCursor เพื่อรับ PopupInfo สำหรับแถวทั้งหมดจากนั้นแยกและสร้างรายการใหม่เช่นเดียวกับเคอร์เซอร์ค้นหา

  5. ครั้งนี้ใช้ค่าดัชนีคี่ทั้งหมดเพื่ออัปเดตแถว (ถ้า i% 2 <> 0: แถว [(i-1) / 2] = รายการ [i]) จากนั้นเคอร์เซอร์ upupateRow (แถว)



0

UPDATE: หากคุณเจอปัญหานี้ด้วยปัญหาเดียวกันมีเครื่องมือสำหรับคุณ! ตรวจสอบhttps://mygeodata.cloud/

ฉันทำงานได้ดีจริงๆ ฉันสามารถอัปโหลด KML ของฉันและรูปร่างไฟล์ที่ส่งออกมีแอตทริบิวต์ทั้งหมดของฉันอย่างถูกต้องในสาขาของตนเอง ข้อเสียเพียงอย่างเดียวคือมีการแปลง "ฟรี" จำนวน จำกัด


-3

ยังไม่มีวิธีแก้ไขปัญหาการแปลงนี้อย่างง่าย มันถูกถามที่นี่หลายครั้งในช่วงหลายปีที่ผ่านมา:

KML ใน QGIS ที่มีข้อมูลเพิ่มเติม

รักษา-แอตทริบิวต์ระหว่าง-kml2shp แปลงใน ArcGIS สำหรับเดสก์ทอป

แปลง KML เพื่อ shapefile โดยไม่ต้องสูญเสียแอตทริบิวต์ข้อมูล

คำอธิบายของ esri สำหรับเครื่องมือแปลง KmltoLayer:

"ในฐานะ 'เจ้าของ' ของเครื่องมือ KML ที่ Esri ฉันสามารถพูดได้: องค์ประกอบ ExtendedData ภายใน KML จะไม่แปลเป็นแอตทริบิวต์ของฟิลด์เมื่อใช้เครื่องมือ KML ไปยังเลเยอร์ด้วย ArcGIS ทุกรุ่น (9.3-10.3) ซึ่งรวมถึง ArcMap บน Windows หรือ ArcGIS Server บน Linux มีการร้องขอการปรับปรุงเพื่อรองรับสิ่งนี้ซึ่งเรากำลังพิจารณาสำหรับการเปิดตัวในอนาคต "


2
เฮ้ - ฉันทำผิดส่วนตัวกับคำตอบของคุณ หากคุณกำลังจะคัดลอกและวางความคิดเห็นของฉันและใส่ไว้ในเครื่องหมายคำพูดอย่าเพิ่มความเห็นของคุณเกี่ยวกับการซื้อส่วนขยาย
— KHibma

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