Bing Maps开发扩展:Oracle Spatial的空间数据渲染

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:
Oracle Spatial的空间数据应用和微软SQL Server 2008的大同小异,SQL Server 2008提供了基于SQLCLR的编程支持,Oracle Spatial暂时还没有比较完善的组件支持。在实际开发应用中我们可以选择折中的解决方案,比如将空间数据读取为通用的空间数据表达格式(如:WKT),利用开源的WKT读取组件便可将WKT数据解析为对应的空间数据坐标点或坐标集合。

 

下面以一个实际的案例来介绍如何读取Oracle Spatial数据为WKT,并通过WKT组件解析数据,最终在Bing Maps中进行渲染。现要实现将数据库中地市表配置的全国地市数据中四川省的数据读取出来在地图中进行渲染,Oracle Spatial的sdo_geometry数据类型则可以直接使用函数(get_wkt())进行转换为clob数据类型数据。

select t.areacode,t.areaname, (t.area.get_wkt()) wkt from areainfo t where areacode like '8623%' 

 

为了方便客户端的使用,服务端可以通过WCF服务封装数据为数组返回,以下为地市实体对象数据结构和WCF服务的定义。 

namespace OracleSpatial.DataService.Models
{
    [DataContract]
     public  class AreaInfo
    {
        [DataMember]
         public  string AreaCode {  getset; }
        [DataMember]
         public  string AreaName {  getset; }
        [DataMember]
         public  string WKT {  getset; }
    }

} 

namespace OracleSpatial.DataService
{
    [ServiceContract]
     public  interface IGeometryService
    {
        [OperationContract]
        List<AreaInfo> GetAreaInfo();
    }

}

Bing Maps的Silverlight客户端调用WCF服务以获取数据库中的数据,这里就不做详细介绍。在这里需要特别介绍的是几个开源应用:

1、SharpMap开源的GeoAPI.

2、NetTopologySuite. 

 

这两个开源库分别定义好了不同GIS坐标系的空间标准,以及基于地理空间的空间对象、空间计算和空间分析接口,在应用开发中可以非常方便的完成空间数据的读写、验证、计算和分析功能。本文使用到了WKT读取组件(WKTReader),可以实现将WKT格式的字符串解析为符合GIS坐标系标准的通用空间对象(Geometry),此空间对象中就包含了完整的WKT数据的描述,如WKT所表示的坐标点,坐标点集合,内部坐标点,空间面积等等。

public MainPage()
{
    InitializeComponent();
     this.Loaded += (sender, e) =>
        {
            LoadChinaMap();
            GeometryServiceClient service =  new GeometryServiceClient();
            service.GetAreaInfoCompleted += service_GetAreaInfoCompleted;
            service.GetAreaInfoAsync();
        };
}

private  void service_GetAreaInfoCompleted( object sender, GetAreaInfoCompletedEventArgs e)
{
     if (e.Error ==  null)
    {
        ObservableCollection<AreaInfo> result = e.Result;
        WKTReader reader = reader =  new WKTReader();
        IGeometry geometry = reader.Read(result[ 0].WKT);
    }

}

 

       通过WKTReader将WKT格式的空间数据解析为IGeometry接口的空间对象,就可以非常方便的获取WKT空间数据中的各种坐标值。如果上面所获取到的数据,我们就可以通过绘制多边形以及通过自定义标注将数据渲染在地图中。

private void service_GetAreaInfoCompleted(object sender, GetAreaInfoCompletedEventArgs e)

{
     if (e.Error ==  null)
    {
        ObservableCollection<AreaInfo> result = e.Result;
        WKTReader reader =  null;
         foreach ( var item  in result)
        {
            reader =  new WKTReader();
            IGeometry geometry = reader.Read(item.WKT);

             // 边界
            MapPolygon line =  new MapPolygon();
            line.Locations = CoordinateConvertor.CoordinatesToLocationCollection(geometry.Coordinates);
            line.Fill =  new SolidColorBrush(Colors.Gray);
            line.BorderBrush =  new SolidColorBrush(Colors.Green);
            line.BorderThickness =  new Thickness( 2);
            line.MouseEnter +=  new MouseEventHandler(line_MouseEnter);
            line.MouseLeave +=  new MouseEventHandler(line_MouseLeave);
             this.mlayer.Children.Add(line);

             // 名称标注
             this.mlayer.AddChild( new PointControl(item.AreaName), 
                 new Microsoft.Maps.MapControl.Location(geometry.InteriorPoint.Y, geometry.InteriorPoint.X));
        }
    }
}

private  void line_MouseLeave( object sender, MouseEventArgs e)
{
    MapPolygon mp = sender  as MapPolygon;
    mp.Fill =  new SolidColorBrush(Colors.Gray);
            
}

private  void line_MouseEnter( object sender, MouseEventArgs e)
{
    MapPolygon mp = sender  as MapPolygon;
    mp.Fill =  new SolidColorBrush(Colors.Yellow);
}

 

 





本文转自 beniao 51CTO博客,原文链接:http://blog.51cto.com/beniao/721716,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
3月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
3月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的还原数据
Oracle数据库中的还原数据(也称为undo数据或撤销数据)存储在还原表空间中,主要用于支持查询的一致性读取、实现闪回技术和恢复失败的事务。文章通过示例详细介绍了还原数据的工作原理和应用场景。
【赵渝强老师】Oracle的还原数据
|
4月前
|
Oracle 关系型数据库 数据库
oracle数据创建同义词
oracle数据创建同义词
72 0
|
6月前
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
104 0
|
6月前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
124 0
|
6月前
|
SQL Oracle 关系型数据库
Oracle误删数据怎么恢复?
Oracle误删数据怎么恢复?
76 0
|
6月前
|
SQL Oracle Java
实时计算 Flink版产品使用问题之采集Oracle数据时,为什么无法采集到其他TABLESPACE的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
分布式计算 Oracle 关系型数据库
实时计算 Flink版产品使用问题之获取Oracle的数据时无法获取clob类型的数据,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

推荐镜像

更多