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

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定义的一种数据结构样例。

usingSystem.Collections.Generic;
usingMicrosoft.Maps.MapControl;
namespaceGeoRss.Map.GeoRssUtils
{
publicclassGeoRssItem
{
publicstringTitle{get;set;}
publicstringDescription{get;set;}
publicstringLink{get;set;}
publicstringPubData{get;set;}
publicLocationCollectionLocatios{get;set;}
}
}

  核心原理就是使用WebClient动态的发起http请求,将返回的GeoRss数据通过Linq To XML的方式解析为对象结构的数据。其实现非常简单,不做具体分析,详细代码如下所示:

usingSystem.Collections.Generic;
usingSystem;
usingSystem.Net;
usingSystem.Xml.Linq;
usingSystem.Linq;
usingSystem.Windows;
usingMicrosoft.Maps.MapControl;
namespaceGeoRss.Map.GeoRssUtils
{
publicdelegatevoidDownloadGeoRssCompletedEventHandler(List<GeoRssItem>items);

publicdelegatevoidDownloadGeoRssExceptionEventHandler(Exceptione);

publicclassGeoRssReader
{
publicGeoRssReader()
{
wc
=newWebClient();
wc.DownloadStringCompleted
+=WebClientDownloadGeoRssCompleted;
}

publicGeoRssReader(Uriuri)
:
this()
{
this.uri=uri;
}

publicGeoRssReader(Uriuri,DownloadGeoRssCompletedEventHandlerevh)
:
this(uri)
{
DownloadGeoRssCompleted
+=evh;
}

publicUriuri{get;set;}

publiceventDownloadGeoRssCompletedEventHandlerDownloadGeoRssCompleted;
publiceventDownloadGeoRssExceptionEventHandlerDownloadGeoRssException;

publicvoidReadAsync()
{
if(DownloadGeoRssCompleted.Target!=null)
{
wc.DownloadStringAsync(uri);
}
}

#region_private

privatereadonlyWebClientwc;

privatevoidWebClientDownloadGeoRssCompleted(objectsender,DownloadStringCompletedEventArgse)
{
try
{
XNamespacensXml
="http://www.w3.org/2005/Atom";
XNamespacensGeorss
="http://www.georss.org/georss";
XNamespacensGeo
="http://www.w3.org/2003/01/geo/wgs84_pos#";
XNamespacensMedia
="http://search.yahoo.com/mrss/";

varitems
=fromiteminXElement.Parse(e.Result).Descendants("item")
select
newGeoRssItem
{
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(Exceptionex)
{
if(DownloadGeoRssException.Method!=null)
{
DownloadGeoRssException.Invoke(ex);
}
else
{
throw;
}
}
}

privateLocationCollectionParserLocations(stringpoints)
{
LocationCollectionlc
=newLocationCollection();
string[]ps=points.Split('');
for(inti=0;i<ps.Length;i+=2)
{
lc.Add(
newLocation(double.Parse(ps[i]),double.Parse(ps[i+1])));
}
returnlc;
}

#endregion

}
}

三、基于SLBM呈现GeoRss数据

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

<Gridx:Name="LayoutRoot"Background="White">
<map:Mapx:Name="map"Margin="0,0,0,0"CredentialsProvider="{StaticResourceMyCredentials}"
ScaleVisibility
="Visible"
CopyrightVisibility
="Collapsed">
<map:MapLayerName="mlayer"></map:MapLayer>
</map:Map>
</Grid>

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

publicMainPage()
{
InitializeComponent();

stringurl="http://localhost:32484/SHBuildingGeoHandler.ashx";
GeoRssReaderreader
=newGeoRssReader(newUri(url,UriKind.RelativeOrAbsolute));
reader.DownloadGeoRssCompleted
+=newDownloadGeoRssCompletedEventHandler(reader_DownloadGeoRssCompleted);
reader.ReadAsync();
}

voidreader_DownloadGeoRssCompleted(List<GeoRssItem>items)
{
//System.Diagnostics.Debug.WriteLine(items.Count);
foreach(variteminitems)
{
MapPolygonmp
=newMapPolygon();
mp.Locations
=item.Locatios;
mp.Fill
=newSolidColorBrush(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

  

分享到:
评论

相关推荐

    IDV位置定位产品解决方案介绍.pptx

    3. **Visual Fusion Connectors**:这是一个强大的数据连接器集合,能够快速接入多种数据源,如SQL Server、Oracle、ArcSDE、KML、GeoRSS文件、Bing Maps服务等。 4. **Visual Fusion SDK**:为开发者提供了高级...

    SuperMap iServer Java整体介绍

    - 多源数据集成与管理:支持多种数据格式,如Oracle、SQL Server、Sybase等数据库。 - 跨平台支持:不仅支持Windows操作系统,还支持Linux等其他操作系统。 - 远程访问能力:允许用户通过互联网进行远程操作,...

    Google Maps API.pdf

    Google Maps API 是一种强大的工具集,它允许开发者在自己的网站或应用中嵌入并定制 Google 地图。该 API 提供了一系列的功能,使得开发者能够轻松地与地图交互,并在地图上展示各种数据。 **基本功能:** - **版本...

    IDV位置定位产品解决方案介绍.pdf

    3. Visual Fusion Connectors:这是一组强大的数据连接器,支持快速读取各种数据源,如SQL Server、Oracle、ESRI ArcSDE、KML、GeoRSS、Bing Maps等。 4. Visual Fusion SDK:提供给开发者进行二次开发的工具包,...

    Python库 | georss_client-0.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:georss_client-0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    WebGIS考试参考试题.docx

    - **XML**(可扩展标记语言):一种用于标记数据的标准,广泛应用于WebGIS领域中的数据交换和存储。 - **瘦客户端胖服务器端、胖客户端瘦服务器端和混合式**:不同的Internet GIS实现模式,其中胖客户端模式意味着...

    openlayers使用地图数据.pdf

    OpenLayers 是一个强大的开源JavaScript库,专门用于在Web应用程序中展示和操作地理空间数据。它遵循行业标准,如OpenGIS的WMS(Web Map Service)和WFS(Web Feature Service)规范,允许开发者轻松地集成来自多种...

    WebGIS考试参考试题.pdf

    4. GeoRSS:是一种基于RSS的格式,添加了空间描述标签,用于描述地理空间数据。 5. RESTful Web服务:是一种基于HTTP和URL的Web服务调用方式。 6. WMS(Web Map Service)是一种web服务标准,用于制作和发布GIF、...

    PyPI 官网下载 | georss_qld_bushfire_alert_client-0.3.tar.gz

    对于实际的开发工作,了解如何正确处理GeoRSS数据、理解警报级别和响应机制、以及如何将这些信息整合到应用中都是非常关键的知识点。同时,熟悉Python的面向对象编程和错误处理也是使用这类库时需要具备的基础技能。

    WebGIS考试参考试题 (1).docx

    根据提供的文档内容,我们可以整理并深入探讨以下几个关键的知识点:...以上内容总结了WebGIS的基础概念、关键技术、开发工具以及当前的研究前沿和发展趋势,对于理解WebGIS及其在地理信息系统中的应用有着重要的意义。

    geoserver配置及openlayers应用[汇编].pdf

    - **新建数据集**:在管理界面中,选择“工作空间”,然后创建新的数据集,指向你的地图文件。 - **新建Feature Type**:在数据集中定义Feature Type,这代表地图中的特定对象,如城市、河流等。 4. **OpenLayers...

    FlexViewer2.5源码_例子_api

    FlexViewer2.5是ArcGIS桌面应用程序的一个轻量级、基于Web的开发框架,它允许开发者构建交互式地图应用,提供了丰富的地图操作和可视化功能。这个压缩包包含了FlexViewer2.5的源代码、示例以及相关的API文档,旨在...

    Google Maps API高级编程

    ├─06 Google Maps API高级编程 │ ├─6.1 GPolyline折线对象和GPolygon多边形对象 │ │ ├─6.1.1 使用GPolyline折线对象 │ │ ├─6.1.2 使用GPolygon多边形对象 │ │ ├─6.1.4 使用GPolyline和GPolygon的...

    ArcGIS Flex API 中的 Flex 技-xml解析

    示例代码来自`GeoRSSUtil.as`类,该类提供了一系列方法来解析GeoRSS格式的XML数据,其中`toGeometry`方法是核心,用于将XML中的地理坐标转换为`Geometry`对象。 ##### 4.2 `toGeometry`方法详解 - **GEOWGS命名...

    WebGIS考试参考试题.doc

    本试卷涉及了多个WebGIS相关的知识点,包括早期的代表性系统、地理元数据、Web服务标准、GIS软件应用、Web应用系统的架构以及电子政务的应用模式等。 1. 早期的WebGIS系统:题目中提到了加拿大国家地图信息服务部、...

    ArcGIS_Explorer开发及ArcGIS_Online应用模式

    在ESRI 2008用户大会上,针对ArcGIS Explorer的开发及其在线应用模式进行了详细介绍。ArcGIS Explorer是一款由Esri提供的强大且灵活的地理信息系统(GIS)客户端工具,它支持用户进行地图浏览、数据查看以及简单的空间...

    WebGIS考试参考试题-(1).docx

    - ArcGIS Desktop是一系列整合的应用程序集合,如ArcCatalog、ArcMap、ArcGlobe等,这些工具可以帮助用户管理和分析地理数据。 ### WebGIS新兴技术 1. **Cloud GIS**: - 概念:云GIS是将云计算技术应用于地理...

    webgis参考资料

    ### WebGIS核心概念与知识点详解 ...传感器网络是由大量分布在空间中的自动设备组成的网络,用于收集环境或其他目标对象的数据,是物联网(IoT)的重要组成部分,在环境监测、智能交通等领域有着广泛应用。

    openlayers资料收集

    OpenLayers 支持多种数据源,包括但不限于 WMS、WFS、Google Maps API、Bing Maps API、WorldWind 等。这意味着开发者可以根据需求选择最适合的数据源。 #### 三、OpenLayers源码分析 **1. 源码结构** - **Base...

    ArcGIS Server 9.2帮助文档翻译(9)Writing a Custom Task

    - 在Eclipse IDE中创建一个新的web应用项目,命名为“georss”。 - **具体实现**: - **创建Java类**:在`demo`包下创建名为`GeoRSSTask`的Java类。 - `set/getGeorssURL`:用于获取和设置GeoRSS地址。 - `...

Global site tag (gtag.js) - Google Analytics