彩票走势图

silverlight做一个地图应用

转帖|其它|编辑:郝浩|2011-02-18 12:04:31.000|阅读 1749 次

概述:第一步,把shp文件导入到sqlserver里。在这里,我使用了sharpmap的库,非常之简单,一下子就导入进去了。导入进去表里,有四个字段,分别记录了一个矢量图形的上下左右四个顶点。在展示地图的时候,通过where语句,把在视野内的矢量对象读取出来就可以了。好么,这个彻底摧毁了我对空间数据库的神秘感,我甚至怀疑这是不是太山寨了。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  第一步,把shp文件导入到sqlserver里。在这里,我使用了sharpmap的库,非常之简单,一下子就导入进去了。导入进去表里,有四个字段,分别记录了一个矢量图形的上下左右四个顶点。在展示地图的时候,通过where语句,把在视野内的矢量对象读取出来就可以了。好么,这个彻底摧毁了我对空间数据库的神秘感,我甚至怀疑这是不是太山寨了。

  说到这里,我估计大家谁都会读取地图数据了.下一步,把读出来的矢量数据传给silverlight.这个也简单,webclient,轻松加愉快,不再废话。

  然后,由silverlight进行绘图。人家silverlight干这个可是专业的,不过,这里问题来了,我小结下来问题:

  对于上海市地图那如同蜘蛛网一样的路线,直接在前台线程里绘图,那你就完了。浏览器会直接挂死的。

  方案一:异步绘图。我是分析传过来的矢量数据之后,不断地生成UIELEMENT对象,然后追加到Canvas画布上的。这里需要使用异步,也就是dispatcher.begininvoke() 来一次生成一个UIELEMENT,然后追加上去。追加完后,如果还有未生成的矢量图形,那么就马上再次调用begininvoke,直到绘制结束。

  这样有个问题,就是地图确实是响应速度快了,但是会看到一个一个得元素如同在实时绘画一般地一个一个画上去,速度确实不够快。不过效果很酷,呵呵

  方案二:在后台线程中,生成xaml,然后一次性解析并呈现。经比较,让silverlight解析xaml的表现,明显比动态添加uielement的表现强非常多。这也算是一个小发现。使用方案二,就可以解决绘图效率问题。

  问题二,数据传输的问题。上海地图会传输非常大量的矢量数据过去。我抓包后看,发现这些文本信息的字节数居然比图片还大 。这下我真的囧了,本来以为文本比图片小,没想到居然倒了过来。不过我们熟悉asp.net的人自然会马上想到解决办法:gzip压缩。呵呵,这个简单,马上上网,抄了一段代码贴进去,哈哈,马上压缩掉70%。

  问题三,我们是否需要传输那么多的矢量点?由于我搞来的shp文件,精度很高,所以,在缩放比很大的时候,有些点传输了也没有意义啊,因为根本就是都被压缩到一个像素里去了。而且那些点的经纬度精确到了8位小数,但是事实上,对于像素来讲,一般精确到3-4位小数就足够了,所以服务器在传数据的时候,完全可以压缩掉这些信息。这样,传输的数据量就更小了。现在经压缩,数据量已小于图片的数据量。而且是放的越大越小,和图片正好相反。

  现在还有问题是:服务器暂时无法利用缓冲,因为每次查询的经纬度都不同,导致无法根据查询字符串进行cache。 每次取数都要查询20个图层,也就是进行20次数据库查询,暂时没有想出好的解决办法。

  现在的进度是,正在制作客户端地图编辑工具。

效果见图:

 

 

  目前阶段性成果可以在这里看到 //211.136.156.198/newGIS

  呵呵,别的我不说,至少地图呈现的效果已经接近bing地图了,嘿嘿,反正比公司买的那两个引擎都要强很多。

  在项目中使用silverlight的好处确实很多,原来要写N多js的东西,轻轻松松就解决了,而且反正在项目中使用,也不用去考虑什么网站用户没安装silverlight之类的,嘿嘿。

 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP