O Mapnik pode renderizar dados espaciais do SQL Server?

10

Essa é uma pergunta muito simples - eu só quero saber se alguém pode confirmar se usou o Mapnik com êxito para renderizar blocos diretamente dos dados mantidos no SQL Server. (E, em caso afirmativo, o que você fez para fazê-lo funcionar?) Por favor, não responda, a menos que tenha pessoalmente confirmado que isso é possível ... não apenas que deveria ser possível

Vi pessoas recomendando o Mapnik para renderizar dados do SQL Server em threads como este: Qualquer bom mecanismo de renderização de mapa para SqlGeometry / SqlGeography

Além disso, o site do mapnik afirma que "todos os formatos OGR são suportados": http://mapnik.org/faq/#data

No entanto, não consegui usar uma conexão com meu banco de dados local do SQL Server como fonte de dados para uma camada Mapnik. Como teste, estou usando um teste simples OGR VRT, que executa uma instrução SQL em um SQL Server para selecionar um único polígono de geografia embutida como texto conhecido, da seguinte maneira:

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

(Observe que eu também tentei isso com a sintaxe SELECT * FROM Table mais convencional). O OGRINFO abre com êxito este VRT e relata o seguinte:

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)

No entanto, definir esse mesmo arquivo VRT como fonte de dados para uma camada Mapnik relata o seguinte erro:

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

Parece que há algum problema entre a maneira como o driver OGR cria a conexão do SQL Server e o Mapnik, mas não sei exatamente onde ele está. Ainda não encontrei nenhuma evidência ou exemplo que sugira que mais alguém tenha conseguido alcançar isso com êxito ...

Alastair Aitchison
fonte

Respostas:

2

Parece haver uma falta de uma visão clara na página de ajuda do OGR Virtual Format . A frase " pode fornecer um arquivo âncora para acesso a fontes de dados não orientadas a arquivos" parece implicar que qualquer tipo de conexão possa ser usado, mas não tenho certeza se esse é o caso.

Sua função original era permitir que dados espaciais fossem criados a partir de fontes não espaciais, por exemplo, combinando uma coluna X e Y em uma tabela de banco de dados para criar recursos de pontos.

No entanto, não há razão para que um banco de dados espacial também não possa ser usado para esse fim, mas você deve usar uma conexão ODBC padrão em vez do driver MSSQL .

Para fazer isso, crie um DSN (nome da fonte de dados) no Windows. Em seguida, use a conexão ODBC e o DSN na configuração da camada virtual. Portanto, se o seu DSN se chama 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>

Há mais alguns detalhes sobre a criação de Camadas Virtuais na página wiki do MapServer e na página Dados Espaciais Virtuais .

A propósito, ótimo post no blog . Eu não me preocuparia muito em usar o Python 3.x - quase todas as bibliotecas GIS úteis ainda estão no 2.x E os tipos de geometria e geografia do SQL Server são ótimos. As únicas desvantagens são que, infelizmente, o SQL Server parece um cidadão de segunda classe no mundo de código aberto em termos de postagens no blog e integração com outras ferramentas.

geographika
fonte
Obrigado pela resposta. Eu tentei com uma conexão ODBC com o SQL Server no VRT também e, infelizmente, isso resulta no mesmo erro. Eu não acho que seja um problema com a conexão OGR VRT ao SQL Server como tal, porque posso carregar esse VRT no QGIS ou OGR2OGR, digamos, e acessar os recursos SQL sem nenhum problema. Eu acho que é um problema com o driver Mapnik OGR, mas, como você diz, infelizmente, não que muitas OpenSource pessoas usam SQL Server :( Forunately, MapServer faz o trabalho com SQL Server assim, embora eu prefira prestação de Mapnik, eu vou ter que trabalhar com que em vez disso.
Alastair Aitchison
@alastair - Tem certeza de que não há diferença? Com o MSSQL, nada alcançava o banco de dados através do Mapnik, mas com o ODBC SQL Profiler, as consultas estavam sendo executadas. Vou tentar com dados reais mais tarde.
Geografika
0

Você pode usar o formato virtual (GDAL) para extrair dados do seu banco de dados 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>

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

Embora recomende o Postgres PostGIS (possui melhores funções de geometria no lado do banco de dados)

Mapperz
fonte
MySQL -> MS SQL. Eu mesmo queria corrigi-lo, mas ele reclama de "pelo menos 6 caracteres necessários na edição".
Igor Brejc
1
Eu não sei se você percebeu, mas o link do blog que forneceu é do autor pergunta ....
Kelso
@ Mapperz - obrigado por dedicar um tempo para responder, mas leia minha pergunta novamente - eu quero ouvir de alguém que pessoalmente confirme que conseguiu que o Mapnik se conecte ao SQL Server - não apenas que teoricamente deveria ser possível. Como Kelso aponta, o artigo do blog ao qual você vincula é escrito por mim e, além disso, se você realmente o ler, verá que eu descrevo como não tive êxito em fazer a conexão OGR funcionar (por isso, estou postando essa questão)!. Além disso, em que base você diria que o PostGIS possui melhores funções de geometria?
Alastair Aitchison
@Alastair: tente fazer a pergunta na lista de discussão OSM-dev ( lists.openstreetmap.org/listinfo/dev ), existem muitos mapnikers por lá.
Igor Brejc