关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight

    SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight

    2011-03-22 10:20:00 出处:ITJS
    分享

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

    本文示例基于Microsoft SQL Server 2008 R2调测。 具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验。 具有使用 Microsoft Visual Studio 进行 Microsoft .NET Framework开发的经验。 具有使用WCF、Silverlight、ADO.NET开发的经验。 熟悉或了解Microsoft SQL Server 2008中的空间数据类型。 具备相应(比如OGC)的GIS专业理论知识。

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

    一、准备空间数据

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

    CREATE TABLE DrawnPolygons(      [ID] [int] IDENTITY(1,1) NOT NULL,      [Name] [varchar](50) NOT NULL,      [Polygon] [geography] NOT NULL)  GO  对于上面脚本所创建的表格,随意的构造几条数据,如下图SQL Server Management Studio的空间结果中所呈现的效果。

    二、编写数据服务接口

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

    private DataTable Query(string sql)  {      string cstring = ConfigurationManager.ConnectionStrings["BingMapsDB"].ConnectionString;      SqlConnection conn = new SqlConnection(cstring);      if (conn.State == ConnectionState.Closed) conn.Open();      SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);      DataSet ds = new DataSet();      adapter.Fill(ds);      return ds.Tables[0];  }  直接在WCF中对外公布一个公共方法,并将其标记为操作契约(OperationContract)就完成了服务接口的提供,该接口实现数据库查询并将数据库数据数据组合为对象集合返回到客户端,详细实现如下代码块。

    [OperationContract]  public List QueryPolygons()  {      var sql = "SELECT  * FROM [DrawnPolygons]";       var result = Query(sql);      List areas = null;      if (result != null && result.Rows.Count > 0)      {          areas = new List();          foreach (DataRow row in result.Rows)          {              areas.Add(new DrawnPolygons              {                  ID = int.Parse(row["ID"].ToString()),                  Name = row["NAME"].ToString(),                  Xaml = ToXaml(row["Polygon"], row["ID"].ToString())              });          }      }      return areas;  }  接口使用了数据传输对象DrawnPolygons,其他结构如下定义:

    [DataContract]  public class DrawnPolygons  {      [DataMember]      public int ID { get; set; }      [DataMember]      public string Name { get; set; }      [DataMember]      public string Xaml { get; set; }  }   三、构造空间数据客户端对象

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

    private string ToXaml(object polygon,string id)  {      StringBuilder sb = new StringBuilder();      //将数据库查询出的空间数据构造为SQL Server空间数据类型对象      var geo = SqlGeography.STGeomFromText(                                  new SqlChars(                                  new SqlString(polygon.ToString())), 4326);      //将空间数据构造为Bing Maps图形(多边形)对象的Xaml文本,以返回到客户端直接解析Xaml为Silverlight程序中的对象。      for (int j = 1; j <= geo.NumRings(); j++)      {          if (geo.RingN(j).STNumPoints() > 1)          {              sb.Append(");              sb.Append(" Fill="Red" Locations="");              for (int k = 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(""/>");          }      }                   return sb.ToString();  }   实际上,在服务端将空间数据转化为Xaml并非实现传递空间数据到客户端并解析呈现到GIS界面的唯一选择,还可以将数据库空间数据处理为KML、GML等常用的其它能够表示存储地图数据的任意格式返回到客户端使用。这里为何选择将空间数据解析为Xaml语言标记的目的是为了Silverlight能够直接将Xaml语言标记解析为对应的对象,并能够直接使用。假如选择将空间数据解析为别的地图数据格式,还需要额外的解析算法去实现空间数据的解析。

    四、Bing Maps客户端的实现

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

    public MainPage()  {      InitializeComponent();            //调用WCF服务接口查询空间数据到客户端      DataServiceClient service = new DataServiceClient();      service.QueryPolygonsCompleted += new EventHandler(service_QueryPolygonsCompleted);      service.QueryPolygonsAsync();  }  private void service_QueryPolygonsCompleted(object sender, QueryPolygonsCompletedEventArgs e)  {      if (e.Error != null) return;       for (int i = 0; i < e.Result.Count; i++)      {          //将空间数据所构造的Xaml语言标记解析为Bing Maps Silverlight Control中的多边形(MapPolygon)对象。          MapPolygon polygon = (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

    原文链接:http://www.cnblogs.com/beniao/archive/2011/03/20/1963361.html

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。