Đọc kết nối ODBC bằng cách sử dụng QGIS? [đóng cửa]


15

Tôi có một đồng nghiệp quản lý cơ sở dữ liệu MS Access lớn chứa các trường X & Y cho các vị trí khác nhau mà anh ta theo dõi. Trước đây chúng tôi đã xuất dữ liệu sang CSV và sử dụng Trình cắm văn bản được phân cách bằng QGIS để vẽ các vị trí.

Bây giờ chúng tôi muốn lập biểu đồ dữ liệu này trực tiếp trong QGIS bằng cách kết nối với db MS Access thông qua kết nối ODBC (trái ngược với xuất sang CSV).

  1. QGIS có thể sử dụng dữ liệu từ kết nối ODBC để vẽ các vị trí XY không?
  2. Nó có thể được "liên kết trực tiếp" với kết nối ODBC để khi dự án được mở lại, lớp "thay thế" tất cả các vị trí cũ và mới được thêm vào một cách linh hoạt (trái ngược với việc xuất sang shapefile, sẽ tạo ra một ảnh chụp nhanh theo thời gian)?
  3. Bạn có thể tạo các kết nối ODBC dạng bảng có thể được nối với các bảng không gian trong QGIS không?

Bạn có thể thực hiện tất cả những điều này trong ArcGIS (công cụ "Thêm dữ liệu XY"), vì vậy sẽ rất tuyệt nếu khả năng này tồn tại trong QGIS. Tôi chỉ không thể tìm thấy bất cứ nơi nào đề cập đến sự tồn tại của nó.

Tôi không có kế hoạch chuyển đến một cơ sở dữ liệu không gian. Là một người bản thân mình, vâng, tôi biết rằng việc chuyển sang cơ sở dữ liệu không gian là điều hợp lý và vâng, tôi đã sử dụng PostGIS để quản lý loại dữ liệu này. Nhưng đây không phải là lựa chọn ngay bây giờ. Người dùng không phải là người GIS cũng không muốn và anh ta quản lý cơ sở dữ liệu của riêng mình trong MS Access và điều đó sẽ không thay đổi. Tôi và đang kéo anh ấy đá và hét vào thế giới GIS và muốn làm cho nó dễ dàng nhất có thể. Anh ta có thể sống với việc xuất sang CSV, tôi chỉ hy vọng có một giải pháp tốt hơn SỬ DỤNG ODBC CHO MS ACCESS và hiển thị dữ liệu XY trong QGIS.


Sau đó, theo hiểu biết của tôi, bạn không thể làm như bạn yêu cầu với QGIS. Tôi đồng ý sẽ có một số sử dụng trong ODBC tương đương với nhập CSV, nhưng đối với bất kỳ loại hiệu suất nào, nó sẽ phải là nhập thay vì kết nối động - giống như plugin CSV. Vì vậy, không có khả năng có bất kỳ sự hấp thụ nào trừ khi bạn tự hỗ trợ / phát triển nó.
MerseyViking

@ MV- Tôi thường đồng ý với bạn và xem điểm của bạn. Tuy nhiên, đối với người dùng không phải là người chủ yếu quan tâm đến việc đơn giản hóa ánh xạ dữ liệu của họ và không phân tích dữ liệu, hiệu suất của QGIS sẽ không quan trọng bằng một vấn đề. Tôi sẽ tưởng tượng rằng có một kết nối năng động, "luôn luôn sống" với dữ liệu của họ gần như chắc chắn sẽ vượt xa các mối quan tâm về hiệu suất (một lần nữa nghĩ về điều này từ góc độ người dùng không phải là GIS).
RyanKDalton-OffTheGridMaps

Câu trả lời tuyệt vời cho một câu hỏi tương tự tại truy cập QGIS 2.4 .mdb thêm lỗi
RyanKDalton-OffTheGridMaps

Câu trả lời:


7

Hãy cẩn thận: Tôi đã không thử điều này, vì vậy tôi sẵn sàng cúi đầu trước bất cứ ai có kinh nghiệm trực tiếp.

Bạn có thể kết nối với nguồn dữ liệu ODBC trong hộp thoại "thêm lớp vectơ", chỉ cần chọn "cơ sở dữ liệu" làm loại nguồn và ODBC làm loại cơ sở dữ liệu. QGIS sử dụng trình điều khiển ODBC cho OGR , do đó, hãy cẩn thận - đó là bạn sẽ cần một bảng có tên GEOMETRY_COLUMNS, v.v., vì vậy đồng nghiệp của bạn có thể sẽ cần sửa đổi cơ sở dữ liệu.

Tôi đã không sử dụng Access ngay sau khi phát hành phiên bản 1.0, nhưng vì nó không được kích hoạt theo không gian, nên có thể bạn sẽ thấy hiệu suất là một vấn đề. Có lẽ bạn sẽ không bỏ quyền truy cập và bắt đầu sử dụng cơ sở dữ liệu được kích hoạt không gian, bởi vì điều đó dường như không khả thi về mặt kinh tế, nhưng nếu đồng nghiệp của bạn cảm thấy thôi thúc thay đổi, tôi có thể khuyên bạn nên chuyển sang một thứ gì đó nhiều hơn một chút quyền lực.


@ MV- Đây là thông tin tốt để có. Tôi không nhận ra bạn có thể thêm dữ liệu dạng bảng thông qua tùy chọn "thêm lớp vectơ". Mặc dù vậy, bạn đã đúng, vì nó không được kích hoạt theo không gian, bạn vẫn phải xuất khẩu sang định dạng không gian bằng cách nào đó. Và bạn đã đúng, người dùng sẽ không chuyển sang db được kích hoạt không gian bởi vì họ không phải là một cơ sở dữ liệu hoặc cơ sở dữ liệu. Họ có đủ đào tạo Access để trở nên nguy hiểm ...
RyanKDalton-OffTheGridMaps

7

Với các công cụ "Xử lý" mới có sẵn trong QGIS 2, việc này trở nên dễ dàng hơn một chút. Mặc dù tôi vẫn chưa tìm được cách "liên kết trực tiếp" dữ liệu (để nếu bạn thay đổi các giá trị trong bảng MS Access, điểm sẽ tự động di chuyển), phương pháp này có vẻ hoạt động khá tốt.

Tín dụng chuyển đến "Christina" và "Bernd" trong phần bình luận của trang này (và tất nhiên @underdark cho blog) để biết cách tạo kết nối ODBC vào cơ sở dữ liệu MS Access của bạn:

Tạo kết nối ODBC:

Đối với Win7, 32 bit: Chuyển đến bảng điều khiển / công cụ quản trị / nguồn dữ liệu (ODBC)

Đối với Win7, 64 bit: Thay vì sử dụng bảng điều khiển / công cụ quản trị / nguồn dữ liệu (ODBC) mặc định, với các phiên bản 64 bit, bạn phải sử dụng C: \ Windows \ SysWOW64 \ odbcad32.exe!

  1. Nhấp vào tab DSN của người dùng và sau đó 'thêm'
  2. Cuộn xuống Microsoft Access Driver (* mdb) và nhấp vào 'kết thúc'
  3. Đặt tên cho kết nối, sau đó chọn 'select' để duyệt đến vị trí của cơ sở dữ liệu, sau đó nhấp vào 'ok' để thoát khỏi cuộc hội thoại và một lần nữa để đóng cửa sổ DSN.

Tải lớp vào QGIS:

  1. Đi để thêm lớp vector và chọn tùy chọn cơ sở dữ liệu.
  2. Đảm bảo hộp 'loại' cơ sở dữ liệu nói 'ODBC' và nhấp vào 'mới'
  3. Trong hộp tên, nhập tên cho kết nối
  4. Máy chủ lưu trữ là localhost
  5. Tên cơ sở dữ liệu là tên của DSN bạn đã tạo ở bước 4
  6. Tất cả các hộp khác phải trống nhưng bạn có thể đánh dấu vào ô 'lưu mật khẩu'.
  7. Kiểm tra kết nối và ghi chú về bất kỳ lỗi nào. Khi thành công, nhấp vào 'ok' để quay lại đối thoại 'thêm lớp vectơ'
  8. Nhấp vào 'mở' để mở kết nối này và nếu được hỏi mật khẩu, hãy nhấp vào 'ok'. Chọn lớp của bạn (bảng từ cơ sở dữ liệu), lưu ý rằng nó có thể không có bất kỳ hình học.

Chuyển đổi dữ liệu XY thành Điểm:

  1. Với bảng trong TOC, hãy chuyển đến "Đang xử lý" -> Hộp công cụ -> Thuật toán địa lý -> Vector -> Tạo -> "Lớp điểm từ bảng".
  2. Điền vào mẫu như được thấy dưới đây:

Lớp điểm từ bảng


Nếu bạn đang gặp vấn đề với cách tiếp cận này, hãy kiểm tra quyền truy cập
.ISdb

Rất cám ơn sự giúp đỡ về việc kết nối quyền truy cập ms vào QGIS. Tôi đang sử dụng mã quốc gia gồm ba chữ cái làm lớp tham gia và nó hoạt động rất độc đáo

Nếu tôi có một bảng có Line hoặc Polygon, làm thế nào tôi có thể tạo bản đồ?
MichaelR

5

Mặc dù tôi vẫn muốn nghe nếu có các tùy chọn khác khả dụng, tôi đã bắt gặp một bài đăng thông báo đề cập đến điều này là có thể sử dụng Plugin eVis .

Tài liệu mô tả trong phần Kết nối cơ sở dữ liệu về cách bạn có thể kết nối với kết nối MS Access hoặc ODBC để tạo các vị trí điểm XY từ cơ sở dữ liệu mà không cần tạo ảnh chụp nhanh tĩnh. Tôi chỉ cần gõ "select * from" và eVis hiện ra một hộp thoại hỏi tên lớp và các trường XY.

Thật không may, điều này dường như không tạo ra kết nối "liên kết trực tiếp" với db MS Access vì lần sau khi dự án mở ra, QGIS bị nhầm lẫn ("không thể mở một hoặc nhiều lớp dự án"). Tuy nhiên, giải pháp cho vấn đề này là tạo một truy vấn XML được xác định trước mà người dùng có thể chọn.

Vì vậy, mặc dù không phải là một giải pháp hoàn hảo, đây là một bước tốt hơn so với xuất sang CSV. Trong tương lai tôi nghĩ sẽ rất tuyệt khi thấy plugin Deliated Text được mở rộng để chấp nhận các kết nối ODBC cho mục đích này.


Ah! Điều đó thực sự hữu ích để biết. Nó liên quan đến một số hoops, nhưng ít nhất nó nên được thiết lập một lần. Nó sẽ tải lại dữ liệu nếu bạn thay đổi chế độ xem trong QGIS? Hoặc nó chỉ lưu trữ nó cho đến khi bạn tự chạy lại truy vấn?
MerseyViking

@ MV- Từ những gì tôi có thể nói qua thử nghiệm, eVis xuất hiện để tạo một lớp được lưu trong bộ nhớ cache trong QGIS. Ví dụ: sau khi tôi tải lớp bằng eVis, tôi đã xóa một trong các bản ghi khỏi Access DB, màn hình QGIS được làm mới và điểm "đã xóa" vẫn tồn tại. Nhưng khi tôi tạo một lớp lưu trữ mới, điểm bị xóa sẽ không được hiển thị (như mong đợi). Panning và phóng to không có hiệu lực trên màn hình lớp được lưu trữ.
RyanKDalton-OffTheGridMaps

4

một cách tiếp cận khác là chuyển dữ liệu sang postgis. bạn có thể đọc tệp csv trực tiếp bằng lệnh sao chép postgresql. sau đó bạn có thể tạo các điểm cho các trường xy.

sau đó nếu bạn muốn sử dụng một số báo cáo hoặc chức năng khác trong quyền truy cập, bạn có thể kết nối với postgis từ quyền truy cập.

lợi ích sẽ là bạn đặt dữ liệu không gian nơi nó thuộc về cơ sở dữ liệu không gian và sau đó sử dụng odbc để truy cập để xử lý dữ liệu không liên quan nếu bạn vì lý do nào đó vẫn muốn xem dữ liệu của mình khi truy cập.

có những hướng dẫn tuyệt vời để postgis / postgresql truy cập kết nối trong postgresonline.com. hướng dẫn về việc áp dụng cho postgis / postgresql bạn có thể tìm thấy bởi cùng các tác giả tại bostongis.org

/ Nicklas


0

Có một số sản phẩm chuyển đổi có thể chuyển đổi dữ liệu truy cập ms sang postgres hoặc SQLite và quay lại. Việc di chuyển dữ liệu rất nhanh từ bên này sang bên kia. Sử dụng một trong những ứng dụng này có thể cung cấp cho bạn tùy chọn để chạy QGIS trên ảnh chụp nhanh dữ liệu.


1
bạn có thể đề nghị một công cụ như vậy?
Jens
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.