แปลงไฟล์ SimpleGeo Places GeoJSON เป็น shapefile หรือไม่


15

SimpleGeoเพิ่งจัดทำชุดข้อมูล "สถานที่" ของพวกเขาซึ่งเป็นประโยชน์มากเพราะตอนนี้เราสามารถใช้เพื่อจุดประสงค์ของเราเองได้แม้ในแบบออฟไลน์ ดังนั้นฉันจึงไปดาวน์โหลดชุดข้อมูล 2GBซึ่งมีไฟล์ประเทศซิปในรูปแบบ GeoJSON

นี่คือที่ที่ปัญหาของฉันเริ่มต้น ... เมื่อฉันลองโหลดไฟล์ประเทศ (* .geojson) ลงใน QGIS โดยตรงหรือแม้กระทั่งแปลงเป็นไฟล์รูปร่างโดยใช้ ogr2ogr ฉันก็จบลงด้วยคุณสมบัติจุดเดียว

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

อัปเดตคำถาม: ฉันต้องการแปลงไฟล์ geojson เป็น shapefile (หรือรูปแบบ GIS มาตรฐานที่คล้ายกัน)เพื่อใช้ในซอฟต์แวร์ GIS เดสก์ท็อป

ตัวอย่างจากบล็อก SimpleGeo เมื่อวันที่ 1 สิงหาคม 2011 :

"ชุดข้อมูล CC0 Places ของ SimpleGeo พร้อมให้ดาวน์โหลดแล้วโดยไม่เสียค่าใช้จ่ายหากคุณต้องการรับมือกับ 21M + POI ที่ครอบคลุม 63 ประเทศเราพร้อมที่จะส่งไฟล์ให้คุณในไฟล์เดียว 2GB ในรูปแบบ. ZIP และจำไว้ว่าด้วยใบอนุญาต CC0 ข้อมูลนี้จะกลายเป็นของคุณ - ฟรีและชัดเจน - เพื่อทำสิ่งที่คุณต้องการเราหวังว่าคุณจะทำสิ่งที่ยอดเยี่ยมด้วย คุณสามารถดาวน์โหลดได้ทันทีโดยคลิกที่นี่ "

ปรับปรุง: 12 มกราคม 2555: หลังจาก SimpleGeo ถูกซื้อโดย Urban Airship ในเดือนตุลาคม 2554 Urban Aiship กล่าวว่า "ปิดการใช้งานเวอร์ชันปัจจุบันของสถานที่บริบทและการเก็บรักษา [SimpleGeo's] ในอีกไม่กี่เดือนข้างหน้า" ... วันที่เป้าหมายสำหรับการดึงปลั๊กอย่างเป็นทางการจะเป็นวันที่ 31 มีนาคม 2012 ลิงก์


3
+1 ฟัง Matt Galligan จาก SimpleGeo บางครั้งกลับบอกว่าข้อมูลตำแหน่งเป็นเรื่องจริงและควรมีให้ใช้อย่างอิสระ เป็นบริบทที่ควรขาย ดีใจที่ได้เห็น 'พวกเขา' หมายถึงมัน ยังกระตือรือร้นที่จะใช้ประโยชน์จากข้อมูลนี้
Erick

คำตอบ:


10

ลองห่อคุณสมบัติต่อไปนี้:

{"type":"FeatureCollection","features":[ 

****ALL THE DATA HERE -- COMMA SEPARATED****

]}

และแยกแต่ละคุณลักษณะด้วยเครื่องหมายจุลภาค

ตัวอย่างเช่นต่อไปนี้เป็นคุณสมบัติสองประการแรกจากชุดข้อมูล IE:

{"geometry": {"type": "Point", "coordinates": [-6.422587, 53.293363]}, "type": "Feature", "id": "SG_41u80gC4971D4Gc0Fv1p8q_53.293363_-6.422587@1308163237", "properties": {"website": "http://www.buongiorno.com", "city": "Dublin", "name": "Buongiorno", "tags": ["mobile", "vas", "community", "social-networking", "connected-devices", "android", "tablets", "smartphones"], "country": "IE", "classifiers": [{"category": "Professional", "type": "Services", "subcategory": "Computer Services"}], "href": "http://api.simplegeo.com/1.0/features/SG_41u80gC4971D4Gc0Fv1p8q_53.293363_-6.422587@1308163237.json", "address": "Lake Drive City West Digital Park", "owner": "simplegeo", "postcode": "3050"}}
{"geometry": {"type": "Point", "coordinates": [-6.250848, 53.339347]}, "type": "Feature", "id": "SG_1dnWbWIg8hX3VyfUKIDRz9_53.339347_-6.250848@1308163237", "properties": {"website": "http://www.simchronise.com", "city": "Dublin", "name": "SIMchronise", "tags": ["mobile-solutions", "mobile-data", "data-synchronisation", "mobile-security", "backup", "restore", "mobile-contacts", "web-2.0-addressbook", "phonebackup"], "country": "IE", "classifiers": [{"category": "Professional", "type": "Services", "subcategory": "Computer Services"}], "href": "http://api.simplegeo.com/1.0/features/SG_1dnWbWIg8hX3VyfUKIDRz9_53.339347_-6.250848@1308163237.json", "address": "78 Merrion Square", "owner": "simplegeo", "postcode": "Dublin2"}}

... และที่นี่พวกเขาเป็น GeoJSON FeatureCollection:

{"type":"FeatureCollection","features":[ 
{"geometry": {"type": "Point", "coordinates": [-6.422587, 53.293363]}, "type": "Feature", "id": "SG_41u80gC4971D4Gc0Fv1p8q_53.293363_-6.422587@1308163237", "properties": {"website": "http://www.buongiorno.com", "city": "Dublin", "name": "Buongiorno", "tags": ["mobile", "vas", "community", "social-networking", "connected-devices", "android", "tablets", "smartphones"], "country": "IE", "classifiers": [{"category": "Professional", "type": "Services", "subcategory": "Computer Services"}], "href": "http://api.simplegeo.com/1.0/features/SG_41u80gC4971D4Gc0Fv1p8q_53.293363_-6.422587@1308163237.json", "address": "Lake Drive City West Digital Park", "owner": "simplegeo", "postcode": "3050"}},
{"geometry": {"type": "Point", "coordinates": [-6.250848, 53.339347]}, "type": "Feature", "id": "SG_1dnWbWIg8hX3VyfUKIDRz9_53.339347_-6.250848@1308163237", "properties": {"website": "http://www.simchronise.com", "city": "Dublin", "name": "SIMchronise", "tags": ["mobile-solutions", "mobile-data", "data-synchronisation", "mobile-security", "backup", "restore", "mobile-contacts", "web-2.0-addressbook", "phonebackup"], "country": "IE", "classifiers": [{"category": "Professional", "type": "Services", "subcategory": "Computer Services"}], "href": "http://api.simplegeo.com/1.0/features/SG_1dnWbWIg8hX3VyfUKIDRz9_53.339347_-6.250848@1308163237.json", "address": "78 Merrion Square", "owner": "simplegeo", "postcode": "Dublin2"}}
]}

หลังจากการโพสต์ของคุณฉันรู้ว่าฉันไม่ได้ทำให้คำถามของฉันชัดเจนดังนั้นฉันจึงแก้ไข ฉันต้องการแปลงข้อมูลเป็น shapefile หรือรูปแบบ GIS มาตรฐานอื่น ๆ เพื่อใช้ในเดสก์ท็อป GIS ขออภัยสำหรับคำถามที่มีคำไม่ดี แต่ขอบคุณสำหรับคำตอบ @fod
RyanKDalton

2
คำตอบของ fod จะพาคุณไปครึ่งทาง คุณจะต้องประมวลผลการทิ้งทั้งหมดเหล่านี้ล่วงหน้าเพื่อห่อคุณลักษณะใน FeatureCollection ตามคำแนะนำ fod และแยกด้วยเครื่องหมายจุลภาค วิธีง่ายๆในการทำคือการแทนที่บรรทัดใหม่ทั้งหมดด้วย, + newline (เช่น \ n ด้วย, \ n) จากนั้นใส่ไว้ใน FeatureCollection ไม่ว่าจะผ่านสคริปต์หรือด้วยตนเองด้วยโปรแกรมแก้ไขข้อความ หลังจากคุณแก้ไขไฟล์ทั้งหมดให้เป็น GeoJSON ที่เหมาะสมแล้วคุณสามารถใช้ ogr2ogr v1.8.0 หรือใหม่กว่าเพื่อแปลง GeoJSON เป็น shapefile
Sasa Ivetic

ยอดเยี่ยม ฉันไม่ทราบว่านี่คือสิ่งที่จะทำให้ "อ่าน" ได้ ด้วยวิธีการที่อธิบายไว้ข้างต้นฉันสามารถทำให้ไฟล์อ่านได้โดยตรงผ่าน QGIS ขอบคุณมัด! ฉันใช้ชุดข้อมูล Mexico เป็นตัวอย่างที่ดีเพราะมันมีขนาดไฟล์เพียง 9k ตอนนี้จัดการ "ค้นหาและแทนที่" สำหรับไฟล์ US @ 7.4 GB
RyanKDalton

ขอโทษ - ฉันไม่มีเวลาติดตามเร็วกว่านี้ แต่ FYI คุณสามารถเปิดไฟล์ GeoJSON ได้โดยตรงใน QGIS - ไม่จำเป็นต้องแปลงเป็นไฟล์รูปร่าง จากนั้นหากคุณต้องการ Shapefile จริง ๆ คุณสามารถส่งออกเลเยอร์ในรูปแบบนั้นได้ (Layer-> Save As ... )
fod

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

4

ขอบคุณมากที่ @fod & @Sasa Ivetic ที่ทำให้ฉันไปถูกทาง! ฉันต้องวางโครงการนี้ลงซักพัก แต่ในที่สุดก็กลับมาที่นี่ในวันนี้และต้องการส่งต่อผลลัพธ์ของฉันเพื่อช่วยเหลือผู้อื่นที่อาจต้องดิ้นรนกับเรื่องนี้

โดยใช้ข้อมูลที่ให้ไว้ในคำตอบของ @ fod ฉันเขียนสคริปต์ Python นี้เพื่อแปลงไฟล์ดัมพ์ในรูปแบบ geojson "เหมาะสม" สคริปต์ py นี้จะแปลงข้อมูลเป็นรูปแบบที่อ่านได้โดย ogr2ogr จากนั้นคุณสามารถแปลงเป็นรูปแบบใดก็ได้ที่คุณต้องการ

infile = sys.argv[1]
outfile = sys.argv[2]


## Prepare the input/output for read/write of files
fin = open(infile, 'r')
fout = open(outfile, 'w')


##Prepend the new file with approriate header info
fout.write('{"type":"FeatureCollection","features":[' + '\n')


## Read each line from the input and write to the output
for line in fin:
    ##write each line in the table, and replace carriage returns with "," + carriage return
    fout.write(line.replace("\n",",\n"))

##Append the new file with approriate footer info
fout.write(']}')

##Close the input and output files to release file locking
fin.close()
fout.close()

หมายเหตุ: คุณอาจพบปัญหาในการแปลงไฟล์ geojson ที่แปลงแล้วผ่าน ogr2ogr เนื่องจากข้อ จำกัด ของหน่วยความจำระบบปฏิบัติการ ดูคำถามที่เกี่ยวข้องนี้: gis.stackexchange.com/questions/16307/…
RyanKDalton

เยี่ยมมาก! Microsoft มีข้อ จำกัด ด้านหน่วยความจำ

1

คุณสามารถลองFMEเพื่อทำสิ่งนี้ มันอ่าน GeoJSON และเขียนรูปร่างและที่สำคัญกว่านั้นคือมี "transformers" สำหรับจัดการ JSON (JSONExploder, JSONFlattener, JSONExtractor) ดังนั้นฉันคิดว่ามันจะช่วยให้เนื้อหาออกมาในรูปแบบที่ใช้งานได้

นอกจากนี้ยังมีการทดลองใช้งานฟรี!

NB:ฉันทำงานให้กับซอฟต์แวร์ปลอดภัยผู้ผลิต FME


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