รองรับการเข้ารหัสอักขระในฐานข้อมูลภูมิศาสตร์และรูปร่าง


11

ฉันมีฐานข้อมูลทางภูมิศาสตร์หลายอย่างที่มีคลาสคุณลักษณะพร้อมตัวอักษรกรีกในคุณสมบัติมากมาย เมื่อฉันลองส่งออกฟีเจอร์คลาสเป็น shapefile จาก ArcCatalog คุณลักษณะนั้นจะถูก butchered ในข้อมูลเชพไฟล์ปัญหาการเข้ารหัสอักขระบางชนิด สิ่งเดียวกันนี้เกิดขึ้นเมื่อฉันใช้ ogr2ogr ใน FWtools เพื่อแปลงเลเยอร์จาก MDB เป็น KML, shp และอื่น ๆ

ใครบ้างมีประสบการณ์พยายามจัดการกับรูปแบบการเข้ารหัสในรูปแบบข้อมูล GIS

เป้าหมายที่แท้จริงที่นี่คือการรับข้อมูลบางส่วนจากฐานข้อมูล Geod ของ Esri เหล่านี้ลงในฐานข้อมูล Postgres / PostGIS แต่การเข้ารหัสที่ใช้ไม่ได้จะไม่ทำงาน ฉันกำลังจะไปส่งออกจาก geoDBs เพื่อ shapefiles shp2pgsqlแล้วโหลดพวกเขาด้วย นั่นเป็นเส้นทางที่ง่ายที่สุดในการไปที่นั่นหรือ


2
คุณสามารถใช้ QGIS เพื่อนำเข้า shapfile ด้วยตัวเลือก CP1256 และส่งออกด้วย UTF8 เพื่อหลีกเลี่ยงปัญหาที่ไม่ใช่ Unicode

คำตอบ:


10

ฉันคิดว่าคุณเป็นส่วนหนึ่งที่นั่น คุณสามารถใช้iconvการแปลงจากการเข้ารหัสหนึ่งไปอีกการเข้ารหัสและคุณสามารถใช้มันเป็นส่วนหนึ่งของshp2pgsqlกระบวนการ ตัวอย่างเช่น:

shp2pgsql *postgrestablename* | iconv -f *sourceencoding* -t *targetencoding* | psql -d *yourdatabase*

หากคุณทำงานในสภาพแวดล้อม Linux iconvควรติดตั้งไว้แล้ว สำหรับ Windows ผมพบว่าLibIconv สำหรับ Windows แต่ฉันไม่มีประสบการณ์ในการใช้งานiconvWindows ดังนั้นฉันจึงไม่สามารถรับรองได้

หวังว่านี่จะช่วยได้!

โจ


ปัญหาเกิดขึ้นก่อนที่จะสามารถใช้ shp2pgsql คุณลักษณะใน shapefile เสียแล้วถ้าฉันเข้าใจถูกต้อง
underdark

สิ่งนี้ช่วยได้ไหม? resources.arcgis.com/content/kbase?fa=articleShow&d=21106
mwalker

underdark คุณถูกต้อง ข้อมูลไม่ดีก่อนที่ฉันจะไปที่ขั้นตอน shp2pgsql
colemanm

ขอบคุณ mwalker ... วิธีแก้ปัญหาที่ใช้งานได้ดีจนถึงตอนนี้! ฉันเปลี่ยนรูปแบบ CodePage เป็น UTF-8 และข้อมูล shapefile DBF แสดงอักขระที่ถูกต้องในขณะนี้ และการใช้ PostGIS shapefile loader ใน QGIS ข้อมูลในฐานข้อมูล PostGIS ก็ถูกต้องเช่นกัน
colemanm

6

ด้านล่างรายละเอียดของกระบวนการที่ฉันใช้สำหรับแปลงไฟล์ GeoDataBase ด้วยฟิลด์ภาษาอาหรับเป็นรูปแบบไฟล์ด้วยการเข้ารหัส UTF-8 ที่เปิดอย่างมีความสุขทั้งใน QGIS และ ArcMap แสดงทั้งภาษาอาหรับและภาษาอังกฤษอย่างถูกต้อง (โดยไม่ต้องใช้ส่วนขยายเพื่อส่งออกหรืออ่าน)

  • แนวคิดพื้นฐานคือ: จาก FGDB ส่งออกรูปร่างไฟล์รวมถึง. dbf (ในการเข้ารหัสผิด) จากนั้นส่งออกตารางแอตทริบิวต์ของเลเยอร์เดียวกันกับข้อความ (ในการเข้ารหัสที่ถูกต้องซึ่งเป็น UTF-8) และใช้โปรแกรมอื่น เพื่อแทนที่เนื้อหาของ shapefile .dbf ด้วยฟิลด์ข้อมูล UTF-8 ที่เหมาะสมและบันทึก. dbf ด้วยการเข้ารหัส UTF-8 จากนั้นเพิ่มไฟล์. cpg ลงในแต่ละ shapefile เพื่อแจ้ง ArcGIS เกี่ยวกับการเข้ารหัสใหม่ของ. dbf ขั้นตอน:

1) เพิ่มเลเยอร์จาก FGDB ลงใน ArcMap (ฉันใช้ 10.1 แต่ไม่มีเหตุผลที่มันจะไม่ทำงานในเวอร์ชันก่อนหน้านี้เพราะบิตการเข้ารหัสเกิดขึ้นในภายหลังนอก Arc) ในการส่งออกให้คลิกขวาที่เลเยอร์และเลือกข้อมูล -> ส่งออกข้อมูลคลิกปุ่มโฟลเดอร์ในกล่องโต้ตอบการส่งออกเพื่อเปิดกล่องโต้ตอบบันทึกและเลือก Shapefile เป็นรูปแบบผลลัพธ์

1b) วิธีสำรองไปด้านบน: นำทางไปยัง FGDB ใน ArcCatalog คลิกขวาเลือกส่งออก -> ไปยัง Shapefile (หลายรายการ) และส่งออก FGCB ทั้งหมดเป็นโฟลเดอร์ที่เต็มไปด้วยไฟล์รูปร่างในการดำเนินการครั้งเดียว)

2) ตอนนี้คุณมีชุดไฟล์รูปร่างที่ไม่มีความหมายซึ่งสคริปต์ภาษาอาหรับควรเป็น (ในเครื่องของฉันมันแสดงเครื่องหมายคำถามแทนอักขระ) ส่วน. dbf ของ shapefiles เองที่เปิดใน Excel หรืออะไรก็ตามมีความหมายแทนภาษาอาหรับ ไม่ใช่เพียงปัญหาการแสดงผลในโปรแกรม GIS แต่ไฟล์. dbf นั้นไม่มีตัวอักษรภาษาอาหรับ ยังไม่เป็นประโยชน์

3) ใน ArcMap เปิดตารางแอตทริบิวต์ของเลเยอร์จาก FGDB ตารางจะเปิดขึ้นพร้อมทั้งแสดงภาษาอังกฤษและภาษาอาหรับอย่างถูกต้อง (นั่นเป็นสาเหตุที่ FGDB ถูกใช้ตั้งแต่แรก) ในเมนูตัวเลือกตารางของหน้าต่างตารางแอตทริบิวต์เลือกส่งออกและในกล่องโต้ตอบส่งออกข้อมูลคลิกปุ่มโฟลเดอร์ออกเพื่อไปยังกล่องโต้ตอบบันทึกข้อมูลที่คุณเลือกไฟล์ข้อความเป็นประเภทเอาท์พุท ตอนนี้คุณมีไฟล์ข้อความที่จะเปิดใน Notepad ด้วยตัวคั่นจุลภาคเข้ารหัสเป็น UTF-8 โดยเข้ารหัสทั้งภาษาอังกฤษและภาษาอาหรับอย่างถูกต้อง

ตอนนี้เพื่อรับข้อมูลนั้นในส่วน. dbf ของรูปร่างไฟล์!

4) Open LibreOffice Calc ซึ่งเป็นโคลน Excel แบบโอเพ่นซอร์สที่เปิดจัดการและบันทึกไฟล์. dbf ได้อย่างง่ายดายเพื่อเปิดไฟล์. dbf ของ shapefile

ในกรณีนี้ฉันไม่ได้ใช้ LibreOffice แทนที่จะเป็น MS Office ด้วยเหตุผลทางอุดมการณ์ แต่เพียงเพราะฉันไม่สามารถหาวิธีที่จะทำให้ Excel บันทึกไฟล์. dbf ซึ่งเป็นเรื่องง่ายใน Calc จริงๆแล้วมันเป็น ตัวเลือกเริ่มต้นเมื่อกดปุ่มบันทึกหลังจากเปิดและแก้ไขไฟล์. dbf ใน Calc ในขณะที่ Excel จะระบุว่าไฟล์ "ไม่สามารถบันทึกในรูปแบบปัจจุบัน" และไม่เป็นประโยชน์เพื่อเสนอ "บันทึกเป็นรูปแบบล่าสุด" (ไม่มีตัวเลือกสำหรับ. dbf) มีส่วนขยาย / ปลั๊กอินสำหรับ Excel ที่ตั้งใจจะทำงาน (

ไฟล์. dbf ใน Calc ยังคงแสดงซึ่งพูดพล่อยๆแทนภาษาอาหรับ ข้างให้เปิด. csv ที่คุณส่งออกจากตารางคุณลักษณะของ shapefile เดียวกันตรวจสอบให้แน่ใจว่าคุณระบุ UTF-8 เป็นการเข้ารหัส (และเครื่องหมายจุลภาคเป็นตัวคั่น) ในกล่องโต้ตอบการเปิด ไฟล์ข้อความควรเปิดในสเปรดชีท Calc ที่สองโดยที่ภาษาอาหรับแสดงอย่างถูกต้องและควรมีคอลัมน์เดียวกันกับ. dbf บวกคอลัมน์ OBJECTID ที่จุดเริ่มต้น คัดลอกวางคอลัมน์จาก. csv ที่มีอารบิกที่เหมาะสมลงใน. dbf (อันที่จริงฉันเพิ่งคัดลอกวางทั้งตารางโดยมีข้อยกเว้นของคอลัมน์ ID ด้านซ้ายสุดเพื่อประหยัดเวลา; กดบันทึกใน. dbf ที่แก้ไขใน LibreOffice (มันจะถามว่าคุณต้องการใช้รูปแบบแปลก ๆ เช่น. dbf; ใช่คุณทำได้)

ทำขั้นตอนนี้ซ้ำสำหรับคอมโพเนนต์. dbf ทั้งหมดของ shapefiles จาก FGDB แทนที่คอลัมน์ซึ่งพูดพล่อยๆทั้งหมดด้วยสตริงอารบิก

5) ทันทีที่คุณบันทึกส่วน. dbf ใหม่ด้วยคอลัมน์ภาษาอาหรับที่วางไว้คุณสามารถเปิดรูปร่างไฟล์ใน QGIS และทำงานได้อย่างถูกต้องในทั้งสองภาษาโดยที่คุณระบุ UTF-8 เป็นการเข้ารหัสใน Import Vector ไฟล์โต้ตอบ อย่างไรก็ตามพวกเขายังทำงานไม่ถูกต้องใน ArcGIS (หรืออย่างน้อยก็ไม่ใช่ในทุกรุ่น) เพราะ ArcGIS ไม่รู้จักการเข้ารหัสโดยอัตโนมัติหรือให้คุณเลือกเมื่อคุณเพิ่มรูปร่างไฟล์ลงในโครงการ Arc ต้องการส่วนประกอบที่แยกจากกันไปยัง shapefile ซึ่งเรียกว่าไฟล์ Code Page Conversion (.cpg) เพื่อสั่งให้เข้ารหัสที่อ่าน

6) ใช้โปรแกรมแก้ไขข้อความ (notepad, nano, หรืออะไรก็ตาม แต่ไม่ใช่ Word หรือโปรแกรมประมวลผลคำอื่น ๆ ) เพื่อสร้างไฟล์ข้อความที่มีเพียงห้าตัวอักษร "UTF-8" บันทึกเป็น. cpg สำหรับแต่ละ shapefiles (ฉันคลิกที่ peice ของ shapefile ในกล่องโต้ตอบ Save As จากนั้นลบนามสกุลและเพิ่ม. cpg) ในโฟลเดอร์เดียวกันกับ shapefile (โดยทั่วไปจะกลายเป็น peice ofHi อื่น ไฟล์รูปร่างหลายส่วน) นามสกุล. cpg บอกกับ Arc ว่าเป็นไฟล์ที่มีข้อมูลเกี่ยวกับการเข้ารหัสไฟล์. dbf เมื่อรวมเข้ากับ shapefile พร้อมกับพี่น้องที่มีชื่อเดียวกัน แต่แตกต่างกันไปแล้วการเข้ารหัสของ shapefile จะถูกจดจำโดยอัตโนมัติโดย ArcGIS

7) Voila ตอนนี้คุณมีรูปร่างที่มีทั้งสตริงภาษาอังกฤษและอารบิกเท่าที่ฉันสามารถบอกได้อย่างที่พวกเขาอยู่ในไฟล์ GeoDataBase ดั้งเดิม พวกเขาเปิดในการติดตั้งของฉันทั้ง ArcMap และ QGIS และในทั้งสองกรณีสตริงในทั้งสองภาษาแสดงอย่างถูกต้องรวมถึงในฉลากแผนที่

คำเตือน:

  • ดูเหมือนว่าสำเนาทั้งหมดของ ArcGIS จะไม่ส่งออกตารางแอตทริบิวต์เป็นไฟล์ข้อความที่ถูกใส่ข้อมูลอย่างถูกต้อง (บนคอมพิวเตอร์อย่างน้อยหนึ่งเครื่องที่พยายามส่งออกตารางแอตทริบิวต์ไปยังไฟล์ข้อความจะส่งผลให้เกิดไฟล์ที่มีเฉพาะส่วนหัวเท่านั้น ไม่ใช่พฤติกรรมที่เหมาะสมของ Arc (แน่นอนว่ามันควรจะสามารถส่งออก Attribute Tables เป็นข้อความ) แต่มันอาจเกิดขึ้นสำหรับผู้ใช้บางคนซึ่งทำให้ขั้นตอนที่เหลือเป็นไปไม่ได้

  • ดูเหมือนว่า ArcGIS จะไม่บันทึกรูปร่างใหม่ด้วยการเข้ารหัส UTF-8 สิ่งนี้จะส่งผลกระทบต่อผู้ใช้ที่ต้องการสร้างรูปร่างใหม่จากข้อมูลไม่ใช่ผู้ที่ต้องการแสดงแก้ไขและใช้ในการสร้างแผนที่ วิธีแก้ปัญหาดูเหมือนจะเกี่ยวข้องกับ messing กับรีจิสทรี Windows ของคุณตามรายละเอียดที่นี่: ( http://support.esri.com/cn/knowledgebase/techarticles/detail/21106 ) ฉันไม่ต้องจัดการกับมันเพราะ ArcGIS และ QGIS ของฉันทั้งคู่ดูเหมือนจะจดจำรูปร่างที่ฉันบันทึกไว้โดยใช้กระบวนการข้างต้นอย่างมีความสุขและฉันสามารถปรับเปลี่ยนรูปทรงเรขาคณิตและรายการตารางหรือเพิ่มรูปหลายเหลี่ยมใหม่ด้วยข้อความภาษาอาหรับได้มากขึ้น แม้ว่า Arc จะไม่ต้องการบันทึกรูปร่างแบบใหม่ด้วยการเข้ารหัส UTF-8 แต่ดูเหมือนว่าเต็มใจที่จะอัปเดต / บันทึกใหม่)

  • ฉันสมมติว่าการทำงานของ LibreOffice นั้นเหมือนกับใน Windows เหมือนกับในคอมพิวเตอร์ของฉัน ฉันใช้ GNU / Linux สำหรับงานส่วนใหญ่ของฉันและบูตเฉพาะ Windows ถ้าฉันต้องใช้ ArcGIS หรือ Autocad สำหรับงานบางอย่างหรืองานอื่นดังนั้นฉันจึงทำการแก้ไขไฟล์. dbf ใน Libreoffice ที่ทำงานบน Fedora ฉันถือว่ามันใช้งานได้เหมือนกันบน Windows แต่ฉันไม่สามารถทดสอบได้โดยไม่ต้องติดตั้ง LibreOffice บนพาร์ติชัน Windows ของฉันและการเชื่อมต่ออินเทอร์เน็ตปัจจุบันของฉันค่อนข้างช้าสำหรับการดาวน์โหลดที่ไม่จำเป็น มีปลั๊กอินสำหรับ Excel ที่ให้คุณบันทึกไฟล์. dbf ในการเข้ารหัสที่เลือก (ตัวอย่างเช่น exceltodbf.sourceforge.net/) แต่ฉันยังไม่ได้ลอง อาจมีวิธีอื่นทั้งหมดในการจัดการและบันทึก. dbf แต่ฉันไม่ได้ตรวจสอบพวกเขาหลังจากหาวิธีง่ายๆในการใช้ LibreOffice

  • ปัญหาทั้งหมดดูเหมือนว่าจะหลีกเลี่ยงได้หากคุณจ่ายส่วนขยายการทำแผนที่การผลิตใน ArcGIS ซึ่งช่วยให้คุณสามารถแปลง FGDBs เป็นรูปร่างไฟล์ด้วยการเข้ารหัส UTF-8 ได้โดยตรงตามหน้านี้: http://resources.arcgis.com/th/help /main/10.1/index.html#//0103000001m1000000 เหตุใดจึงมีฟังก์ชั่นพื้นฐาน (Unicode อยู่พักหนึ่งแล้วและมีภาษาอื่น ๆ อีกมากมายนอกเหนือจากภาษาอังกฤษ) มีให้สำหรับลูกค้าที่จ่ายเงินเพิ่มเป็นคำถามสำหรับ ESRI


0

คุณจะต้องคิดก่อนว่าการเข้ารหัสข้อมูลอินพุทคืออะไรดังนั้นคุณสามารถบอกเครื่องมือของคุณถึงวิธีการแปลงข้อมูลให้เป็นการเข้ารหัสที่เหมาะสม หากคุณมี Access ฉันจะลองส่งออกตารางเป็นข้อความโดยตรงจาก MDB และตั้งค่าการเข้ารหัสผลลัพธ์เป็น UTF8 หากคุณเปิด shapefile ที่ส่งออกใน ArcGIS การตั้งค่าการเข้ารหัสถูกต้องหรือไม่? DBF รองรับโค้ดเพจและเป็นไปได้ที่ OGR จะไม่รับเพจที่ถูกต้องสำหรับการแปลง

นอกจากนี้ยังมีวิธีการบีบบังคับ MDBtools (ใช้เป็นส่วนหนึ่งของไดรเวอร์ OGR) เพื่อตั้งค่าสตรีมอินพุตอย่างชัดเจน แต่ฉันจะลองวิธีอื่นก่อน


0

ฉันค่อนข้างจะไปทาง ArcGIS เพียงแค่ตั้งค่าการเข้ารหัสเพื่อ UTF-8 ใน ArcGIS โดยทำตามคำแนะนำจากที่นี่ หลังจากนี้เพียงแค่ส่งออกคุณสมบัติคลาสเพื่อ ShapeFile ตอนนี้คุณจะได้รับไฟล์ CPG พิเศษ (ไฟล์หน้ารหัส) กับแต่ละชั้น นี่เป็นเพียงไฟล์ข้อความที่มีสตริง "UTF-8" อยู่ในนั้นและข้อมูลทั้งหมดของคุณจะถูกเข้ารหัสเป็น UTF-8 โดยอัตโนมัติ

หากคุณสนใจที่จะใช้การเข้ารหัสอื่น ๆ เพียงแค่ดูคำแนะนำ

สิ่งสำคัญคือหลังจากเสร็จสิ้นการมอบหมายนี้คุณควรเปลี่ยนการตั้งค่านี้เป็นค่าเริ่มต้นเพราะถ้าคุณเก็บค่านี้เช่น "UTF-8" จากนั้นในอนาคต ArcGIS จะส่งออก ShapeFiles ทั้งหมดโดยใช้การเข้ารหัส "UTF-8"

หวังว่าจะช่วยคุณ

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