Mapnik có thể kết xuất dữ liệu không gian từ SQL Server không?


10

Đây là một câu hỏi rất đơn giản - tôi chỉ muốn biết liệu có ai có thể xác nhận rằng họ đã sử dụng thành công Mapnik để kết xuất các ô trực tiếp từ dữ liệu được giữ trong SQL Server hay không. (Và, nếu vậy, bạn đã làm gì để nó hoạt động?) Xin vui lòng không trả lời trừ khi bạn đã xác nhận cá nhân rằng điều này là có thể ... không chỉ đơn giản là nó nên có thể

Tôi đã thấy mọi người đề xuất Mapnik để kết xuất dữ liệu từ SQL Server trong các luồng như thế này: Bất kỳ Công cụ kết xuất bản đồ tốt nào cho SqlGeometry / SqlGeography

Ngoài ra, trang web mapnik nói rằng "tất cả các định dạng OGR đều được hỗ trợ": http://mapnik.org/faq/#data

Tuy nhiên, tôi đã hoàn toàn không thể sử dụng kết nối đến cơ sở dữ liệu SQL Server cục bộ của mình làm nguồn dữ liệu cho lớp Mapnik. Để thử nghiệm, tôi đang sử dụng một thử nghiệm OGR VRT đơn giản, thực thi một câu lệnh SQL trên Máy chủ SQL để chọn một Đa giác địa lý nội tuyến duy nhất là Văn bản được biết đến như sau:

<OGRVRTDataSource>
  <OGRVRTLayer name="test">
    <SrcDataSource>MSSQL:server=zangief\DENALICTP3;database=TempDB;</SrcDataSource> 
    <SrcSQL>SELECT geography::STPolyFromText('POLYGON((0 50, 2 50, 2 53, 0 53, 0 50))', 4326).STAsText() AS geomWKT</SrcSQL>
    <GeometryField encoding="WKT" field="geomWKT"/>
    <LayerSRS>EPSG:4326</LayerSRS>
    <GeometryType>wkbPolygon</GeometryType>
  </OGRVRTLayer>
</OGRVRTDataSource>

(Lưu ý tôi cũng đã thử điều này với cú pháp CHỌN * TỪ Bảng thông thường hơn). OGRINFO thành công mở VRT này và báo cáo như sau:

ogrinfo mssql.ovf -so -al
INFO: Open of `mssql.ovf'
      using driver `VRT' successful.

Layer name: test
Geometry: Polygon
Feature Count: 1
Extent: (0.000000, 50.000000) - (2.000000, 53.000000)
Layer SRS WKT:
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.0174532925199433,
        AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4326"]]
geomWKT: String (0.0)

Tuy nhiên, việc đặt cùng tệp VRT này làm nguồn dữ liệu cho lớp Mapnik báo cáo lỗi sau:

ERROR 1: Failed to open datasource `MSSQL:server=zangief\DENALICTP3;database=Tem
pDB;'.
Traceback (most recent call last):
  File "rundemo.py", line 48, in <module>
    provlines_lyr.datasource = mapnik.Ogr(file="mssql.ovf", layer="test")
  File "C:\OSGeo4W\apps\Python25\lib\site-packages\mapnik\__init__.py", line 418
, in Ogr
    return CreateDatasource(keywords)
RuntimeError: Failed to open datasource `MSSQL:server=zangief\DENALICTP3;databas
e=TempDB;'.

Có vẻ như có một số vấn đề giữa cách trình điều khiển OGR tạo kết nối SQL Server và Mapnik, nhưng tôi không biết chính xác nó ở đâu. Tôi chưa tìm thấy bất kỳ bằng chứng hoặc ví dụ nào cho thấy rằng bất kỳ ai khác đã có thể thành công trong việc này ...

Câu trả lời:


2

Dường như thiếu một cái nhìn tổng quan rõ ràng trên trang trợ giúp Định dạng ảo OGR . Cụm từ nó có thể "cung cấp một tệp neo để truy cập vào các nguồn dữ liệu không định hướng tệp" dường như ngụ ý bất kỳ loại kết nối nào có thể được sử dụng, nhưng tôi không chắc đây là trường hợp.

Chức năng ban đầu của nó là cho phép tạo dữ liệu không gian từ các nguồn không phải không gian, ví dụ bằng cách kết hợp cột X và Y trong bảng cơ sở dữ liệu để tạo các tính năng điểm.

Tuy nhiên, không có lý do tại sao cơ sở dữ liệu không gian cũng không thể được sử dụng cho mục đích này, nhưng sau đó bạn nên sử dụng kết nối ODBC tiêu chuẩn thay vì trình điều khiển MSSQL .

Để thực hiện việc này, hãy tạo DSN (Tên nguồn dữ liệu) trong Windows. Sau đó sử dụng kết nối ODBC và DSN trong cấu hình lớp ảo. Vì vậy, nếu DSN của bạn được đặt tên OSVectorMap:

<OGRVRTDataSource>
  <OGRVRTLayer name="AASQLlayer">
    <SrcDataSource>ODBC:username/password@OSVectorMap</SrcDataSource>
    <SrcSQL>SELECT geom27700.STAsText() AS geomWKT FROM TG11_Settlement_Area</SrcSQL>
    <GeometryField encoding="WKT" field="geomWKT"/>
    <LayerSRS>EPSG:4326</LayerSRS>
    <GeometryType>wkbPolygon</GeometryType>
  </OGRVRTLayer>
</OGRVRTDataSource>

Có một vài chi tiết khác về việc tạo Lớp ảo trong wiki MapServer và trang Dữ liệu không gian ảo .

Lớn bài đăng blog bằng cách này. Tôi sẽ không lo lắng quá nhiều về việc sử dụng Python 3.x - gần như tất cả các thư viện GIS hữu ích vẫn còn trong 2.x Và các loại Hình học và Địa lý của SQL Server rất tuyệt. Nhược điểm duy nhất là SQL Server không may dường như là một công dân hạng hai trong thế giới mã nguồn mở về các bài đăng trên blog và tích hợp với các công cụ khác.


Cảm ơn vi đa trả lơi. Tôi cũng đã thử kết nối ODBC với SQL Server trong VRT và không may điều này dẫn đến lỗi tương tự. Tôi không nghĩ đó là vấn đề với kết nối OGR VRT với SQL Server như vậy, vì tôi có thể tải VRT này trong QGIS hoặc OGR2OGR, nói và truy cập các tính năng SQL mà không gặp vấn đề gì. Tôi nghĩ đó là một vấn đề với trình điều khiển OGR của Mapnik nhưng, như bạn nói, thật không may là nhiều người OpenSource sử dụng SQL Server :( May mắn thay, MapServer không hoạt động với SQL Server, vì vậy, tôi thích kết xuất của Mapnik hơn, tôi sẽ phải làm việc với thay vào đó.
Alastair Aitchison

@alastair - Bạn có chắc là không có sự khác biệt? Với MSSQL, không có gì tiếp cận được cơ sở dữ liệu thông qua Mapnik, nhưng với ODBC SQL Profiler cho thấy các truy vấn đang được thực thi. Tôi sẽ thử với dữ liệu thực sau.
geographika

0

Bạn có thể sử dụng Định dạng ảo (GDAL) để lấy dữ liệu từ Cơ sở dữ liệu MSSQL của bạn

http://www.gdal.org/ogr/drv_vrt.html

    <OGRVRTDataSource>
  <OGRVRTLayer name="AASQLlayer">
    <SrcDataSource>MSSQL:server=.\SQLEXPRESS;database=OSVectorMap;trusted_connection=yes</SrcDataSource>
    <SrcSQL>SELECT geom27700.STAsText() AS geomWKT FROM TG11_Settlement_Area</SrcSQL>
    <GeometryField encoding="WKT" field="geomWKT"/>
  </OGRVRTLayer>
</OGRVRTDataSource>

nguồn: http://alastaira.wordpress.com/2011/06/16/tile-rendering-with-mapnik-part-1-of-n-where-n-is-large/

Mặc dù đề xuất Postgres PostGIS (có chức năng Hình học tốt hơn về phía cơ sở dữ liệu)


MySQL -> MS SQL. Tôi muốn tự sửa nó, nhưng nó phàn nàn về "ít nhất 6 ký tự cần thiết trong chỉnh sửa".
Igor Brejc

1
Tôi không biết liệu bạn có nhận ra không, nhưng liên kết blog bạn cung cấp là từ tác giả câu hỏi ....
Kelso

@Mapperz - cảm ơn bạn đã dành thời gian trả lời, nhưng vui lòng đọc lại câu hỏi của tôi - Tôi muốn nghe từ bất kỳ ai xác nhận rằng họ đã có Mapnik để kết nối với SQL Server - không chỉ là về mặt lý thuyết là có thể. Như Kelso chỉ ra, bài viết blog mà bạn liên kết đến được viết bởi tôi và hơn thế nữa, nếu bạn thực sự đọc nó, bạn sẽ thấy tôi mô tả cách tôi không thành công khi kết nối OGR hoạt động (do đó tại sao tôi đăng bài câu hỏi này)!. Ngoài ra, trên cơ sở nào bạn sẽ nói PostGIS có chức năng hình học tốt hơn?
Alastair Aitchison

@Alastair: hãy thử đặt câu hỏi trong danh sách gửi thư OSM-dev ( lists.openstreetmap.org/listinfo/dev ), có rất nhiều Mapnikers ở đó.
Igor Brejc
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.