<< VB(.NET)でSQLiteへ接続 | top | MonoでVB厨房のおろかさを思い汁 >>

MapServerからODBCでSQLiteに接続する

MapServerからSQLiteへの接続は OGR 経由で接続できることは、前の記事で触れました。ただ、事前準備として ogr2ogr でShapefileなどから、SQLiteにデータを投入しておく必要があります。
ポリゴンやラインなどを扱うには、このような準備をしておかなければならないのは、なんとなく理解できるのですが、ポイントデータだけを扱いたいのに、わざわざogr2ogrでデータ投入するのもなんだなぁ、と思っていました。

そこで、MapServerから SQLiteに "ODBC" で接続して、経緯度の値からポイントの表示ができないかをためしてみました。

用意するのは、
・SQLiteのdbファイル
・SQLiteのODBCドライバ → http://www.ch-werner.de/sqliteodbc/
・Virtual Spatial Data (ODBC/OVF) の VRTファイル →Virtual File Format

です。

ここでのポイントは、VRTファイルの記述の方法です。WindowsでODBCのデータベースに接続するときは、
・コントロールパネル−管理ツール−データソース(ODBC)で、『システムDSN』に登録しないとうまくいかないようだよ、という記述をよく見かけます。

SQLiteはファイルベースのデータベースなのに、わざわざシステムDSNに登録するのはナンセンスです。
『ファイルDSN』を作ってで接続できないか、ググって見てもぜんぜん情報がありません。
だめもとで、ogrinfo を使って、
<OGRVRTDataSource>
<OGRVRTLayer name="mp3Lst">
<SrcDataSource>ODBC:@DSN名</SrcDataSource>
・・・

のところをいろいろ変えつつ、2時間ばかし粘った挙句、うまく行く方法を見つけました。
●sqlite.vrt
<OGRVRTDataSource>
<OGRVRTLayer name="mp3Lst">
<SrcDataSource>ODBC:DRIVER={SQLite3 ODBC Driver};DATABASE=..¥map¥test.db</SrcDataSource>
<GeometryType>wkbPoint</GeometryType>
<LayerSRS>WGS84</LayerSRS>
<GeometryField encoding="PointFromColumns" x="keido" y="ido"/>
</OGRVRTLayer>
</OGRVRTDataSource>


●sqlite.dsn
[ODBC]
DRIVER=SQLite3 ODBC Driver
LoadExt=
NoWCHAR=0
NoCreat=0
LongNames=0
ShortNames=0
Timeout=10000
NoTXN=0
SyncPragma=NORMAL
StepAPI=0
Database=


●マップファイルの記述
LAYER
CONNECTION "sqlite.vrt"
CONNECTIONTYPE OGR
DATA "mp3Lst"
LABELCACHE OFF
NAME "mp3Lst"
POSTLABELCACHE TRUE
STATUS ON
TEMPLATE "template.html"
TOLERANCE 0
TYPE POINT
UNITS METERS
CLASS
NAME "mp3Lst"
LABEL
ANGLE 0.000000
ANTIALIAS TRUE
FONT "msgothic"
MAXSIZE 256
MINSIZE 4
SIZE 12
TYPE TRUETYPE
BUFFER 0
COLOR 0 0 0
ENCODING "SJIS"
FORCE FALSE
MINDISTANCE -1
MINFEATURESIZE -1
OFFSET 0 0
PARTIALS TRUE
POSITION CL
END
STYLE
ANGLE 360
COLOR 255 0 0
MAXSIZE 100
OPACITY 100
OUTLINECOLOR 0 0 0
SIZE 6
SYMBOL "kreuz4"
END
END
END


mp3Lstとか、サンプルのテーブル名そのままなのはご愛嬌。mp3Lst の部分が、test.db 内のテーブル名になります。

SQLiteはUTF-8になっているので、MapServer内でshapeObjのvaluesで取得した文字列配列も、UTF-8ですので、Shift_JISなどに変換する必要はあります。

また、sqlite.vrt の中で、
DATABASE=..¥map¥test.db

としています。test.db は map フォルダにあるので、結局自分のところに帰ってきているのですが、こうしないとうまくいきませんでした。

<SrcDataSource>ODBC:DRIVER={SQLite3 ODBC Driver};DATABASE=..¥map¥test.db</SrcDataSource>


という、直接ODBCドライバーを記述する方法は見かけたことがないので、えらくニッチな使い方なんだろうと思うけれども、こんなトライアルの結果、それができてしまう、MapServerやGDAL/OGRのすごさをここでも実感ができて、非常に嬉しく思っています。

やっぱりすごいぞ、FOSS4G!
bugna | MapServer | 14:41 | comments(0) | trackbacks(0) | - | - |
Comment









Trackback
URL:

11
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--
>>
<<
--