MapGuideで接続できるデータベースは、商用(Autodesk社がリリース)とフリーで異なり、MySQL、ODBCを利用できる。商用では、MS-SQLやOracleに接続できるらしい。
ODBCとあるので、データソースさえ作成してしまえば、Oracle、SQL、AccessだのといったRDBMSに接続できそうな気配。
早速試してみよう!
■結果
ADO→MSAccess :OK
ODBC→MSAccess :OK
ODBC→MSSQL :OK
ODBC→PostgreSQL(Powergres) :OK
■プログラムからのアクセス
ASP.NETからMapGuideサーバのリソースとしてのDBに接続するのを試してみた。
(ASP.NETから直接RDBMSに接続しないことに意味がある。)
結果から先に言ってしまうと。
+++++++++++++++++++++++++++++++++
SDFへの接続と全く同様の手続きで、テーブルのレコードにアクセスし、
列値(フィールド)を読み取ることが出来た。
+++++++++++++++++++++++++++++++++
リソースの指定
MgResourceIdentifier featureResId = new MgResourceIdentifie "Library://mlit/Data/address2point_odbc_sql.FeatureSource");
テーブルの指定
MgFeatureReader featureReader = featureService.SelectFeatures(featureResId, "tbl_23_2005", queryOptions);
クエリの指定
String filter = "Address1 LIKE '%" + address + "%'";
フィールドの読み取り
featureReader.GetDouble("Lon");
■緯度経度属性をそのまま渡して地図表示:動作確認済み
RDBMSの緯度、経度をそのまま引数として渡して、AjaxMapViewerで地図を表示するテスト→OK
街区レベル位置参照情報をテーブルにぶち込み、リソースとして登録。
緯度、経度をそのまま渡してみる。
double x = featureReader.GetDouble("Lon");
double y = featureReader.GetDouble("Lat");
Response.Write("<a class=\"NavLink\" href=\"gotopoint.aspx?X="+x+"&Y="+y+"&Scale=2000\" target=\"scriptFrame\">"+ name + "</a></td></tr>");
街区レベル位置情報データのテーブルに対して、住所検索を行い、緯度経度パラメータ付のURLを生成し、地図表示が動作した。
次は、住所検索部分をWebAPIとして作り、結果のXMLを拾って結果表示するように変えてみるか。
※取得するフィールドの型によってGet***は以下を使う
GetBoolean
GetByte
GetDateTime
GetDouble
GetInt16
GetInt32
GetInt64
GetSingle
GetString
GetGeometry
散々試した後に見つけたのだが、ここに完璧なサンプルがあった。探し方が足りなかったみたい(汗)