y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

MapGuide:ODBCデータソースへの接続をチェック

MapGuideで接続できるデータベースは、商用(Autodesk社がリリース)とフリーで異なり、MySQLODBCを利用できる。商用では、MS-SQLOracleに接続できるらしい。
ODBCとあるので、データソースさえ作成してしまえば、OracleSQLAccessだのといったRDBMSに接続できそうな気配。
早速試してみよう!

■結果
ADO→MSAccess    :OK
ODBC→MSAccess   :OK
ODBCMSSQL     :OK
ODBCPostgreSQL(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

散々試した後に見つけたのだが、ここに完璧なサンプルがあった。探し方が足りなかったみたい(汗)