จะเพิ่มการรองรับไดร์เวอร์ FileGDB (ไฟล์ Esri gdb API) ใน fiona ได้อย่างไร?


13

มีคำถามมากมายเกี่ยวกับเรื่องนั้น แต่ไม่มีใครแก้ปัญหาของฉันได้

ฉันมีเครื่องด้วย:

  • Windows 7 x64
  • Python 3.4.3 x 64
  • GDAL ติดตั้งgdalinfo --version --> GDAL 1.11.4, released 2016/01/25; gdal ถูกติดตั้งจากล้อGDAL-1.11.4-cp34-none-win_amd64.whlจากที่นี่

ติดตั้ง GDAL ไว้C:\Python34\Lib\site-packages\osgeoแล้ว ที่นั่นฉันมีไฟล์. exe หลายไฟล์สำหรับไฟล์ gdal และ ogr และ. pyd

  • ฟิโอน่าติดตั้ง: ถูกติดตั้งจากล้อFiona-1.6.3-cp34-none-win_amd64.whlจากเว็บไซต์เดียวกัน

ฉันสามารถเรียกใช้รหัสนี้และทำงานได้สำเร็จ:

import gdal
import ogr
from gdalconst import *

shp = r"C:\Data\GIS\PTS.shp"
driver = ogr.GetDriverByName('ESRI Shapefile')

dataset = driver.Open(shp)    
layer = dataset.GetLayer()
layer.GetFeatureCount()    
schema = layer.schema
fields = [field.GetName() for field in schema]    
feature = layer.GetNextFeature()

ฉันยังสามารถรับรูปแบบ OGR ได้ด้วย: ogrinfo --formatsพิมพ์พวงของพวกเขาใน Windows cmd (โดยไม่มี FileGDB อยู่ที่นั่น)

ฉันสามารถเรียกใช้รหัสนี้และทำงานได้สำเร็จ:

import fiona
with fiona.drivers():
  with fiona.open(path=r'C:\Data\GIS\TemplateData.gdb', driver='OpenFileGDB') as source:
    print(source.meta)

อย่างไรก็ตามรหัสนี้จะไม่ทำงาน:

with fiona.drivers():
    with fiona.open(path=r'C:\Data\GIS\TemplateData.gdb', driver='FileGDB') as source:
        print(source.meta)

เพราะฉันไม่มี Esri File GDB ซึ่งรวบรวมไลบรารีที่จำเป็น

ผมได้ดาวน์โหลดและแตกFileGDB_API_VS2012_1_3.zipจากEsri หน้าดาวน์โหลด ดังที่ฉันเข้าใจแล้วไม่จำเป็นต้องรวบรวมสิ่งใด ๆ เนื่องจาก. dll มีอยู่แล้ว

ขั้นตอนที่ถูกต้องในการลงทะเบียน dll ของ Esri File GDB API เพื่อให้สามารถใช้งานได้ใน fiona ในสภาพแวดล้อมของฉันคืออะไร?


UPDATE: (ขึ้นอยู่กับคำตอบของลุค)

ผมได้ดาวน์โหลดFile Geodatabase API 1.4 version for Windows (Visual Studio 2010)จากหน้า Esri ดาวน์โหลด ผมคัดลอกไปFileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dll C:\Python34\Lib\site-packages\osgeoตอนนี้ฉันมีสองไฟล์อยู่ที่นี่ogr_FileGDB.dllและFileGDBAPI.dll.

ฉันสร้างตัวแปร Windows GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalpluginsแล้ว ในตัวแปรผมไม่ได้มีอะไรที่เฉพาะเจาะจงหลามยกเว้นPATHC:\Python34\Lib\site-packages\osgeo

ตอนนี้เมื่อใช้งานogrinfo --formatsฉันจะได้รับ-> "FileGDB" (read/write)และสามารถใช้รหัส Python สำหรับทำงานกับไดรเวอร์ FileGDB


1.4 ไฟล์ geodatabase API ได้รับการเผยแพร่สำหรับlonnngครั้งนี้ ไม่มีเหตุผลใดที่จะใช้ 1.3
วินซ์

@ ลุคขอบคุณ แต่ฉันต้องการเขียนเข้าถึง gdb ตอนนี้, คุณสามารถอ่านได้ด้วย OpenFileGDB ... ลิงก์หรือหน้าเอกสารเฉพาะใด ๆ จะทำอย่างไรกับการคอมไพล์และวิธีชี้ไปที่ dll (ผ่านตัวแปร Windows และอื่น ๆ )? จะมีประโยชน์มาก
Alex Tereshenkov

@ ตั้งแต่ฉันไม่สนใจใช้ 1.4 หรือรุ่นอื่นใดที่จะอนุญาตให้ฉันแก้ไขไฟล์ gdb :) ฉันไม่มีหน้าเอกสาร / ข้อมูลจำเพาะพร้อมคำแนะนำที่ชัดเจนว่าจะทำอย่างไรได้
Alex Tereshenkov

@AlexTereshenkov ขณะที่คุณใช้ 64 บิต python ให้คัดลอก Esri bin64 \ FileGDBAPI.dll ไปยัง[python install dir]\Lib\site-packages\osgeodir ตามที่ฉันระบุไว้ในคำตอบไม่ใช่ gdalplugins ที่คุณพูดถึงในการแก้ไขของคุณ เฉพาะปลั๊กอินไดรเวอร์เท่านั้นที่อยู่ในไดเรกทอรีนั้นไม่ใช่ของบุคคลที่สาม
2856

1
@AlexTereshenkov, ogr_FileGDB.dll เป็นไดรเวอร์ FileGDB (ไม่ใช่ OpenFileGDB ซึ่งสร้างไว้ใน gdal / ogr) dll นี้จะรวบรวมจาก GDAL / OGR รหัสไดรเวอร์ จำเป็นต้องอยู่ในไดเรกทอรีที่ระบุโดย GDAL_DRIVER_PATH env var
2856

คำตอบ:


9

Gohlke GDAL / OGR ล้อรวมถึงไดรเวอร์ FileGDB รวบรวมเป็นปลั๊กอิน

ในการทำให้ไดรเวอร์ FileGDB ทำงาน:

  1. คัดลอก Esri bin64 \ FileGDB.dll ไปที่[python install/virtualenv dir]\Lib\site-packages\osgeo(ใช้ bin \ FileGDB.dll หากใช้ 32 บิต python) อย่าคัดลอก FileGDB.dll ไปยังไดเรกทอรี gdalplugins
  2. ตั้งค่าตัวแปรสภาพแวดล้อม GDAL_DRIVER_PATH ทั้ง:
    • ด้วยตนเอง หรือ
    • แก้ไข[python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.pyและยกเลิกหมายเหตุบรรทัดที่ 10
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

การเปิด GDB ด้วยไดรเวอร์ FileGDB ควรทำงานได้แล้ว

>>> import fiona
>>> with fiona.drivers():
...     with fiona.open(path=r'C:\Temp\Default.gdb', driver='FileGDB') as source:
...         print(source.meta)
...
{'crs': {'init': u'epsg:4326'}, 'driver': 'FileGDB', 'crs_wkt': u'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01
74532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]', 'schema': {'geometry': 'MultiPolygon', 'properties': OrderedDict([(u'SHAPE_Length', 'float'), (u'SHAPE_Area', 'float')])}}
>>>

บันทึก:

การใช้ Python 2.7 ฉันสามารถใช้ปลั๊กอิน FileGDB เพื่อทำงานกับ FileGDB API v1.3 (MSVC 2008) เท่านั้น เป็น v.1.4 segfaults python ฉันคิดว่านี่เป็นเพราะไพ ธ อนและไลบรารี GDAL และ Fiona ที่ Gohlke จัดทำด้วย MSVC 2008 และ v. 1.4 นั้นถูกคอมไพล์ด้วย MSVC 2010 (และใหม่กว่า)

FileGDB API v1.4 ทำงานได้ดีกับ Python 3.4 และห้องสมุด GDAL และ Fiona ที่จัดทำโดย Gohlke ซึ่งรวบรวมด้วย MSVC 2010


ฉันต้องการคัดลอกbin64\FileGDBAPI.dllจากที่FileGDB_API_1_5_1-VS2010.zipตั้งอยู่ที่github.com/Esri/file-geodatabase-api/tree/master/ …ที่step 1จะทำให้มันทำงาน (ใน Python 3.5 64 บิต)
Mattijn

GDAL ของฉันถูกติดตั้งโดยอัตโนมัติโดยใช้บรรทัดคำสั่งgeopandas miniconda conda install geopandasใน__init__.pyบรรทัดที่ 10 ยังไม่ใส่เครื่องหมายข้อคิดเห็นดังนั้นฉันไม่คิดว่ามันเป็นสายที่คุณอ้างถึง นอกจากนี้ยังไม่มีgdalpluginsไฟล์
user32882

@ user32882 คำแนะนำเหล่านี้ไม่ได้มีไว้สำหรับติดตั้ง conda gdal ...
user2856

ฉันจะตั้งค่าสำหรับ conda ได้อย่างไร เป็นไปได้ไหม
user32882

4

ข้อมูลสำคัญอยู่ที่นี่:

ฉันยังสามารถรับรูปแบบ OGR ได้ด้วย: ogrinfo - รูปแบบจะพิมพ์เป็นกลุ่มใน Windows cmd (โดยไม่มี FileGDB อยู่ที่นั่น)

สิ่งนี้บอกฉันGDAL_DRIVER_PATHว่าไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อมของคุณ ดูคำแนะนำที่https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver เมื่อ "FileGDB" แสดงในogrinfo --formats(หรือfio env --formats) คุณจะดีไป


ขอบคุณ ประหลาดใจที่คุณมีเวลาที่จะตอบคำถามเกี่ยวกับ GIS.SE - คุณอาจยุ่งมากกับฟิโอน่า, หุ่นดีและอื่น ๆ สิ่งที่เจ๋งมากที่คุณเขียนชื่นชม ฉันรู้ว่าฉันไม่มีไดรเวอร์ FileGDB ดังนั้นจึงขอให้ทำเช่นนั้น Compile GDAL with the FGDB section commented ผมเคยเห็นหน้าคุณดูมันบอกว่าหนึ่งในความต้องการ ฉันไม่มีที่มาของ GDAL ฉันเพิ่งติดตั้งจากล้อรถดังนั้นฉันเดาว่าขั้นตอนเหล่านั้นไม่สามารถใช้ได้ในกรณีของฉัน ฉันควรไปจากที่นี่ที่ไหน
Alex Tereshenkov

1
GDAL_DRIVER_PATHตัวแปรเป็นกุญแจสำคัญ อ่านtrac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATHและหากคุณไม่ได้ตั้งเส้นทางที่ถูกต้องให้ดูที่หัวข้อlists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html .
sgillies

ขั้นตอนที่ทำให้เข้าใจผิดเล็กน้อยเนื่องจากฉันไม่จำเป็นต้องรวบรวมอะไรเลย - ล้อที่ฉันติดตั้งมีทุกสิ่งที่ฉันต้องการมันแค่เกี่ยวกับการวางไฟล์ในโฟลเดอร์ด้านขวา แต่ขอขอบคุณสำหรับข้อมูลที่มีประโยชน์ยังดีที่ควรรู้สำหรับกรณีการใช้งานอื่น ๆ
Alex Tereshenkov

นี่คือคำตอบที่ถูกต้องอย่างแน่นอน ไม่จำเป็นต้องเปลี่ยนการติดตั้งเพียงแค่กำหนดเส้นทางที่ถูกต้อง!
เบนจามิน

1

การคัดลอกไฟล์FileGDBAPI.dllไปยังโฟลเดอร์ C: \ Program Files \ QGIS 2.18 \ bin และogr_FileGDB.dllไปยังโฟลเดอร์ C: \ Program Files \ QGIS 2.18 \ bin \ gdalplugins ไม่ได้หลอกลวง นี่คือเอกสารที่อธิบายการใช้ของพวกเขา

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