Mapnik peut-il restituer des données spatiales à partir de SQL Server?


10

C'est une question très simple - je veux juste savoir si quelqu'un peut confirmer qu'il a utilisé avec succès Mapnik pour rendre les tuiles directement à partir des données contenues dans SQL Server. (Et, si oui, qu'avez-vous fait pour le faire fonctionner?) Veuillez ne pas répondre à moins que vous n'ayez personnellement confirmé que cela est possible ... pas simplement que cela devrait être possible

J'ai vu des gens recommander Mapnik pour le rendu des données de SQL Server dans des threads comme celui-ci: tous les bons moteurs de rendu de carte pour SqlGeometry / SqlGeography

En outre, le site Web de mapnik indique que "tous les formats OGR sont pris en charge": http://mapnik.org/faq/#data

Cependant, j'ai été complètement incapable d'utiliser une connexion à ma base de données SQL Server locale comme source de données pour une couche Mapnik. À titre de test, j'utilise un test OGR VRT simple, qui exécute une instruction SQL sur un serveur SQL pour sélectionner un seul polygone de géographie en ligne comme texte bien connu, comme suit:

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

(Notez que j'ai également essayé cela avec une syntaxe SELECT * FROM de table plus conventionnelle). OGRINFO ouvre avec succès cette VRT et signale ce qui suit:

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)

Cependant, la définition de ce même fichier VRT comme source de données pour une couche Mapnik signale l'erreur suivante:

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

Il semble qu'il y ait un problème entre la façon dont le pilote OGR crée la connexion SQL Server et Mapnik, mais je ne sais pas exactement où il se trouve. Je n'ai pas encore trouvé de preuves ou d'exemples suggérant que quelqu'un d'autre a réussi à y parvenir non plus ...

Réponses:


2

Il semble y avoir un manque de vue d'ensemble claire sur la page d'aide OGR Virtual Format . L'expression qu'il peut "fournir un fichier d'ancrage pour l'accès à des sources de données non orientées fichier" semble impliquer que n'importe quel type de connexion peut être utilisé, mais je ne suis pas sûr que ce soit le cas.

Sa fonction d'origine était de permettre la création de données spatiales à partir de sources non spatiales, par exemple en combinant une colonne X et Y dans une table de base de données pour créer des entités ponctuelles.

Cependant, il n'y a aucune raison pour laquelle une base de données spatiale ne peut pas également être utilisée à cette fin, mais vous devez alors utiliser une connexion ODBC standard plutôt que le pilote MSSQL .

Pour ce faire, créez un DSN (nom de la source de données) dans Windows. Utilisez ensuite la connexion ODBC et le DSN dans la configuration de la couche virtuelle. Donc, si votre DSN est nommé 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>

Il y a quelques détails supplémentaires sur la création de couches virtuelles dans le wiki MapServer et la page de données spatiales virtuelles .

Excellent article de blog d'ailleurs. Je ne m'inquiéterais pas trop de l'utilisation de Python 3.x - presque toutes les bibliothèques SIG utiles sont toujours en 2.x Et les types de géométrie et de géographie SQL Server sont excellents. Le seul inconvénient est que SQL Server semble malheureusement un citoyen de seconde classe dans le monde open source en termes de billets de blog et d'intégration avec d'autres outils.


Merci pour la réponse. J'ai également essayé avec une connexion ODBC à SQL Server dans le VRT, et malheureusement, cela entraîne la même erreur. Je ne pense pas que ce soit un problème avec la connexion OGR VRT à SQL Server en tant que tel, car je peux charger ce VRT dans QGIS ou OGR2OGR, par exemple, et accéder aux fonctionnalités SQL sans aucun problème. Je pense qu'il est un problème avec le pilote Mapnik OGR mais, comme vous le dites, malheureusement pas que beaucoup de gens OpenSource utilisent SQL Server :( Forunately, MapServer ne travail avec SQL Server, bien que je préfère le rendu de Mapnik, je vais devoir travailler avec qu'au lieu.
Alastair Aitchison

@alastair - Êtes-vous sûr qu'il n'y a pas de différence? Avec MSSQL, rien n'atteignait la base de données via Mapnik, mais avec ODBC SQL Profiler montrait que les requêtes étaient en cours d'exécution. J'essaierai avec de vraies données plus tard.
geographika

0

Vous pouvez utiliser le format virtuel (GDAL) pour extraire des données de votre base de données 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>

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

Bien que je recommande Postgres PostGIS (a de meilleures fonctions de géométrie du côté de la base de données)


MySQL -> MS SQL. Je voulais le corriger moi-même, mais il se plaint "d'au moins 6 caractères nécessaires dans l'édition".
Igor Brejc

1
Je ne sais pas si vous vous en êtes rendu compte, mais le lien vers le blog que vous avez fourni provient de l'auteur de la question ....
Kelso

@Mapperz - merci d'avoir pris le temps de répondre, mais s'il vous plaît relisez ma question - je veux entendre toute personne qui confirme personnellement qu'elle a Mapnik pour se connecter à SQL Server - pas seulement que cela devrait théoriquement être possible. Comme le souligne Kelso, l'article de blog auquel vous créez un lien est écrit par moi et de plus, si vous le lisez, vous verrez que je décris comment je n'ai pas réussi à faire fonctionner la connexion OGR (d'où la raison pour laquelle je poste cette question)!. En outre, sur quelle base diriez-vous que PostGIS possède de meilleures fonctions de géométrie?
Alastair Aitchison

@Alastair: essayez de poser la question sur la liste de diffusion OSM-dev ( lists.openstreetmap.org/listinfo/dev ), il y a beaucoup de Mapnikers là-bas.
Igor Brejc
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.