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

SQL Servr 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储

 
阅读更多

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

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

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

  3、具有使用 Microsoft Visual Studio 进行 Microsoft .NET Framework开发的经验。

  4、具有使用WCF、Silverlight、ADO.NET开发的经验。

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

  6、具备相应(比如OGC)的GIS专业理论知识。


 

  在《SQL Servr 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现》一文中介绍了如何基于Bing Maps呈现SQL Server 2008中存储的空间数据,对于标准的地理空间数据可以通过数据导入的方式将其存放到数据库中(后续文章将详细介绍),对于一些非标准的空间数据或者说是一个软件产品中的业务空间数据,则需要通过人为或其他方式将其存储进数据库,本篇将以如何在Bing Maps(Silverlight)中动态绘制多边图形然后将其存储到SQL Server 2008的空间数据列中为例,详细介绍如何实现自定义图形存储入库的实现方式和原理。

一、创建空间数据表

  首先创建空间数据类型字段表,以存储在Bing Maps(Silverlight)中动态绘制的多边形图形数据到空间数据列。

CREATETABLE[dbo].[DrawnPolygons](
[ID][int]IDENTITY(1,1)NOTNULL,
[Name][varchar](50)NOTNULL,
[Polygon][geography]NOTNULL)
GO

二、编写入库存储过程

  目前Linq To Sql和ASP.NET Entity Framework都不支持SQL Server 2008的空间数据类型,前台只能通过字符串或者对象的形式将数据传递到后台服务端,然后通过调用存储过程,在存储过程中对空间数据的字符串进行空间数据对象转换,然后入库。针对上面所创建的空间数据表可以创建如下存储过程来实现多边形空间数据的入库存储。

SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATEPROCEDURE[dbo].[SavePolygon]
(
@namevarchar(50),
@polytextvarchar(max),
@identityintOUTPUT
)
AS
INSERTINTOdbo.DrawnPolygons
(Name,Polygon)
VALUES(@name,geography::STPolyFromText(@polytext,4326))
SET@identity=@@Identity

RETURN

三、编写服务接口

  入库接口可以采用WebService或者WCF技术提供,本篇采用WCF作为数据操作接口技术,Linq To Sql做数据访问,自定义方法调用存储过程实现数据库入库操作。

  在项目中添加Linq To Sql文件,然后打开对于的代码隐藏文件,在Linq To Sql自动生产的创建数据库连接的代码下面添加如下自定义方法实现数据库存储过程的调用。

[Function(Name="dbo.SavePolygon")]
publicintSavePolygon([Parameter(DbType="VarChar(50)")]stringname,
[Parameter(DbType
="VarChar(MAX)")]stringpolygontext,
[Parameter(DbType
="Int")]refSystem.Nullable<int>identity)
{
IExecuteResultresult
=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())),name,polygontext,identity);
identity
=((System.Nullable<int>)(result.GetParameterValue(2)));
return((int)(result.ReturnValue));
}

  如上实现了Linq To Sql对存储过程的调用,接下来就是创建WCF服务提供给Silverlight调用。

[ServiceContract]
publicinterfaceIDrawService
{
///<summary>
///保存多边形对象到空间数据库
///</summary>
///<paramname="name"></param>
///<paramname="arrayOfLatLong"></param>
///<returns></returns>
[OperationContract]
int?SavePolygon(stringname,List<MapPoint>arrayOfLatLong);
}

  在WCF服务的详细实现中将Bing Maps客户端传递过来的参数构造为空间数据类型的WKT文本格式,通过上面的存储过程就可以直接将WKT转化为空间数据类型直接入库。

publicclassDrawService:IDrawService
{
publicint?SavePolygon(stringname,List<MapPoint>arrayOfLatLong)
{
varsb
=newStringBuilder();
sb.Append(
"POLYGON((");

for(vari=arrayOfLatLong.Count;i>=1;i--)
{
varj
=i-1;
sb.Append(arrayOfLatLong[j].Longitude.ToString());
sb.Append(
"");
sb.Append(arrayOfLatLong[j].Latitude.ToString());
sb.Append(
",");
}

sb.Remove(sb.Length
-1,1);
sb.Append(
"))");

int?identity=0;

varconnectionString
=ConfigurationManager.ConnectionStrings["Sql08ConnectionString"].ConnectionString;
BMPTSDataContextctx
=newBMPTSDataContext(connectionString);
ctx.SavePolygon(
"西南大区",sb.ToString(),refidentity);

returnidentity;
}
}

  接口中使用的数据传输对象MapPoint的详细定义如下代码块:

///<summary>
///地图坐标点(经度,纬度)
///</summary>
[DataContract]
publicclassMapPoint
{
[DataMember]
publicdoubleLatitude{get;set;}
[DataMember]
publicdoubleLongitude{get;set;}

publicMapPoint(){}
publicMapPoint(doublelat,doublelng)
{
this.Latitude=lat;
this.Longitude=lng;
}
}

四、Bing Maps客户端的实现

  客户端的实现非常简单,首先创建Silverlight应用程序并添加Bing Maps Silverlight Control开发组件的引用,其次在界面中添加Map对象以显示Bing Maps原型界面,最后可以设计一个小的工具面板,以按钮的方式驱动触发绘制多边形的行为,以及保存图形到数据库的命令请求。如下界面效果:  

        

  对于绘制多边形的算法这里鉴于篇幅限制就不一一贴出来了,详细可通过文末提供的代码下载链接下载本文的示例代码。比如限制绘制一个【成都-重庆-贵阳-昆明】这四个城市组成的西南大区多变型图形,并将其图形数据以空间数据的形式存储到SQL Server 2008中。图形如下图所示:

        

  通过点击“保存数据”按钮则将地图界面绘制的图形数据取出来构造为数组传递到WCF服务接口,调用数据库存储过程实现数据入库操作,下面是保存按钮的代码实现。

privatevoidbtnSave_Click(objectsender,RoutedEventArgse)
{
LocationCollectionlc
=this._drawLine.Locations;

ObservableCollection
<MapPoint>polygon=newObservableCollection<MapPoint>();
for(inti=0;i<lc.Count;i++)
{
polygon.Add(
newMapPoint{Longitude=lc[i].Longitude,Latitude=lc[i].Latitude});
}

//调用WCF接口实现数据入库
DrawServiceClientclient=newDrawServiceClient();
client.SavePolygonAsync(
this.tbName.Text.Trim(),polygon);
client.SavePolygonCompleted
+=client_SavePolygonCompleted;
}

privatevoidclient_SavePolygonCompleted(objectsender,SavePolygonCompletedEventArgse)
{
if(e.Error!=null)
{
this.tbResult.Text=e.Result.Value>0?"保存成功!":"保存失败";
}
}

五、数据库中的空间数据

  当通过Bing Maps中动态绘制多边形图形对象,然后将图形数据通过WCF服务接口入库保存后,可以通过SQL Server Management Studio查询并在空间数据结果中直接预览结果。

SELECT[ID],[Name],[Polygon]FROM[dbo].[DrawnPolygons]

        

六、相关资料

  [1]、Geography数据类型:http://msdn.microsoft.com/zh-cn/library/cc280766.aspx

  [2]、地域实例上的OGC方法:http://msdn.microsoft.com/zh-cn/library/bb933917.aspx

  [3]、地理实例上的扩展方法:http://msdn.microsoft.com/zh-cn/library/bb933968.aspx

  [4]、OGC静态地理方法:http://msdn.microsoft.com/zh-cn/library/bb933988.aspx

  [5]、扩展静态地理方法:http://msdn.microsoft.com/zh-cn/library/bb933921.aspx

七、示例代码下载

  

分享到:
评论

相关推荐

    SQLServr2019空间数据库应用系列12页.pdf

    本文将对 SQL Server 2019 空间数据库应用系列进行详细的知识点讲解,涵盖空间信息基础、空间数据、坐标系统、空间参考系统等重要概念。 空间信息基础 SQL Server 2019 提供了全面性的空间支持,允许组织通过具...

    sqlservr64.rar

    sqlservr64.rar sqlservr32.rar 3、进入SQL Server 2005的安装路径,进入MSSQL文件夹下面的Binn文件夹,在该文件夹里面搜索“sqlservr.exe”文件,并把它复制一份 【实例截图】 【核心代码】 sqlservr64 ├── sql...

    sqlservr32和sqlservr64.zip

    在Win8和Win10下安装SQL Server 2005时无法启动服务的解决办法,替换两个文件,亲测成功,sqlservr32.rar和sqlservr64.zip

    sqlservr32位与64位

    5、安装完成之后,如果想要打SP4补丁,去任务管理器找到sqlservr.exe进程,把它结束掉,把备份的sqlservr.exe文件还原回去,也就是替换回去(否则SP4安装程序以为你已经应用过SP4),然后就能打上SP4补丁了(即安装...

    sqlservr.exe和sqlos.dll

    5、安拆完成之后,往任务挨点器找到sqlservr.exe进程,把它竣事掉,把备份的sqlservr.exe文件借原归往,也就是交流归往(否则SP4安拆轨范觉得你已应用过SP4),然后即速挨上SP4补钉(即安拆已下载好的SP4更新轨范)...

    sqlservr.exe和sqlos.dll-WIN10版本-win10安装sql2005失败替换文件

    用友T3安装sql2005失败替换文件sqlservr.exe和sqlos.dll win10安装sqlserver时安装提示出错,需要再安装过程中替换文件, 安装过程中,当提示服务启动失败时,不要关闭此安装页面,找到~:\Program Files\Microsoft ...

    sqlservr替换.rar

    在win10中 安装SQL2005 安装到中途会无法继续进行下去, 需要选替换二个文件 找到 \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要替换的文件...

    sqlservr.exe和sqlos.dll 64和32位

    安装到SqlServer服务的时候提示启动服务失败,这里就是关键啦,下载本文的两个附件,里面是SP4(2005.90.5000.0)版本的sqlservr.exe和sqlos.dll。32位下载sqlservr32.rar,64位下载sqlservr64.rar。

    sqlservr64-win10安装2005替换文件.rar

    需要再安装过程中替换文件, 安装过程中,当提示服务启动失败时,不要关闭此安装页面,找到~:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要...

    sqlservr64.zip

    安装sqlser2005中途报错。需要替换两个文件,在执行重试即可完成安装(亲试有用),对我自己是有用的,那就5积分分享给铁子吧,压缩成ZIP格式了。

    sqlservr64.rar sqlservr32.rar

    2、下载本文的附件,sqlservr64.rar sqlservr32.rar 3、将下载的文件解压出sqlservr.exe和sqlos.dll两个文件,复制到Binn文件夹里面覆盖原文件(即点击替换)。 例如“C:\Program Files\MicrosoftSQLServer\MSSQL.2...

    sqlservr.exe和sqlos.dll win8-win10下安装sqlserver2005

    5、安拆完成之后,往任务挨点器找到sqlservr.exe进程,把它竣事掉,把备份的sqlservr.exe文件借原归往,也就是交流归往(否则SP4安拆轨范觉得你已应用过SP4),然后即速挨上SP4补钉(即安拆已下载好的S P4更新轨范...

    sqlservr64两文件.rar

    某些情况下,是不好用的,我就是其一,不过也许别人有用呢,放上来,1分来取吧 看着别人几十分的要,我下来了,但不好用,听说有些人是好用的,1分扔出来了

    sqlservr.exe和sqlos.dll win8-win10下安装sqlserver2005 亲测成功

    我是win10家庭版升级的专业版,费了好大劲才安装成功。 安装方法全部在附件里的教程中。附带安装包和补丁包的下载链接及必须的两个文件。 建议下载后先看一遍教程再动手安装。

    sqlservr+sqlos.zip

    安装sqlserver2005时候,安装完成后,提示启动失败。 再次有教程,一步步按照教程操作,才能正常成功。 注:win10系统安装sqlserver2005时候,检测IIS总是过不去。原因:win10 IIS没有完全,注意是全部,完全安装...

    sqlos.dll和sqlservr.exe win10安装sql server 2005 报错。

    win10安装SQL server 2005 报错 我是win10家庭版升级的专业版,费了好大劲才安装成功。 安装方法全部在附件里的教程中。附带安装包和补丁包的下载链接及必须的两个文件。 建议下载后先看一遍教程再动手安装。

    sqlos及sqlservr.zip

    在win10中 安装SQL2005 安装到中途会无法继续进行下去, 需要选替换二个文件 找到 \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要替换的文件...

    sqlservr存储图片.doc

    sqlservr存储图片.doc

    sqlservr约束.doc

    sqlservr约束.doc

Global site tag (gtag.js) - Google Analytics