透過 .NET 程式碼存取空間資料

在伺服器端定義的資料表如下:

create database SpatialLab
go

use SpatialLab
go

create table Geo(GeoKey uniqueidentifier not null, GeoData geometry)
go

create procedure up_Geo_Insert @GeoKey uniqueidentifier, @GeoData Geometry
as
insert into Geo (GeoKey,GeoData) values (@GeoKey,@GeoData)
go

.NET 程式碼

設定參照 Microsoft.SqlServer.Types.dll ,預設位置在 c:Program Files Microsoft SQL ServerMSSQL10.MSSQLServerMSSQLBinn.

專案加入
using Microsoft.SqlServer.Types;

在程式內便可以使用 SqlGeometry 等類別

SqlConnection con = new SqlConnection("Data source=.;Trusted_Connection=True;Initial Catalog=SpatialLab");
con.Open();
using (SqlCommand cmd = new SqlCommand("truncate table SpatialLab.dbo.geo", con)){
cmd.ExecuteNonQuery();}

using (SqlCommand cmd = new SqlCommand("dbo.up_Geo_Insert", con)){

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@GeoKey", SqlDbType.UniqueIdentifier));

//必須要指定型態為 Udt
cmd.Parameters.Add(new SqlParameter("@GeoData", SqlDbType.Udt));
//再透過 UdtTypeName 設定自訂資料型態的名稱
cmd.Parameters[1].UdtTypeName = "Geometry";

//Geoms 宣告為 BindingList<SqlGeometry> 是存放 SqlGeometry 物件執行個體的 List

foreach (SqlGeometry Geom in Geoms){

cmd.Parameters[0].Value = Guid.NewGuid();
cmd.Parameters[1].Value = Geom;
cmd.ExecuteNonQuery();
}

}
con.Close();

 

從 DB 讀回:

private void DrawFromDB_Click(object sender, RoutedEventArgs e)
{
    SqlConnection con = new SqlConnection("Data source=.;Trusted_Connection=True;Initial Catalog=SpatialLab");
    con.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT GeoData FROM Geo", con))
    {
        SqlDataReader drGeoms = cmd.ExecuteReader();
        while (drGeoms.Read())
        {
            Geoms.Add((SqlGeometry)drGeoms.GetValue(0));

 

若要將地址轉成經緯度,也可以在 Google Map API 註冊取得 Key 後,參考 blog: 利用 Google Maps 查詢地址經緯度 – Geocoding via HTTP 簡易範例,即可利用 .NET 程式將 DB 內的地址加上經緯度微笑

我所蒐集到存取空間資料的範例程式碼

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: