กำลังมองหาเครื่องมือ / โมดูล / ส่วนเสริมของ Python สำหรับ GIS หรือไม่


31

ด้วย ArcGIS 10 Python ได้กลายเป็นภาษาสคริปต์แบบไม่ใช้ความจริงสำหรับ ESRI ในขณะที่ซอฟต์แวร์โอเพ่นซอร์สชั้นนำเช่น QGIS, GeoServer, PostGIS ทั้งหมดรองรับ Python ดังนั้นจึงเป็นเรื่องสำคัญที่จะต้องรู้ / เรียนรู้ Python สำหรับนักพัฒนาระบบสารสนเทศภูมิศาสตร์รวมถึงผู้ใช้

ใครสามารถสร้างรายการเครื่องมือ / โมดูล / ส่วนเสริมดังกล่าวใน Python ที่มีความสำคัญใน GIS ได้หรือไม่?


10
ฉันคิดว่าคำถามนี้กว้างเกินไปและควร จำกัด เฉพาะแพ็คเกจ Python ที่สามารถใช้กับ GIS ใด ๆ ที่มีการสนับสนุน Python
underdark

4
ArcPy เป็นโมดูล Python จริงหรือไม่?
Mapperz

2
@Mapperz เป็นจริงแพคเกจเว็บไซต์ รุ่นก่อนarcgisscriptingเป็นโมดูล ดูhelp.arcgis.com/th/arcgisdesktop/10.0/help/index.html#//…
blah238

3
@underdark - ฉันคิดว่าการมีคำถามแบบกว้าง ๆ น่าจะมีประโยชน์ ในกรณีนี้จะให้ทรัพยากรกลางที่เครื่องมือค้นหาจะพบเมื่อมีคนเริ่ม googling ซึ่งชุดเครื่องมือหลามใช้
GIS-Jonathan

2
+1 สำหรับวงกว้างเกินไป คำตอบที่เกี่ยวข้องกับคำถามจะพบได้ในตอนท้ายของการ[tag:python] + [tag:my-software]ค้นหาและเรียงลำดับตามการโหวตและแท็บคำถามที่พบบ่อย คำตอบที่นี่จะไม่มีทางเทียบได้
matt wilkie

คำตอบ:


38
  • NumPy : NumPy เป็นแพ็คเกจพื้นฐานสำหรับการคำนวณทางวิทยาศาสตร์ด้วย Python มันมีเหนือสิ่งอื่นใด:

    • วัตถุอาร์เรย์ N มิติที่ทรงพลัง
    • ฟังก์ชั่นที่ซับซ้อน (กระจายเสียง)
    • เครื่องมือสำหรับการรวมรหัส C / C ++ และ Fortran
    • พีชคณิตเชิงเส้นที่มีประโยชน์การแปลงฟูริเยร์และความสามารถของตัวเลขแบบสุ่ม

    นอกจากการใช้งานทางวิทยาศาสตร์ที่ชัดเจนแล้ว NumPy ยังสามารถใช้เป็นที่เก็บหลายมิติที่มีประสิทธิภาพของข้อมูลทั่วไป สามารถกำหนดชนิดข้อมูลเองได้ สิ่งนี้ทำให้ NumPy สามารถผสานรวมกับฐานข้อมูลที่หลากหลายได้อย่างราบรื่นและรวดเร็ว

  • SciPy : SciPy (ออกเสียงว่า "ถอนหายใจพาย") เป็นซอฟต์แวร์โอเพนซอร์ซสำหรับคณิตศาสตร์วิทยาศาสตร์และวิศวกรรม นอกจากนี้ยังเป็นชื่อของการประชุมที่ได้รับความนิยมอย่างมากเกี่ยวกับการเขียนโปรแกรมทางวิทยาศาสตร์กับ Python ห้องสมุด SciPy ขึ้นอยู่กับNumPyซึ่งให้การจัดการอาเรย์ N-Dim ที่สะดวกและรวดเร็ว ไลบรารี SciPy สร้างขึ้นเพื่อทำงานกับอาร์เรย์ NumPy และมีรูทีนตัวเลขที่ใช้งานง่ายและมีประสิทธิภาพเช่นรูทีนสำหรับการรวมตัวเลขและการปรับให้เหมาะสม เมื่อรวมเข้าด้วยกันพวกเขาจะทำงานบนระบบปฏิบัติการยอดนิยมทั้งหมดติดตั้งได้อย่างรวดเร็วและไม่มีค่าใช้จ่าย NumPy และ SciPy ใช้งานง่าย แต่ทรงพลังพอที่จะพึ่งพาได้โดยนักวิทยาศาสตร์และวิศวกรชั้นนำของโลก หากคุณต้องการจัดการตัวเลขในคอมพิวเตอร์และแสดงหรือเผยแพร่ผลลัพธ์ลอง SciPy!

  • Shapely : Shapely เป็นแพ็กเกจ Python ที่มีลิขสิทธิ์ BSD สำหรับการจัดการและการวิเคราะห์วัตถุทางเรขาคณิตระนาบ มันขึ้นอยู่กับการนำไปใช้อย่างกว้างขวางของ GEOS (เอ็นจิ้นของ PostGIS) และ JTS (ซึ่งเป็นพอร์ตของ GEOS) ไลบรารี การพึ่งพา C นี้มีการแลกเปลี่ยนสำหรับความสามารถในการดำเนินการด้วยความเร็วที่เห็นได้ชัด หุ่นดีไม่เกี่ยวข้องกับรูปแบบข้อมูลหรือระบบพิกัด แต่สามารถรวมเข้ากับแพ็คเกจที่

  • GDAL หลามผูก : แพคเกจหลามนี้และส่วนขยายจำนวนของเครื่องมือสำหรับการเขียนโปรแกรมและการจัดการกับGDAL Abstraction ห้องสมุดข้อมูลเชิงพื้นที่

  • GeoDjango: GeoDjango มุ่งมั่นที่จะเป็นกรอบเว็บทางภูมิศาสตร์ระดับโลก เป้าหมายคือทำให้ง่ายที่สุดในการสร้างเว็บแอปพลิเคชั่น GIS และควบคุมพลังของข้อมูลที่เปิดใช้งานเชิงพื้นที่
  • PyProj
  • SpatialPython : พื้นที่เก็บข้อมูล github ที่บันทึกไว้อย่างดี

ฉันจะเพิ่มห้องสมุดgeopandas.org ที่พัฒนาขึ้นอย่างแข็งขันสำหรับทุกคนที่ดูคำตอบเก่านี้!
clifgray

11

เพื่อตอบคำถามของฉันฉันเพิ่งพบโมดูล Pythons นี้ แม้ว่าฉันจะไม่ได้ใช้มัน แต่มันก็ดูน่าตื่นเต้น

NetworkXเป็นชุดซอฟต์แวร์ภาษา Python สำหรับการสร้างการจัดการและการศึกษาโครงสร้างพลศาสตร์และหน้าที่ของเครือข่ายที่ซับซ้อน

และ

rtree - ดัชนีเชิงพื้นที่สำหรับ Python GIS


10

ไปที่หัวข้อ :: วิทยาศาสตร์ / วิศวกรรม :: GIS dnd คุณมีโมดูล Python ทั้งหมดสำหรับ GIS (สำหรับการทำงานกับ shapefiles, rasters, KML, GML, GPX geocoding ฯลฯ )

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

และสำหรับการสร้างเครือข่ายด้วย shapefiles หรือ Esri Feature Class พร้อมโมดูล Networkx การประมวลผลทางภูมิศาสตร์เครือข่ายเรขาคณิต : " เท่าที่ฉันสามารถบอกได้ ESRI ยังไม่ได้เปิดตัวเครื่องมือการประมวลผลทางภูมิศาสตร์สำหรับเครือข่ายทางเรขาคณิต " หรือทางเลือกแทน pgRoutingหรือPython: วิธีแปลงรูปร่างไฟล์ Feature class ESRI) ในเครือข่ายทอพอโลยี (กราฟ) (ภาษาฝรั่งเศส)

import networkx as nx
G = nx.read_shp('pointshapefile.shp')
print(G.nodes())
# result [(1.0, 2.0), (3.0, 2.0), (0.0, 0.0), (3.0, 1.0), (4.0, 4.0), (2.0, 1.0), (2.0, 4.0), (1.0, 3.0), (2.0, 3.0), (1.0, 4.0), (4.0, 3.0), (4.0, 2.0), (3.0, 4.0), (1.0, 1.0)]
print(G.edges())
# result [((1.0, 2.0), (1.0, 1.0)), ((3.0, 2.0), (2.0, 1.0)), ((3.0, 1.0), (2.0, 1.0)), ((4.0, 4.0), (3.0, 4.0)), ((2.0, 1.0), (1.0, 1.0)), ((2.0, 4.0), (2.0, 3.0)), ((1.0, 3.0), (1.0, 2.0)), ((2.0, 3.0), (1.0, 2.0)), ((1.0, 4.0), (1.0, 3.0)), ((4.0, 3.0), (4.0, 2.0)), ((4.0, 2.0), (3.0, 2.0)), ((3.0, 4.0), (2.0, 3.0)), ((1.0, 1.0), (0.0, 0.0))]

# shortest path
print(nx.astar_path(H,(1.0, 4.0),(4.0, 2.0),dist))
# result [(1.0, 4.0), (1.0, 3.0), (1.0, 2.0), (2.0, 3.0), (3.0, 2.0), (4.0, 2.0)]

# and so with all the algorithms of Networkx module
# you can also export the results in shapefile format

ฉันใช้ Shapely, Fiona, GDAL / OGR, Pyshp, Networkx และอื่น ๆ ใน QGIS และ GRASS GIS โดยไม่มีปัญหา (และมีmatplotlibหรือdescartesสำหรับการสร้างกราฟแบบโต้ตอบ) พวกเขามักจะมีอัลกอริทึมที่ง่ายต่อการใช้สำหรับการรักษา

โมดูลเหล่านี้บางส่วนยังสามารถใช้ใน ArcPy ที่มีปัญหาได้เนื่องจาก ArcPy ใช้ Numpy รุ่น 1.3 ล้าสมัย (ตอนนี้รุ่น 1.6.1 ... ) และคุณไม่สามารถอัปเดตได้โดยไม่ทำลายโมดูล ArcPy



7

เพิ่มในรายการ:

PySAL - "โอเพ่นซอร์สไลบรารีข้ามแพลตฟอร์มของฟังก์ชันการวิเคราะห์เชิงพื้นที่"

หาได้จาก: http://code.google.com/p/pysal/

pyshp - ตัวอ่านและตัวเขียนหลามของ filefile ใน pure python

หาได้จาก: http://code.google.com/p/pyshp/

แก้ไข:

ใครบางคนแสดงให้ฉันเห็นโมดูลนี้ในวันนี้อาจเป็นความตั้งใจของคนบางคน ตัวอย่างข้อมูลเวกเตอร์ GIS และแรสเตอร์สำหรับการใช้งานหลาม:

gisdata - http://pypi.python.org/pypi/gisdata/0.3.3


5

ฉันใช้และแนะนำReportLab Toolkitซึ่งเป็นไลบรารี Open Source PDF สำหรับการสร้างเอกสารในรูปแบบ PDF โดยทางโปรแกรม ตามที่โฆษณาไว้ในหน้าเว็บมันเป็นโซลูชันที่มีความแข็งแกร่งยืดหยุ่นและพิสูจน์แล้วโดยใช้เวลาในอุตสาหกรรม เป็นซอฟต์แวร์โอเพนซอร์ซฟรีที่เขียนด้วย Python แต่ไวยากรณ์ไม่ใช่วิธีที่ง่ายที่สุดที่ฉันเคยจัดการ :-)

ที่ ArcGIS 10.0 เป็นสิ่งที่ประเมินค่าไม่ได้สำหรับการเขียนรายงานในรูปแบบ PDF จากคลาสคุณลักษณะและตารางแม้ว่าฟังก์ชันบางอย่างนี้อาจไม่จำเป็นที่ 10.1 เมื่อเข้าถึงรายงาน PDF จากตัวเขียนรายงาน ArcGIS พร้อมใช้งานสำหรับ ArcPy


คุณใช้pdfgenแพคเกจหรือplatypus? ฉันต้องการรายงานเจนด้วย jpegs และข้อความไม่มีอะไรแฟนซีเกินไป
Chad Cooper

ฉันใช้ปากเป็ด - และมีความต้องการเพียงแค่ส่งออกตารางที่มีข้อความในเซลล์ของพวกเขา (ไม่มีภาพ)
PolyGeo


2

ยังมีอีก:

GRASS - คุณสามารถโทร GRASS ด้วย Python

FMEObjects - หากคุณมีใบอนุญาต FME พวกเขามีโมดูลหลามด้วยเช่นกันซึ่งช่วยให้คุณสามารถเรียกหม้อแปลงที่น่าสนใจได้


จริงๆ? FMEObjects จากความรู้ของฉันไม่ได้มีการผูก Python สำหรับการเรียกหม้อแปลง ฉันหวังว่ามันจะเป็นจริง หากคุณรู้ว่ามันทำและรู้วิธีเข้าถึง API นั้นโปรดแจ้งให้เราทราบ มันจะทำให้ชีวิตของฉันง่ายขึ้นในเวลานี้
celticflute

1

การกระจายแพคเกจของเอ็นทริชต์มีแพ็คเกจจำนวนมากที่รวมอยู่ในแพลตฟอร์มด้านล่าง พวกเขายังมั่นใจว่าสามารถกำหนดค่าให้ทำงานจาก python prompt ของ ArcGIS ได้อย่างง่ายดายและarcpyสามารถใช้งานได้จาก python prompt เราใช้สิ่งนี้ในสำนักงานของเรา จากวิกิภายในของเรา:

วิธีที่ดีที่สุดในการเชื่อมต่อ ArcGIS และ EPD คือการติดตั้งและเชื่อมโยงไฟล์เหล่านั้นโดยใช้ไฟล์. pth ดังนั้น Python sys.path จึงรวมโมดูลของระบบอื่น ไฟล์ "zzEPD.pth" อนุญาตให้ ArcGIS Python เข้าถึงโมดูล EPD และ "zzArcGIS.pth" อนุญาตให้ EPD Python เข้าถึง arcpy (คำนำหน้า "zz" อยู่ที่นั่นเพื่อให้แน่ใจว่าแพ็คเกจ "foreign" นั้นอยู่ใน sys.path ล่าสุดเพื่อหลีกเลี่ยงความขัดแย้งที่อาจเกิดขึ้นสำหรับโมดูลที่มีอยู่ในการติดตั้ง Python ทั้งคู่) หากคุณพบความขัดแย้ง ArcGIS เพียงแค่เปลี่ยนชื่อไฟล์เป็น txt ("zzEPD.pth.txt") และรีสตาร์ท ArcGIS และ ArcGIS จะไม่ "ดู" โมดูล EPD อีกต่อไป (จะไม่อยู่ใน sys.path)

* zzEPD.pth - วางในโฟลเดอร์ \ Python27 \ Desktop10.1 \ lib \ site-packages *

# zzEPD.pth 
# Path to Enthought modules
C:\Python27\epd32\lib\site-packages

* zzArcGIS.pth - วางในโฟลเดอร์ \ Python27 \ epd32 \ lib \ site-packages *

# zzArcGIS.pth 
# copy of \Python27\Desktop10.1\lib\site-packages\ArcGIS.pth
C:\ArcGIS\Desktop10.1\bin
C:\ArcGIS\Desktop10.1\arcpy
C:\ArcGIS\Desktop10.1\ArcToolbox\Scripts

1

ไม่เฉพาะเจาะจงกับ GIS แต่สำหรับการดีบักหลามIPDBนั้นน่าทึ่งมาก https://pypi.python.org/pypi/ipdb

หากต้องการใช้เพียงวางบรรทัดต่อไปนี้ในรหัสของคุณ:

import ipdb
ipdb.set_trace()

จากนั้นใน Python shell ของคุณคุณสามารถวางลงในส่วนใด ๆ ของรหัสและโต้ตอบกับตัวแปรทั้งหมดในสถานะปัจจุบันนั้น

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