จาก. 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.