Có cách nào để nói phiên bản cơ sở dữ liệu địa lý bằng Python không?


8

Tôi muốn tìm hiểu xem một tệp hoặc cơ sở dữ liệu địa lý cá nhân là 9.3, 10.0, 10.1, v.v.

Có cách nào để làm điều này bằng Python không?


Có cách nào để nói một cơ sở dữ liệu địa lý "cũ" (10.2) từ cơ sở dữ liệu địa lý mới hơn (10.7) không? Hầu hết các cơ sở dữ liệu địa lý của tôi, tôi đã tạo trong 10.2 và tôi đã nâng cấp lên 10.7 và thật tuyệt nếu tôi có thể phân biệt giữa hai phiên bản rất khác nhau ....
Patty Miller

Câu trả lời:


8

Và nếu tôi đang sử dụng 10.0?
ianbroad

2
@IB, trong câu hỏi ban đầu của bạn, bạn đã hỏi liệu bạn cũng có thể tìm hiểu xem gdb có phải là 10.1 không, vì vậy tôi nghĩ thật công bằng khi cho rằng bạn đang sử dụng 10.1, vì không chắc là phiên bản trước đó (ví dụ: 10.0) sẽ có thể để cho bạn biết bất cứ điều gì về một phiên bản gdb trong tương lai .
RyanKDalton

Từ trợ giúp được liên kết, có vẻ như không có sự khác biệt giữa cơ sở dữ liệu địa lý phát hành 10.0 và 10.1. Cả hai sẽ trả về giá trị 3,0,0.
blah238

6

Đây là một giải pháp ArcObjects + comtypes phù hợp với tôi ở 10.0:

import arcpy
from ESRICOMHelpers import GetESRIModule, CType, NewObj

def GetGDBReleaseVersion(gdbPath):
    """Gets the release version of the given geodatabase."""
    esriGeoDatabase = GetESRIModule("esriGeoDatabase")
    esriGeoprocessing = GetESRIModule("esriGeoprocessing")
    gpUtilities = NewObj(esriGeoprocessing.GPUtilities, esriGeoprocessing.IGPUtilities)
    try:
        dataset = gpUtilities.OpenDatasetFromLocation(gdbPath)
        workspace = CType(dataset, esriGeoDatabase.IWorkspace)
        gdbRelease = CType(workspace, esriGeoDatabase.IGeodatabaseRelease2)
        return "%d.%d" % (gdbRelease.MajorVersion + 7, gdbRelease.MinorVersion)
    except:
        return None

if __name__ == "__main__":
    print GetGDBReleaseVersion(r"C:\GISData\test.gdb")

Đầu ra:

>>> 
10,0

Lấy comtypes ở đây và ESRICOMHelpers ở đây. Nếu bạn ở mức 10.1, hãy chắc chắn điều chỉnh comtypes ' automation.pynhư được mô tả trong câu trả lời này .

Lưu ý: Được cảnh báo rằng điều này cũng trả về 10.0 cho 10.1 cơ sở dữ liệu địa lý khi chạy từ ArcGIS 10.0! Chỉnh sửa: Trên thực tế, điều này trả về 10.0 cho cơ sở dữ liệu địa lý tệp 10.1 khi chạy từ ArcGIS 10.1! Không chắc chắn những gì đang xảy ra: |


1
Bạn có chắc chắn đó là 10.1 GeoDatabase và không chỉ là cơ sở dữ liệu 10.0 đã được mở trong 10.1? Bạn có thể sử dụng nút "nâng cấp Geodatabase" trên nó không? help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#// Thay
Ragi Yaser Burhum

Nó nói rằng đó là bản phát hành hiện tại trên hộp 10.1 của tôi và tôi không thể nâng cấp nó.
blah238

1
Chắc chắn lỗi ArcGIS :)
Ragi Yaser Burhum

1
Trên thực tế 10,1 arcpy Workspace mô tả releaselợi nhuận bất động sản tương tự cho cả hai 10.0 và 10.1 geodatabases phát hành cũng như: resources.arcgis.com/en/help/main/10.1/index.html#/...
blah238

1
Tất cả các mã đó làm là chọn () trên một trong các bảng có chuỗi gọi là phiên bản. Chuỗi đó được cập nhật bất cứ khi nào lược đồ GeoDatabase được thay đổi. Rất có thể lược đồ GeoDatabase không được thay đổi cho bản phát hành đó và do đó không ai chạm vào mã và do đó giá trị không được chạm vào. IMHO, nó sẽ bị xúc động bởi mọi bản phát hành, nhưng tôi đoán nếu lược đồ giống nhau thì có nghĩa là nó có thể được mở trên cả hai phiên bản ArcGIS - vì vậy trong thực tế không có "10.1" GDB, chỉ là 10.0 GDB.
Ragi Yaser Burhum

1

Câu hỏi hay! Trong 10.0, tôi không thể tìm thấy bất kỳ phương thức Python nào để mô tả phiên bản của cơ sở dữ liệu địa lý. Tôi đã thử nghiệm bằng cách sử dụng công cụ Nâng cấp cơ sở dữ liệu địa lý trong 10.1 và nó có thể hữu ích.

"Công cụ Nâng cấp Cơ sở dữ liệu địa lý sẽ chỉ hoạt động đối với cơ sở dữ liệu địa lý được phát hành trước đó."

Điều này có nghĩa là chúng ta có thể kiểm tra việc chạy công cụ này mà không cần đặt tùy chọn "Nâng cấp cơ sở dữ liệu địa lý" chỉ để xem liệu nó có thực thi không (nếu cơ sở dữ liệu địa lý có cùng phiên bản mà nó sẽ không thực thi). Nếu nó sẽ - thì đó là phiên bản hiện tại (chỉ kiểm tra các điều kiện tiên quyết sẽ được thực hiện và cơ sở dữ liệu địa lý sẽ không bị ảnh hưởng).

Về thử nghiệm 9.3 và 10.1 - Tôi đã nghĩ đến việc thử tạo một tập dữ liệu mẫu có thể chỉ tạo trong cơ sở dữ liệu địa lý của phiên bản 10.0 / 10.1 và sau đó kiểm tra xem nó có được tạo không. Nếu không - thì đó là 9.3 / 10.1.

Không phải là giải pháp thanh lịch nhất mặc dù ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.