SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据友情提示,您阅读本篇博文的先决条件如下:   1、本文示例基于Microsoft SQL Server 2008 R2调测。
原文: SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

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

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

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

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

  4、具备相应(比如OGC规范、KML规范)的GIS专业理论知识。

  5、GeoRss订阅技术以及其他相关知识。


  GeoRSS是一种描述和查明互联网内容所在物理位置的方法。通过使用GeoRSS,搜索Web站点或者与地理位置有关的项目就成为可能。GeoRSS利用地理标识语言(GML),即利用可扩展标记语言 (Extensible Markup Language, XML)存储和传输地理数据的方法。原始的GML模型以由World Wide Web联盟(W3C)所开发的资源描述框架(RDF)为基础。GML保持着RDF的许多特性,包括智能代理和一个用于描述和查询数据的标准语法。

  

  GeoRSS 是在 RSS 订阅源中包含地理空间数据时所用的一个标准,它定义了一种名为 GeoRSS GML 的特定格式,用来在订阅源中包含 GML 格式的数据。客户端应用程序可以订阅 GeoRSS 订阅源,订阅方式与订阅常规 RSS 订阅源相同。可以轻松地将 GeoRSS 格式的数据导入Microsoft Bing Maps、Google Maps中,同样也可以将空间数据库中的空间数据发布为GeoRss订阅后快速的在GIS中呈现,本篇将介绍如何基于微软Bing Maps for Silverlight中呈现GeoRss订阅的空间数据。

 

一、发布空间数据到GeoRss

   前一篇文章《SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息》介绍了如何将空间数据通过存储过程+HTTP请求接口发布为GeoRss的具体实现,这里就一笔带过,详细请查阅上篇博文。

 

二、创建GeoRss阅读器

  创建GeoRss阅读器的目的是为了动态的请求GeoRss地址,将GeoRss数据解析为自己想要的数据结构,如下便是根据自己的需求结合GeoRss定义的一种数据结构样例。

using  System.Collections.Generic;
using  Microsoft.Maps.MapControl;
namespace  GeoRss.Map.GeoRssUtils
{
    
public   class  GeoRssItem
    {
        
public   string  Title {  get set ; }
        
public   string  Description {  get set ; }
        
public   string  Link {  get set ; }
        
public   string  PubData {  get set ; }
        
public  LocationCollection Locatios {  get set ; }
    }
}

 

  核心原理就是使用WebClient动态的发起http请求,将返回的GeoRss数据通过Linq To XML的方式解析为对象结构的数据。其实现非常简单,不做具体分析,详细代码如下所示:
using  System.Collections.Generic;
using  System;
using  System.Net;
using  System.Xml.Linq;
using  System.Linq;
using  System.Windows;
using  Microsoft.Maps.MapControl;
namespace  GeoRss.Map.GeoRssUtils
{
    
public   delegate   void  DownloadGeoRssCompletedEventHandler(List < GeoRssItem >  items);

    
public   delegate   void  DownloadGeoRssExceptionEventHandler(Exception e);

    
public   class  GeoRssReader
    {
        
public  GeoRssReader()
        {
            wc 
=   new  WebClient();
            wc.DownloadStringCompleted 
+=  WebClientDownloadGeoRssCompleted;
        }

        
public  GeoRssReader(Uri uri)
            : 
this ()
        {
            
this .uri  =  uri;
        }

        
public  GeoRssReader(Uri uri, DownloadGeoRssCompletedEventHandler evh)
            : 
this (uri)
        {
            DownloadGeoRssCompleted 
+=  evh;
        }

        
public  Uri uri {  get set ; }

        
public   event  DownloadGeoRssCompletedEventHandler DownloadGeoRssCompleted;
        
public   event  DownloadGeoRssExceptionEventHandler DownloadGeoRssException;

        
public   void  ReadAsync()
        {
            
if  (DownloadGeoRssCompleted.Target  !=   null )
            {
                wc.DownloadStringAsync(uri);
            }
        }

        
#region  _private

        
private   readonly  WebClient wc;

        
private   void  WebClientDownloadGeoRssCompleted( object  sender, DownloadStringCompletedEventArgs e)
        {
            
try
            {
                XNamespace nsXml 
=   " http://www.w3.org/2005/Atom " ;
                XNamespace nsGeorss 
=   " http://www.georss.org/georss " ;
                XNamespace nsGeo 
=   " http://www.w3.org/2003/01/geo/wgs84_pos# " ;
                XNamespace nsMedia 
=   " http://search.yahoo.com/mrss/ " ;

                var items 
=  from item  in  XElement.Parse(e.Result).Descendants( " item " )
                            select 
new  GeoRssItem
                            {
                                Title 
=  (item.Element( " title " !=   null ?  item.Element( " title " ).Value :  null ,
                                Link 
=  (item.Element( " link " !=   null ?  item.Element( " link " ).Value :  null ,
                                Description 
=  (item.Element( " description " !=   null ?  item.Element( " description " ).Value :  null ,
                                PubData 
=  (item.Element( " pubDate " !=   null ?  item.Element( " pubDate " ).Value :  null ,
                                Locatios 
=  ParserLocations(XElement.Parse(item.LastNode.ToString().Replace( " : " " X " )).Value)
                            };
                 

                
if  (DownloadGeoRssCompleted.Method  !=   null )
                {
                    DownloadGeoRssCompleted.Invoke(items.ToList());
                }
            }
            
catch  (Exception ex)
            {
                
if  (DownloadGeoRssException.Method  !=   null )
                {
                    DownloadGeoRssException.Invoke(ex);
                }
                
else
                {
                    
throw ;
                }
            }
        }

        
private  LocationCollection ParserLocations( string  points)
        {
            LocationCollection lc 
=   new  LocationCollection();
            
string [] ps  =  points.Split( '   ' );
            
for  ( int  i  =   0 ; i  <  ps.Length; i += 2 )
            {
                lc.Add(
new  Location( double .Parse(ps[i]),  double .Parse(ps[i  +   1 ])));
            }
            
return  lc;
        }

        
#endregion

    }
}

 

三、基于SLBM呈现GeoRss数据

  引入Bing Maps Silverlight Control的控件库,定义一个专门的MapLayer图层来呈现GeoRss数据,其Silverlight前台的代码如下。

< Grid  x:Name ="LayoutRoot"  Background ="White" >
    
< map:Map  x:Name ="map"  Margin ="0,0,0,0"  CredentialsProvider =" {StaticResource MyCredentials} "  
            ScaleVisibility
="Visible"
            CopyrightVisibility
="Collapsed" >
        
< map:MapLayer  Name ="mlayer" ></ map:MapLayer >
    
</ map:Map >
</ Grid >

 

  应用程序加载的过程中使用上面所开发完成的GeoRss阅读器进行数据读取并解析,随后将结果呈现在Bing Maps Silverlight Control的应用中。代码如下:

public  MainPage()
{
    InitializeComponent();

    
string  url  =   " http://localhost:32484/SHBuildingGeoHandler.ashx " ;
    GeoRssReader reader 
=   new  GeoRssReader( new  Uri(url, UriKind.RelativeOrAbsolute));
    reader.DownloadGeoRssCompleted
+= new  DownloadGeoRssCompletedEventHandler(reader_DownloadGeoRssCompleted);
    reader.ReadAsync();
}

void  reader_DownloadGeoRssCompleted(List < GeoRssItem >  items)
{
    
// System.Diagnostics.Debug.WriteLine(items.Count);
     foreach  (var item  in  items)
    {
        MapPolygon mp 
=   new  MapPolygon();
        mp.Locations 
=  item.Locatios;
        mp.Fill 
=   new  SolidColorBrush(Colors.Red);
        
this .mlayer.Children.Add(mp);

    }
}

 

        

 

四、相关资料

  [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

 

  

 

版权说明

  本文属原创文章,欢迎转载且注明文章出处,其版权归作者和博客园共有。为了保存作者的创作热情,请在转载后的明显位置标记本文出处。  

  作      者:Beniao

 文章出处:http://beniao.cnblogs.com/  或  http://www.cnblogs.com/

 
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
11天前
|
SQL API 流计算
实时计算 Flink版产品使用合集之在Mac M1下的Docker环境中开启SQL Server代理的操作步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5天前
|
SQL 存储 搜索推荐
SQL server增删改查(1)
SQL server增删改查(1)
13 0
|
6天前
|
SQL 关系型数据库 数据库
阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】
本文探讨了Amazon RDS SQL Server版在云数据库中的优势,包括高可用性、可扩展性、管理便捷、安全性和成本效益。通过多可用区部署和自动备份,RDS确保数据安全和持久性,并支持自动扩展以适应流量波动。可视化管理界面简化了监控和操作,而数据加密和访问控制等功能保障了安全性。此外,弹性计费模式降低了运维成本。实战应用显示,RDS SQL Server版能有效助力企业在促销高峰期稳定系统并保障数据安全。阿里云的RDS SQL Server版还提供了弹性伸缩、自动备份恢复、安全性和高可用性功能,进一步优化性能和成本控制,并与AWS生态系统无缝集成,支持多种开发语言和框架。
37 2
|
6天前
|
SQL JSON atlas
实时计算 Flink版产品使用合集之SQL Server CDC是否支持抽取SQL Server视图
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
8天前
|
SQL 关系型数据库 MySQL
SQL基础开发与应用-课程及场景介绍
这是一门关于《SQL基础开发与应用》的课程介绍,主要针对数据库Clouder认证的第二阶段。课程以电商平台后端开发为背景,教授RDS for MySQL的SQL基础知识,包括存储过程、触发器和视图等高级特性,并指导学员使用Python进行数据库的增删改查操作。学习目标包括掌握SQL基础操作,了解RDS的高阶功能,并熟悉Python连接RDS进行数据处理。课程采用场景化教学,以跨境电商网站数据库搭建为例,帮助学员理解实际应用。
20 0
|
11天前
|
SQL 数据处理 API
实时计算 Flink版产品使用合集之遇到SQL Server锁表问题如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
16 0
|
12天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之当 SQL Server 源数据库中的数据更新后,CDC 吐出的操作(op)是怎样的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
14天前
|
SQL XML Linux
SQL Server的版本
【5月更文挑战第14天】SQL Server的版本
27 3
|
14天前
|
SQL 关系型数据库 数据管理
Microsoft SQL Server 是微软公司开发的一款关系型数据库管理系统
【5月更文挑战第14天】Microsoft SQL Server 是微软公司开发的一款关系型数据库管理系统
25 2
|
14天前
|
SQL 存储 数据库连接
LabVIEW与SQL Server 2919 Express通讯
LabVIEW与SQL Server 2919 Express通讯
14 0