Mapnik은 SQL Server에서 공간 데이터를 렌더링 할 수 있습니까?


10

이것은 매우 간단한 질문입니다. SQL Server에 저장된 데이터에서 직접 타일을 렌더링하기 위해 Mapnik을 성공적으로 사용했는지 확인할 수 있는지 알고 싶습니다. (만약 그렇다면, 당신은 그것이 작동되도록 무엇을 했는가?)에 회신하지 마십시오 당신이 개인적이는 것을 단순히 ... 수 있음을 확인하지 않은 해야 가능

: 나는 사람들은이 하나의 스레드에서 SQL 서버에서 데이터를 렌더링 Mapnik을 권장 본 적이 SqlGeometry / SqlGeography에 대한 모든 좋은지도 렌더링 엔진

또한 mapnik 웹 사이트에는 "모든 OGR 형식이 지원됩니다"라고 표시되어 있습니다. http://mapnik.org/faq/#data

그러나 로컬 SQL Server 데이터베이스에 대한 연결을 Mapnik 계층의 데이터 소스로 완전히 사용할 수 없었습니다. 테스트로서, 다음과 같이 SQL Server에서 SQL 문을 실행하여 잘 알려진 텍스트로 단일 인라인 지리 다각형을 선택하는 간단한 테스트 OGR VRT를 사용하고 있습니다.

<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 열을 결합하여 포인트 피처 작성).

그러나 공간 데이터베이스를이 목적으로 사용할 수없는 이유는 없지만 MSSQL 드라이버 대신 표준 ODBC 연결 을 사용해야합니다 .

이렇게하려면 Windows에서 DSN (데이터 소스 이름)을 작성하십시오. 그런 다음 가상 계층 구성에서 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 Geometry 및 Geography 유형은 훌륭합니다. 유일한 단점은 불행히도 SQL Server는 오픈 소스 세계에서 블로그 게시물 및 다른 도구와의 통합 측면에서 2 등 시민으로 보인다는 것입니다.


답장을 보내 주셔서 감사합니다. VRT에서 SQL Server에 대한 ODBC 연결을 시도했지만 불행히도 동일한 오류가 발생합니다. QGIS 또는 OGR2OGR 에이 VRT를로드하고 아무런 문제없이 SQL 기능에 액세스 할 수 있기 때문에 SQL Server에 OGR VRT 연결에 문제가 있다고 생각하지 않습니다. 나는 그것이 Mapnik OGR 드라이버의 문제라고 생각하지만 불행히도 많은 오픈 소스 사람들이 SQL Server를 사용하는 것은 아닙니다. (아쉽게도 MapServer SQL Server와 함께 작동하므로 Mapnik의 렌더링을 선호하지만 그 대신.
알라 Aitchison

@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 자 이상 필요"라는 불만이 있습니다.
Igor Brejc

1
난 당신이 실현 여부를 모르겠지만 제공 한 블로그 링크는 질문 저자에서 ....
Kelso

@Mapperz-답장을 보내 주셔서 감사하지만 내 질문을 다시 읽으십시오. 개인적으로 Mapnik이 SQL Server에 연결되어 있음을 개인적으로 확인한 사람으로부터 이론적으로 가능하다는 사실을 듣고 싶습니다. 켈소가 지적한 것처럼, 당신이 링크하는 블로그 기사는 저에 의해 쓰여졌으며, 더 많이 읽었습니다. 실제로 읽으면 OGR 연결을 작동시키는 데 실패한 이유를 설명합니다 (따라서 게시하는 이유) 이 질문)!. 또한 PostGIS의 지오메트리 기능이 더 우수하다고 어떤 말을 하시겠습니까?
Alastair Aitchison

@Alastair : OSM-dev 메일 링리스트 ( list.openstreetmap.org/listinfo/dev ) 에서 질문을 해보세요. Mapnikers가 많이 있습니다.
Igor Brejc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.