`
holoblog
  • 浏览: 1234916 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19007
文章分类
社区版块
存档分类
最新评论

SQL Servr 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现

 
阅读更多

友情提示,您阅读本篇博文的先决条件如下:

  1、本文示例基于Microsoft SQL Server 2008 R2调测。

  2、具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验。

  3、具有使用 Microsoft Visual Studio 进行 Microsoft .NET Framework开发的经验。

  4、具有使用WCF、Silverlight、ADO.NET开发的经验。

  5、熟悉或了解Microsoft SQL Server 2008中的空间数据类型。

  6、具备相应(比如OGC)的GIS专业理论知识。


  SQL Server 2008中存储的空间数据,除了能够直接基于SQL Server做空间查询、空间分析外,由于SQLCLR提供了非常丰富、完善的开发API,使得空间数据可以在不同的常用空间数据类型之间转换,同时还可以非常简单的和地图应用无缝集成使用。本篇博文以Bing Maps Silverlight Control为地图应用客户端为基础,介绍如何实现在Bing Maps中呈现地理空间数据。

一、准备空间数据

  为了演示如何基于Bing Maps Silverlight Control来呈现SQL Server 2008中存储的空间数据,首先需要在数据库中模拟一些数据供数据查询使用,随意创建一个带有空间数据类型字段的表就可以,如下SQL脚本。

CREATETABLEDrawnPolygons(
[ID][int]IDENTITY(1,1)NOTNULL,
[Name][varchar](50)NOTNULL,
[Polygon][geography]NOTNULL)
GO

  

  对于上面脚本所创建的表格,随意的构造几条数据,如下图SQL Server Management Studio的空间结果中所呈现的效果。

        

二、编写数据服务接口

  数据结构使用WebService或者WCF提供都可以,本篇选用WCF Service提供地图数据访问接口,实现将数据库的空间数据读取出来返回到Bing Maps的地图客户端。由于目前的Linq To Sql和ASP.NET Entity Framewrok还不支持SQL Server 2008的空间数据类型,数据访问只能自己编写ADO.NET实现。如下代码块:

privateDataTableQuery(stringsql)
{
stringcstring=ConfigurationManager.ConnectionStrings["BingMapsDB"].ConnectionString;
SqlConnectionconn
=newSqlConnection(cstring);
if(conn.State==ConnectionState.Closed)conn.Open();
SqlDataAdapteradapter
=newSqlDataAdapter(sql,conn);
DataSetds
=newDataSet();
adapter.Fill(ds);
returnds.Tables[0];
}

  直接在WCF中对外公布一个公共方法,并将其标记为操作契约(OperationContract)就完成了服务接口的提供,该接口实现数据库查询并将数据库数据数据组合为对象集合返回到客户端,详细实现如下代码块。

[OperationContract]
publicList<DrawnPolygons>QueryPolygons()
{
varsql
="SELECT*FROM[DrawnPolygons]";

varresult
=Query(sql);
List
<DrawnPolygons>areas=null;
if(result!=null&&result.Rows.Count>0)
{
areas
=newList<DrawnPolygons>();
foreach(DataRowrowinresult.Rows)
{
areas.Add(
newDrawnPolygons
{
ID
=int.Parse(row["ID"].ToString()),
Name
=row["NAME"].ToString(),
Xaml=ToXaml(row["Polygon"],row["ID"].ToString())
});
}
}
returnareas;
}

  接口使用了数据传输对象DrawnPolygons,其他结构如下定义:

[DataContract]
publicclassDrawnPolygons
{
[DataMember]
publicintID{get;set;}
[DataMember]
publicstringName{get;set;}
[DataMember]
publicstringXaml{get;set;}
}

三、构造空间数据客户端对象

  在这里请大家讲视眼转移到本篇前面代码片段的中加粗大红字体处,会发现使用了一个名为“ToXaml()”的方法,此方法的主要功能就是实现将空间数据转换为客户端Silverlight能够识别的xaml语言标记。该方法的详细实现如下代码块所示:

privatestringToXaml(objectpolygon,stringid)
{
StringBuildersb
=newStringBuilder();
//将数据库查询出的空间数据构造为SQLServer空间数据类型对象
vargeo=SqlGeography.STGeomFromText(
newSqlChars(
newSqlString(polygon.ToString())),4326);
//将空间数据构造为BingMaps图形(多边形)对象的Xaml文本,以返回到客户端直接解析Xaml为Silverlight程序中的对象。
for(intj=1;j<=geo.NumRings();j++)
{
if(geo.RingN(j).STNumPoints()>1)
{
sb.Append(
"<m:MapPolygonxmlns:m=/"clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl/"");
sb.Append(
"Fill=/"Red/"Locations=/"");
for(intk=1;k<=geo.RingN(j).STNumPoints();k++)
{
if(k>1)sb.Append("");
sb.Append(String.Format(
"{0:0.#####},{1:0.#####}",
(
double)geo.RingN(j).STPointN(k).Lat,
(
double)geo.RingN(j).STPointN(k).Long));
}
sb.AppendLine(
"/"/>");
}
}

returnsb.ToString();
}

  实际上,在服务端将空间数据转化为Xaml并非实现传递空间数据到客户端并解析呈现到GIS界面的唯一选择,还可以将数据库空间数据处理为KML、GML等常用的其它能够表示存储地图数据的任意格式返回到客户端使用。这里为何选择将空间数据解析为Xaml语言标记的目的是为了Silverlight能够直接将Xaml语言标记解析为对应的对象,并能够直接使用。如果选择将空间数据解析为别的地图数据格式,还需要额外的解析算法去实现空间数据的解析。

四、Bing Maps客户端的实现

  Bing Maps Silverlight客户端只需要调用上面提供的WCF Service接口,将空间数据查询到客户端,然后通过XamlReader的接口解析Xaml为对应的对象即可,可以在应用程序加载时就发起对接口的调用。如下代码块所示:

publicMainPage()
{
InitializeComponent();

//调用WCF服务接口查询空间数据到客户端
DataServiceClientservice=newDataServiceClient();
service.QueryPolygonsCompleted
+=newEventHandler<QueryPolygonsCompletedEventArgs>(service_QueryPolygonsCompleted);
service.QueryPolygonsAsync();
}
privatevoidservice_QueryPolygonsCompleted(objectsender,QueryPolygonsCompletedEventArgse)
{
if(e.Error!=null)return;

for(inti=0;i<e.Result.Count;i++)
{
//将空间数据所构造的Xaml语言标记解析为BingMapsSilverlightControl中的多边形(MapPolygon)对象。
MapPolygonpolygon=(MapPolygon)XamlReader.Load(e.Result[i].Xaml);
//将多边形对象添加到地图中呈现。
map.Children.Add(polygon);

}
}

      

四、相关资料

  [1]、数据表中使用空间数据类型:http://www.cnblogs.com/beniao/archive/2011/02/21/1959347.html

  [2]、几何实例上的OGC方法:http://msdn.microsoft.com/zh-cn/visualc/bb933960.aspx

  [3]、几何图形实例上的扩展方法:http://msdn.microsoft.com/zh-cn/library/bb933880.aspx

  [4]、OGC 静态几何图形方法:http://msdn.microsoft.com/zh-cn/library/bb933894.aspx

  [5]、Bing Maps开发系列博文:http://www.cnblogs.com/beniao/archive/2010/01/13/1646446.html

分享到:
评论

相关推荐

    SQLServr2019空间数据库应用系列12页.pdf

    本文将对 SQL Server 2019 空间数据库应用系列进行详细的知识点讲解,涵盖空间信息基础、空间数据、坐标系统、空间参考系统等重要概念。 空间信息基础 SQL Server 2019 提供了全面性的空间支持,允许组织通过具...

    sqlservr64.rar

    sqlservr64.rar sqlservr32.rar 3、进入SQL Server 2005的安装路径,进入MSSQL文件夹下面的Binn文件夹,在该文件夹里面搜索“sqlservr.exe”文件,并把它复制一份 【实例截图】 【核心代码】 sqlservr64 ├── sql...

    sqlservr32和sqlservr64.zip

    在Win8和Win10下安装SQL Server 2005时无法启动服务的解决办法,替换两个文件,亲测成功,sqlservr32.rar和sqlservr64.zip

    sqlservr32位与64位

    5、安装完成之后,如果想要打SP4补丁,去任务管理器找到sqlservr.exe进程,把它结束掉,把备份的sqlservr.exe文件还原回去,也就是替换回去(否则SP4安装程序以为你已经应用过SP4),然后就能打上SP4补丁了(即安装...

    sqlservr.exe和sqlos.dll

    5、安拆完成之后,往任务挨点器找到sqlservr.exe进程,把它竣事掉,把备份的sqlservr.exe文件借原归往,也就是交流归往(否则SP4安拆轨范觉得你已应用过SP4),然后即速挨上SP4补钉(即安拆已下载好的SP4更新轨范)...

    sqlservr.exe和sqlos.dll-WIN10版本-win10安装sql2005失败替换文件

    用友T3安装sql2005失败替换文件sqlservr.exe和sqlos.dll win10安装sqlserver时安装提示出错,需要再安装过程中替换文件, 安装过程中,当提示服务启动失败时,不要关闭此安装页面,找到~:\Program Files\Microsoft ...

    sqlservr替换.rar

    在win10中 安装SQL2005 安装到中途会无法继续进行下去, 需要选替换二个文件 找到 \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要替换的文件...

    sqlservr.exe和sqlos.dll 64和32位

    安装到SqlServer服务的时候提示启动服务失败,这里就是关键啦,下载本文的两个附件,里面是SP4(2005.90.5000.0)版本的sqlservr.exe和sqlos.dll。32位下载sqlservr32.rar,64位下载sqlservr64.rar。

    sqlservr64-win10安装2005替换文件.rar

    需要再安装过程中替换文件, 安装过程中,当提示服务启动失败时,不要关闭此安装页面,找到~:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要...

    sqlservr64.zip

    安装sqlser2005中途报错。需要替换两个文件,在执行重试即可完成安装(亲试有用),对我自己是有用的,那就5积分分享给铁子吧,压缩成ZIP格式了。

    sqlservr64.rar sqlservr32.rar

    2、下载本文的附件,sqlservr64.rar sqlservr32.rar 3、将下载的文件解压出sqlservr.exe和sqlos.dll两个文件,复制到Binn文件夹里面覆盖原文件(即点击替换)。 例如“C:\Program Files\MicrosoftSQLServer\MSSQL.2...

    sqlservr.exe和sqlos.dll win8-win10下安装sqlserver2005

    5、安拆完成之后,往任务挨点器找到sqlservr.exe进程,把它竣事掉,把备份的sqlservr.exe文件借原归往,也就是交流归往(否则SP4安拆轨范觉得你已应用过SP4),然后即速挨上SP4补钉(即安拆已下载好的S P4更新轨范...

    sqlservr64两文件.rar

    某些情况下,是不好用的,我就是其一,不过也许别人有用呢,放上来,1分来取吧 看着别人几十分的要,我下来了,但不好用,听说有些人是好用的,1分扔出来了

    sqlservr+sqlos.zip

    安装sqlserver2005时候,安装完成后,提示启动失败。 再次有教程,一步步按照教程操作,才能正常成功。 注:win10系统安装sqlserver2005时候,检测IIS总是过不去。原因:win10 IIS没有完全,注意是全部,完全安装...

    sqlservr.exe和sqlos.dll win8-win10下安装sqlserver2005 亲测成功

    我是win10家庭版升级的专业版,费了好大劲才安装成功。 安装方法全部在附件里的教程中。附带安装包和补丁包的下载链接及必须的两个文件。 建议下载后先看一遍教程再动手安装。

    sqlos.dll和sqlservr.exe win10安装sql server 2005 报错。

    win10安装SQL server 2005 报错 我是win10家庭版升级的专业版,费了好大劲才安装成功。 安装方法全部在附件里的教程中。附带安装包和补丁包的下载链接及必须的两个文件。 建议下载后先看一遍教程再动手安装。

    sqlos及sqlservr.zip

    在win10中 安装SQL2005 安装到中途会无法继续进行下去, 需要选替换二个文件 找到 \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要替换的文件...

    sqlservr约束.doc

    sqlservr约束.doc

    SQLServr优化.docx

    SQLServr优化.docx

Global site tag (gtag.js) - Google Analytics