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

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

  

分享到:
评论

相关推荐

    Python库 | georss_client-0.3.tar.gz

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

    Google Maps API高级编程

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

    Google Maps API.pdf

    – HelloWorld程序,Maps控件,事件处理,信息窗口,层,点、折线以及多 边型等 • 高级功能简介 – 异步HTTP通讯:GXmlHttp, GDownloadUrl – 创建自己的控件:控件子类化 – 地址定位 • 最新功能 – KML与GeoRSS...

    Python库 | georss_client-0.8.tar.gz

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

    georuby:这旨在作为几何数据的持有者。 数据模型大致遵循OGC

    数据模型大致遵循 OGC“SQL 的简单功能”规范,因此它应该可以很好地处理从 PostGIS 或任何空间扩展(MongoDB、MySQL...)返回的数据。 它还支持各种输出和输入格式(GeoRSS、KML、Shapefile)。 GeoRuby 是用纯 ...

    PyPI 官网下载 | aio_georss_gdacs-0.2b2-py3-none-any.whl

    资源来自pypi官网。 资源全名:aio_georss_gdacs-0.2b2-py3-none-any.whl

    esri公司的ArcGIS Server超级学习模板程序(for .net)

    esri官方在08年最后一天放出了一个例子程序:Map Viewer,不同于开发环境中模板程序web mapping application,这个名为viewer的程序涵盖了更多方面,包括:打印,输出图片,添加georss,动态上传并添加本地数据,...

    python-georss-ingv-centro-nazionale-terremoti-client:方便访问INGV国家地震中心(地震)提要的图书馆

    python-georss-ingv-centro-nazionale-terremoti-client 该库可方便地访问。安装pip install georss-ingv-centro-nazionale-terremoti-client 用法有关如何使用此库的示例,请参见下文。 实例化提要类并提供所需的...

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

    资源来自pypi官网。 资源全名:georss_qld_bushfire_alert_client-0.3.tar.gz

    shp2GeoRss-开源

    shp2georss:将esri形状文件转换为GeoRSS,可以在Virtual Earth,Yahoo map,Google Map中查看,由美国国家科学基金会赞助,爱达荷州立大学,由Joe Window在爱达荷州立大学MapWindow软件实验室开发

    featureserver:FeatureServer 作为 OGC web 要素服务和过滤编码 Python 服务器

    ___ _ ___ | __|__ __ _| |_ _ _ _ _ ___/ __| ___ _ ___ _____ _ _ | _/ -_) _` | _| || | '_/ -_... 将其用作翻译器:使用 OGR 数据源加载 shapefile 并在 Google 地球中打开它。 数据源(存储) 数据源 描述 数据

    datawiki:DataWiki-用于...数据的Wiki!

    数据维基你好! 欢迎来到DataWiki项目页面:) DataWiki在Google AppEngine for Java平台上运行,因此也可以在专用网络上运行,也可以在现场在笔记本电脑上离线运行。 DataWiki具有下面列出的设计和功能,目前正在开发...

    Introduction to Neogeography

     Learn what existing and emerging standards such as GeoRSS, KML, and Microformats mean; how to add dynamic maps and locations to your web site; how to pinpoint the locations of your online visitors; ...

    gisgraphy:地理编码和地理本地化Web服务,用于地理名称,Openstreetmap,Openaddresses,Tiger和quattroshapes数据

    因为没有数据就可以进行地理编码,所以它提供了一个易于使用的导入程序,可以自动将必要的(免费)数据下载并导入到本地数据库( , , 和 :超过1亿个条目)。 您还可以使用Web界面或提供的导入器连接器添加自己的...

    Geoserver Beginner`s Guide

    Server Status 57 Locks 58 Connections 58 Memory Usage 58 JVM Version and fonts 58 JAI usage and configurations 58 Update Sequence 58 Resource Cache 59 Configuration and catalog 59 GeoServer Logs 59 ...

    geoPHP:PHP中的高级几何运算

    它可以读写各种格式:WKT(包括EWKT),WKB(包括EWKB),GeoJSON,KML,GPX和GeoRSS。 它适用于所有简单特征几何体(点,线串,多边形,GeometryCollection等),并且可以用于获取质心,边界框,面积以及各种其他...

    arcgis server

    1.4.2 在mxml 文档中嵌入 ActionScript.................................................................................. 11 1.4.3 QueryTask .................................................................

    pinpoi:导入和管理兴趣点

    您可以将 Google KML和KMZ 、TomTom OV2 、简单的 GeoRSS、Garmin GPX 、Navigon ASC、 CSV和压缩的收藏直接导入您的手机,并将它们组织在收藏中。 PinPoi 使用您的 GPS 位置或自定义位置(位置地址或 Plus 代码)...

    mapping:OpenBroadcaster基础结构状态事件EAS NAAD NOAA

    映射描述在地图上显示NAAD和NOAA的公共警报映射作为一个独立的应用程序运行,并遵循OpenBroadcaster模块框架以允许集成到。 国家警报汇总和发布(NAAD) 提要提供由加拿大授权政府机构发布的实时主动公共安全消息...

Global site tag (gtag.js) - Google Analytics