Может ли 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 Server, чтобы выбрать отдельный полигон Inline Geography в качестве общеизвестного текста следующим образом:

<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 Table). 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 и странице Virtual Spatial Data .

Великий пост в блоге , кстати. Я не стал бы сильно беспокоиться об использовании Python 3.x - почти все полезные ГИС-библиотеки все еще находятся в 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 показывал, что запросы выполняются. Я попробую с реальными данными позже.
география

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 ( lists.openstreetmap.org/listinfo/dev ), там много Mapnikers.
Игорь Брейц,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.