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.