Чи може Mapnik надати просторові дані з SQL Server?


10

Це дуже просте запитання - я просто хочу знати, чи хтось може підтвердити, що вони успішно використовували Mapnik для візуалізації плиток безпосередньо з даних, що зберігаються в SQL Server. (І якщо так, то що ви зробили, щоб це працювало?) Будь ласка, не відповідайте, якщо ви особисто не підтвердили, що це можливо ... не просто так, що це повинно бути можливим

Я бачив, як люди рекомендують Mapnik для візуалізації даних із SQL Server у таких темах, як ця: Будь-які хороші двигуни візуалізації карт для SqlGeometry / SqlGeography

Також веб-сайт mapnik зазначає, що "підтримуються всі формати OGR": http://mapnik.org/faq/#data

Однак я не зміг використати з'єднання зі своєю локальною базою даних SQL Server як джерело даних для шару Mapnik. В якості тесту я використовую прямий тест OGR VRT, який виконує оператор SQL на SQL сервері, щоб вибрати єдиний вбудований географічний полігон як добре відомий текст:

<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>

(Зверніть увагу, я також спробував це з більш звичайним синтаксисом таблиці SELECT * FROM). OGRINFO успішно відкриває цей VRT та повідомляє про таке:

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)

Однак, встановивши цей самий файл VRT як джерело даних для шару Mapnik, повідомляється про наступну помилку:

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;'.

Здається, що існує певна проблема між тим, як драйвер OGR створює з'єднання SQL Server, і Mapnik, але я не знаю, де саме він знаходиться. Я ще не знайшов жодних доказів чи прикладів, які б припустили, що хтось ще успішно міг цього досягти ...

Відповіді:


2

Здається, недостатньо чіткого огляду на довідковій сторінці віртуального формату OGR . Фраза, яку вона може "надати якірний файл для доступу до джерел даних, не орієнтованих на файли", мабуть, означає, що будь-який тип з'єднання може бути використаний, але я не впевнений, що це так.

Його первісна функція полягала в тому, щоб дозволити створювати просторові дані з непросторових джерел, наприклад, поєднуючи стовпчик X і Y у таблиці бази даних, щоб створити особливості точок.

Однак немає причини, чому просторову базу даних також не можна використовувати для цієї мети, але тоді слід використовувати стандартне з'єднання ODBC, а не драйвер MSSQL .

Для цього створіть DSN (назва джерела даних) у Windows. Потім використовуйте з'єднання ODBC та DSN у конфігурації віртуального рівня. Отже, якщо ваш DSN названий 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>

Є ще кілька деталей про створення віртуальних шарів на вікі MapServer та віртуальних просторових даних .

Великий піст в блозі , до речі. Я б не переживав над тим, щоб використовувати Python 3.x - майже всі корисні бібліотеки GIS все ще знаходяться в 2.x, а типи геометрії та географії SQL Server - чудові. Єдиним недоліком є ​​те, що SQL Server, на жаль, здається громадянином другого класу у світі відкритих джерел, що стосується публікацій блогу та інтеграції з іншими інструментами.


Дякую за відповідь. Я також намагався з ODBC підключенням до SQL Server у VRT, і, на жаль, це призводить до тієї ж помилки. Я не думаю, що це проблема з підключенням OGR VRT до SQL Server, оскільки я можу завантажити цей VRT в QGIS або OGR2OGR, скажімо, і отримати доступ до функцій SQL без будь-яких проблем. Я думаю , що це проблема з драйвером Mapnik OGR , але, як ви говорите, до жаль , не так багато OpenSource людей використовують SQL Server :( Forunately, картсервер робить роботу з SQL Server так, хоча я віддаю перевагу рендеринг Mapnik, я буду працювати з що замість цього
Аластер Ейчісон

@alastair - Ви впевнені, що різниці немає? З MSSQL нічого не доходило до бази даних через Mapnik, але за допомогою ODBC SQL Profiler показав, що запити виконуються. Я спробую з реальними даними пізніше.
geographika

0

Ви можете використовувати віртуальний формат (GDAL) для витягу даних із вашої бази даних MSSQL

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>

джерело: http://alastaira.wordpress.com/2011/06/16/tile-rendering-with-mapnik-part-1-of-n-where-n-is-large/

Хоча рекомендую Postgres PostGIS (має кращі функції геометрії на базі даних)


MySQL -> MS SQL. Я хотів це виправити сам, але він скаржиться на "принаймні 6 знаків, необхідних для редагування".
Ігор Брейц

1
Я не знаю, чи зрозуміли ви, але посилання на блог, яке ви надали, - це від автора запитання ....
Келсо

@Mapperz - дякую, що знайшли час для відповіді, але, будь ласка, прочитайте моє запитання ще раз - я хочу почути від кожного, хто особисто підтвердить, що вони мають Mapnik для підключення до SQL Server - не тільки те, що теоретично це повинно бути можливим. Як зазначає Келсо, стаття в блозі, на яку ви посилаєтесь, написана мною, і більше того, якщо ви насправді прочитаєте її, ви побачите, що я описую, як я невдало отримав з'єднання OGR для роботи (отже, чому я публікую повідомлення це питання) !. Крім того, на якій основі ви б сказали, що PostGIS має кращі геометричні функції?
Аластер Ейчісон

@Alastair: спробуйте задати питання у списку розсилки OSM-dev ( list.openstreetmap.org/listinfo/dev ), там багато Mapnikers.
Ігор Брейц
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.