Google MapsでJavaScriptのお勉強(PostGISと.NETもあるよ) その3
昨日の続きで、PostGISで作成した地理情報データベースに対して.NETからアクセスする方法です(・∀・)
今まで仕事で.NETとPostgreSQLっていう組み合わせはやったことは無かったんですけど。
#周りの人がODBC経由で接続しているのは見たことありますが
で、今回はNpgsqlを使ってみようかと思います。
PostgreSQLのインストール時に一緒にインストールされていますし。
NpgsqlはライセンスがLGPLで、Monoにも取り込まれているそうで。
MS1.1フォルダにはNpgsql.dllの他にMono.Security.dllも入っていますが、Monoに依存している部分があるって事ですかね。
まあ、とりあえずVisual Studio上からNpgsql.dllとMono.Security.dllを参照設定します。
で、地理情報テーブルにアクセスするために、こんな処理を書いてみました。
using Npgsql; ... string connectionString = "Server=127.0.0.1;Port=5432;User Id=*****;Password=*****;Database=usamap;Encoding=UNICODE;"; string sql = "select id, name, x(spot_geometry) as lon, y(spot_geometry) as lat from spots"; using( NpgsqlConnection conn = new NpgsqlConnection( connectionString ) ) { conn.Open(); using( NpgsqlCommand command = new NpgsqlCommand( sql, conn ) ) { using( NpgsqlDataReader dr = command.ExecuteReader() ) { while( dr.Read() ) { ... } } } conn.Close(); }
SQLではx()、y()によってGEOMETRY型のフィールドの値を138.5690139、35.6670556のようなdouble値として取得しています。
これでデータの取得ができたので、基本検証はOK、実際のサービス層を構築しました。
Google Mapsのマーカー更新処理としては、GMapのBounds内に存在するマーカー一覧(LIMIT付き)が検索できれば良いことになります。
っというわけで、4つのdouble値を引数として、そのPOLUGON中にPOINTが存在するデータを取得する処理を作成しました。
なお、GEOMETRY型をパラメタライズドクエリする方法が分からなかったので、そこはこんな感じでお茶を濁しました(´・ω・`)
public static string FormatPolygon(double minX, double minY, double maxX, double maxY) { return( String.Format( "GeometryFromText( 'POLYGON(({0} {1}, {2} {1}, {2} {3}, {0} {3}, {0} {1}))', 4326 )", minX, minY, maxX, maxY ) ); }
これでデータベース周りの検証は出来たことになるので、次はこれをAjaxで取得して処理するあたりの話になりますね。
やっとJavaScriptにたどり着いた…(´ω`)