﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-socketref,再见！高德-随笔分类-MapGis</title><link>http://www.cppblog.com/socketref/category/6602.html</link><description>gis,mouse,luolasi</description><language>zh-cn</language><lastBuildDate>Sat, 31 Aug 2013 08:16:53 GMT</lastBuildDate><pubDate>Sat, 31 Aug 2013 08:16:53 GMT</pubDate><ttl>60</ttl><item><title>移植地图绘制引擎从Qt切换到Cairo</title><link>http://www.cppblog.com/socketref/archive/2013/08/31/202891.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Sat, 31 Aug 2013 07:39:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2013/08/31/202891.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/202891.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2013/08/31/202891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/202891.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/202891.html</trackback:ping><description><![CDATA[由于最近也是比较有时间，想着将Windows版本的地图绘制引擎移植到Linux。<br />地图Render部分采用的是Qt，所以过程非常顺利，用Eclipse+CDT重建工程，略微几个小改动便完成了移植。<br />但之后发现了Qt带来的问题了，地图绘制引擎支持并发处理多个绘制请求，不同的绘制请求将在不同的线程Thread中被执行，多线程的情况便出现了问题，提示QPixmap不能在非UI线程被构造，如果强行构造，便出现了内存数据访问违例的异常错误，进程直接coredump，这个问题困扰了一些时间；<br />之后改了改代码，将数据处理和绘制代码隔离开，线程thread中进行数据加载、分析、计算，绘制代码采用Qt的signal/slot机制完成，就是工作线程处理好数据之后通过emit signal将绘制请求发送给ui主线程的slot处理函数。这种实现方法的问题在于绘制工作都将被串行执行，性能下降。<br />几年前在移植libsvg到wince时采用过cairo( cairographices.org) ,有点使用经验，且cairo是gnome的标准图形库，性能应该不错，所以直接改为cairo。<br />cairomm是cairo的c++包装，编译还需sig++，cairo的api还是挺丰富的，字体，反走样，矩阵... 操作也是相当简单&nbsp;<br />很快移植完成，运行效果还是比较满意，现在正考虑地图引擎移植到ios设备，目前需要琢磨cairomm，sig++，pixmap之类的东西如何移植问题(或者直接采用ios的Fundation的绘图api)<br /><br /><img src ="http://www.cppblog.com/socketref/aggbug/202891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2013-08-31 15:39 <a href="http://www.cppblog.com/socketref/archive/2013/08/31/202891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Gps监控系统   sw2us.com/gps</title><link>http://www.cppblog.com/socketref/archive/2012/06/30/180822.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Fri, 29 Jun 2012 17:24:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2012/06/30/180822.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/180822.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2012/06/30/180822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/180822.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/180822.html</trackback:ping><description><![CDATA[<div><div>全格Gps2012监控系统</div><div></div><div>我们是上海全格信息科技公司，我们的团队以Gis位置服务系统为方向，多年来积累开发了多套Gps定位系统等核心产品，且拥有所有的技术能力和版权。</div><div>目前我们正在寻找合作伙伴，我们可以提供系统平台服务且我们的强项也在于此，也可以做gps运维服务。</div><div>如果您用的系统也是同深圳那么多Gps厂家共用的一套系统的话，您可以看看我们的系统，参考一下优缺点。</div><div></div><div>&gt;我们是掌握最新Gis应用服务的技术开发团队</div><div>&gt;我们拥有非常丰富的Gis开发、应用、实施的经验和专业的精神</div><div>&gt;我们提供.灵活的可配置、扩展的系统平台，根据客户需求而定制功能，包括：界面、操作接口、报表或者整合客户的业务</div><div>&gt;我们拥有自主的地图平台，提供B/S模式，不采用google，baidu等互联网地图，不采用geoserver等开源的地图，完全我们自己开发的地图引擎，速度快，效率高，设备运行要求低、灵活可扩展</div><div>&gt;我们的监控系统采用flex技术，监控位置和报警完全实时，服务器主动推送gps信息到浏览器端，这一点是非flex技术绝不能做到的，所以设备运行状态实现零延时&nbsp;</div><div>&gt;我们的系统监控终端除了支持pc浏览器，还支持 android，iphone等移动终端访问控制，可进行手机设防、监控轨迹、报警配置等功能，可通过app store和android市场下载安装</div><div>&gt;我们的有5年的Gps监控运营开发的经验，系统设计容量达2w台终端设备，与多个公司合作OEM我们的系统和终端产品</div><div></div><div>~如果您想做Gps监控或者运营，也许您是个人或者是公司老板</div><div>~如果您需要更灵活、可控、安全、稳定的GPS监控系统</div><div>~如果您的需求规划是低成本的</div><div>~如果您需要部署一整套Gps服务平台在自己的环境中，而不是又去代理使用他人的Gps运营平台或者不想花巨资采用 mapabc，mapbar之类的系统</div><div>。。。。。</div><div></div><div>您可以考虑我们的技术方案，我们可以以最优质的服务、最先进的技术、最灵活的合作模式与您实现共赢</div><div></div><div>请访问我们的网站: <a href="http://www.sw2us.com " target="_blank">www.sw2us.com </a>&nbsp; &nbsp; &nbsp;</div><div>Gps系统访问地址: <a href="http://www.sw2us.com/gps" target="_blank">www.sw2us.com/gps</a></div><div></div><div></div><div>---------------------------------------------------------------------------------------------</div><div>上海全格信息科技有限公司</div><div>Shanghai Triangle Info Tech Co,Ltd.&nbsp;</div><div>地址: 上海市闵行区立跃路2897号1幢302室 &nbsp;邮编: 201114&nbsp;</div><div>电话: &nbsp;86-021-34680553 &nbsp; &nbsp; 传真: &nbsp;86-021-64296802 &nbsp; &nbsp; &nbsp; &nbsp; 邮件: service@sw2us.com</div><div>移动电话: &nbsp;13661913244 &nbsp; &nbsp; 网址: &nbsp;http://www.sw2us.com &nbsp; &nbsp;QQ: 2536588583@qq.com</div><div>---------------------------------------------------------------------------------------------</div><div></div></div><div id="isChromeWebToolbarDiv" style="display:none"></div> <div id="isChromeWebToolbarDiv" style="display:none"></div><img src ="http://www.cppblog.com/socketref/aggbug/180822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2012-06-30 01:24 <a href="http://www.cppblog.com/socketref/archive/2012/06/30/180822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ogr转换shp秒到度单位</title><link>http://www.cppblog.com/socketref/archive/2012/02/02/164810.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Wed, 01 Feb 2012 18:14:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2012/02/02/164810.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/164810.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2012/02/02/164810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/164810.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/164810.html</trackback:ping><description><![CDATA[公司的shp数据都是以秒为单位存储，要做监控和道路匹配，直接与gps接收坐标无法实现，必须转换shp单位为度单位<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">--coding:utf-8---</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;&nbsp;brief:&nbsp;&nbsp;内业shp数据，转换秒到度为单位</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;author:&nbsp;scott</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;date:&nbsp;2012.1.30&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;org:&nbsp;&nbsp;--navi.com</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;version:&nbsp;v0.1.0&nbsp;2012.2.1</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;&nbsp;1.create&nbsp;doc&nbsp;and&nbsp;test&nbsp;ok,&nbsp;types&nbsp;(included&nbsp;point|line|polygon|multipolygon)&nbsp;be&nbsp;supported</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;os,os.path,sys,time,copy,shutil<br /></span><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">from</span><span style="color: #000000; ">&nbsp;osgeo&nbsp;</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;ogr<br /></span><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">def</span><span style="color: #000000; ">&nbsp;do_layerPoint(layer):<br /></span><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ftr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layer.ResetReading()<br /></span><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ftr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layer.GetNextFeature()&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">print</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">'</span><span style="color: #800000; ">point&nbsp;num:</span><span style="color: #800000; ">'</span><span style="color: #000000; ">,layer.GetFeatureCount()<br /></span><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">print</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">'</span><span style="color: #800000; ">extent:</span><span style="color: #800000; ">'</span><span style="color: #000000; ">,layer.GetExtent()<br /></span><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;cc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;ftr:<br /></span><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;cc</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ftr.GetGeometryRef().GetPoint(0)<br /></span><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ftr.GetGeometryRef()<br /></span><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;g#,g.ExportKML()</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;pt[0]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">or</span><span style="color: #000000; ">&nbsp;pt[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.SetPoint(0,pt[0]</span><span style="color: #000000; ">/</span><span style="color: #000000; ">3600</span><span style="color: #000000; ">.,pt[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">/</span><span style="color: #000000; ">3600</span><span style="color: #000000; ">.)<br /></span><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;g</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; ">'''</span><span style="color: #800000; "><br /></span><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ng&nbsp;=&nbsp;ogr.Geometry(ogr.wkbPoint)<br /></span><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;pt<br /></span><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ng.SetPoint(0,pt[0]+40,pt[1])<br /></span><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftr.SetGeometry(ng)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; ">'''</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layer.SetFeature(ftr)<br /></span><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layer.GetNextFeature()&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;40</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">def</span><span style="color: #000000; ">&nbsp;do_layerLine(layer):<br /></span><span style="color: #008080; ">&nbsp;41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ftr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layer.ResetReading()<br /></span><span style="color: #008080; ">&nbsp;42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ftr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layer.GetNextFeature()<br /></span><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;ftr:&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ftr.GetGeometryRef()<br /></span><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;g.GetPointCount()<br /></span><span style="color: #008080; ">&nbsp;47</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;0<br /></span><span style="color: #008080; ">&nbsp;48</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;cc&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;cnt:<br /></span><span style="color: #008080; ">&nbsp;49</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;g.GetPoint(cc)</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;50</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;51</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;52</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;range(cnt):<br /></span><span style="color: #008080; ">&nbsp;53</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;g.GetPoint(n)<br /></span><span style="color: #008080; ">&nbsp;54</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;pt[0]</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">or</span><span style="color: #000000; ">&nbsp;pt[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">&nbsp;55</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.SetPoint(n,pt[0]</span><span style="color: #000000; ">/</span><span style="color: #000000; ">3600</span><span style="color: #000000; ">.,pt[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">/</span><span style="color: #000000; ">3600.0</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layer.SetFeature(ftr)<br /></span><span style="color: #008080; ">&nbsp;57</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layer.GetNextFeature()<br /></span><span style="color: #008080; ">&nbsp;59</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;60</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">def</span><span style="color: #000000; ">&nbsp;do_layerPolygon(layer):<br /></span><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ftr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layer.ResetReading()<br /></span><span style="color: #008080; ">&nbsp;62</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ftr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layer.GetNextFeature()<br /></span><span style="color: #008080; ">&nbsp;63</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;ftr:&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;65</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ftr.GetGeometryRef()&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;g.GetGeometryCount()<br /></span><span style="color: #008080; ">&nbsp;67</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;range(cnt):<br /></span><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gg&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;g.GetGeometryRef(n)<br /></span><span style="color: #008080; ">&nbsp;69</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;range(gg.GetPointCount()&nbsp;):<br /></span><span style="color: #008080; ">&nbsp;70</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;gg.GetPoint(m)<br /></span><span style="color: #008080; ">&nbsp;71</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;pt</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;pt[0]</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">or</span><span style="color: #000000; ">&nbsp;pt[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gg.SetPoint(m,pt[0]</span><span style="color: #000000; ">/</span><span style="color: #000000; ">3600</span><span style="color: #000000; ">.,pt[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">/</span><span style="color: #000000; ">3600.0</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">&nbsp;74</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layer.SetFeature(ftr)<br /></span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layer.GetNextFeature()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">def</span><span style="color: #000000; ">&nbsp;do_shpfile(file):<br /></span><span style="color: #008080; ">&nbsp;78</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;file</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;79</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">print</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">'</span><span style="color: #800000; ">ready&nbsp;file:</span><span style="color: #800000; ">'</span><span style="color: #000000; ">,file<br /></span><span style="color: #008080; ">&nbsp;80</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;driver&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ogr.GetDriverByName(</span><span style="color: #800000; ">'</span><span style="color: #800000; ">ESRI&nbsp;Shapefile</span><span style="color: #800000; ">'</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">shp&nbsp;=&nbsp;driver.Open('e:/shp_data/points.shp',1)&nbsp;&nbsp;#&nbsp;0&nbsp;-&nbsp;read&nbsp;,&nbsp;1&nbsp;-&nbsp;write&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;82</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;driver.Open(file,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;0&nbsp;-&nbsp;read&nbsp;,&nbsp;1&nbsp;-&nbsp;write&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;83</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;84</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;layer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;shp.GetLayer()<br /></span><span style="color: #008080; ">&nbsp;85</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;86</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;layer.GetFeatureCount()&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;0:<br /></span><span style="color: #008080; ">&nbsp;87</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;<br /></span><span style="color: #008080; ">&nbsp;88</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;89</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;gtyp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layer.GetLayerDefn().GetGeomType()<br /></span><span style="color: #008080; ">&nbsp;90</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;91</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;file.lower().find(</span><span style="color: #800000; ">'</span><span style="color: #800000; ">province</span><span style="color: #800000; ">'</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">&nbsp;92</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">pass</span><span style="color: #000000; ">&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">return&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;93</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;94</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;gtyp&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;ogr.wkbPoint:<br /></span><span style="color: #008080; ">&nbsp;95</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_layerPoint(layer)<br /></span><span style="color: #008080; ">&nbsp;96</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">elif</span><span style="color: #000000; ">&nbsp;gtyp&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;ogr.wkbLineString:<br /></span><span style="color: #008080; ">&nbsp;97</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_layerLine(layer)<br /></span><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">elif</span><span style="color: #000000; ">&nbsp;gtyp&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;ogr.wkbPolygon:<br /></span><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_layerPolygon(layer)<br /></span><span style="color: #008080; ">100</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">101</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">print</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">'</span><span style="color: #800000; ">unknown&nbsp;type:</span><span style="color: #800000; ">'</span><span style="color: #000000; ">,gtyp,</span><span style="color: #800000; ">'</span><span style="color: #800000; ">&nbsp;&nbsp;</span><span style="color: #800000; ">'</span><span style="color: #000000; ">,file<br /></span><span style="color: #008080; ">102</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">103</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;layer.SyncToDisk()&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">104</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shp.Destroy()<br /></span><span style="color: #008080; ">105</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">106</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">107</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">def</span><span style="color: #000000; ">&nbsp;convert(shpdir):<br /></span><span style="color: #008080; ">108</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;files&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;os.listdir(shpdir)<br /></span><span style="color: #008080; ">109</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;file&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;files:<br /></span><span style="color: #008080; ">110</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;&nbsp;file.lower().find(</span><span style="color: #800000; ">'</span><span style="color: #800000; ">.shp</span><span style="color: #800000; ">'</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">==-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">111</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">continue</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">112</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">113</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">if&nbsp;file&nbsp;==&nbsp;'points.shp':</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_shpfile(shpdir</span><span style="color: #000000; ">+</span><span style="color: #800000; ">"</span><span style="color: #800000; ">/</span><span style="color: #800000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">file)<br /></span><span style="color: #008080; ">115</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">116</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800080; ">__name__</span><span style="color: #000000; ">==</span><span style="color: #800000; ">'</span><span style="color: #800000; ">__main__</span><span style="color: #800000; ">'</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">117</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">convert(&nbsp;'e:/shp_data'&nbsp;)</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">118</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;sys.argv[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">:]:<br /></span><span style="color: #008080; ">119</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convert(sys.argv[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])<br /></span><span style="color: #008080; ">120</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">121</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convert(&nbsp;</span><span style="color: #800000; ">'</span><span style="color: #800000; ">D:/temp3/mess/MESH/H51F009012</span><span style="color: #800000; ">'</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">122</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp; <br /></span></div><img src ="http://www.cppblog.com/socketref/aggbug/164810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2012-02-02 02:14 <a href="http://www.cppblog.com/socketref/archive/2012/02/02/164810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重新整理2011年地图数据</title><link>http://www.cppblog.com/socketref/archive/2011/08/11/153085.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 11 Aug 2011 11:56:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2011/08/11/153085.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/153085.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2011/08/11/153085.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/153085.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/153085.html</trackback:ping><description><![CDATA[从朋友处得到一份2011年的四维地图数据，但是数据是未修正偏差的。花了2周时间加工出了效果<br />
有问题请大家指正<br />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="800" height="500" id="gisDemo">
<param name="movie" value="http://sw2us.com/sites/default/files/flex/simple_map.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#666666" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="http://sw2us.com/sites/default/files/flex/simple_map.swf" width="800" height="500">
<param name="quality" value="high" />
<param name="bgcolor" value="#666666" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<!--<![endif]-->
<!--[if gte IE 6]>-->
<p>
Either scripts and active content are not permitted to run or Adobe Flash Player version
10.0.0 or greater is not installed.
</p>
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
<br />
截图 :<br />
<img src="http://www.cppblog.com/images/cppblog_com/socketref/2011-8-11_19-47-57.png" width="959" height="607" alt="" />
<img src ="http://www.cppblog.com/socketref/aggbug/153085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2011-08-11 19:56 <a href="http://www.cppblog.com/socketref/archive/2011/08/11/153085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>swMap的Tile缓冲实现</title><link>http://www.cppblog.com/socketref/archive/2011/07/11/150711.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Mon, 11 Jul 2011 14:34:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2011/07/11/150711.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/150711.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2011/07/11/150711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/150711.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/150711.html</trackback:ping><description><![CDATA[<div> 学习过MapGuid,MapServer,Qgis等多种开源地图处理服务软件，开发了遵循WMS标准的地图服务，包括wms接入，地图渲染服务。<br /> 近1年的时间跑的地图展示都是wms服务器实时请求TileServer进行绘制，Tileserver进程被部署在一台高端的服务器上，同时启动了8个服务进程，访问忙碌的时候机器有点吃不消，就看到cpu那根线飚的很高。<br /> geoserver这个用java做的wms服务器，性能不敢恭维，玩geoserver的时候接触了tilecahce这个开源软件，目前跑啥版本就不清楚了，之前将其研究了个明白，知道自己需要的是什么，所以一切还是得自己写。<br /> 对我来讲tilecache不实用的原因有多个: <br /> 1.支持过多的cahce 存储方式，什么google的数据库，oracle的也有，虽然代码框架的好，但很多东西都不管用，所以代码维护不够灵活<br /> 2.tilecache通过apache提供web的wms服务，然后tilecahe里再请求后端的geoserver服务，产生的cache根据他定 义的一个网格依次按x,y,z的索引存储在文件系统里面，并将图形进行编码分类。这种实现并没有问题，但要知道这些cache出来的图像文件是那么的多且 都零碎，有些图片还够不上一个文件系统基本的一个存储页大小，所以会大量浪费空间；由于文件零碎且多，移动这些文件也是个相当大的问题，一次为了将这些 cahce tile文件从A机器拷贝到B机器尽然花费了1天的时间。<br /> <br /> tilecache有这些不如我意的地方，所以之前自己也考虑再写一个tilecache的 backend，将渲染出来的东西直接存储进pgsql数据库，那以后只要导出数据库的tablespace就可以了，嗯！的确可行，也跑了一段时间<br /> 最后还是决定放弃tilecahce了，毕竟wms自己已经实现了，要再做个backend也是很简单，做完直接整合进wms服务器。<br /> 我考虑采用sqlite来存储这些瓦片图形，由于sqlite处理多线程时天性有点问题，多线程不能共享同一个连接(connection),所以实现的时候在每个线程创建了新的连接，开销是有一些的，那比之前实时请求TileServer要快的多了。<br /> 现在wms跑的很开心了，cpu也不忙了，就是累死了硬盘了<br /> 一台机器上渲染的地图瓦片数据单独存储在一个文件里面，要部署到另外一台机器也很方便了，只需要拷贝一下就可以了<br /> 接着看看将这个sqlite换成pgsql，看看性能哪个更强一点<br /> python代码实现: <br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">def</span><span style="color: #000000; ">&nbsp;getBitmapTile3(self,renderTile,mapid,res,xy,size):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span><span style="color: #000000; ">&nbsp;self.enable:<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;None&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">表示需要实时请求地图数据</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;None<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbconn&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqlite3.connect(self.dbname)<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">dbconn.text_factory&nbsp;=&nbsp;str</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dbconn.cursor()<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cr.execute(</span><span style="color: #800000; ">'</span><span style="color: #800000; ">select&nbsp;image&nbsp;from&nbsp;tiles&nbsp;where&nbsp;res=?&nbsp;and&nbsp;x=?&nbsp;and&nbsp;y=?</span><span style="color: #800000; ">'</span><span style="color: #000000; ">,(res,xy[0],xy[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]))<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cr.fetchone()<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span><span style="color: #000000; ">&nbsp;r:<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;renderTile(mapid,res,xy,size)<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;tile&nbsp;</span><span style="color: #0000FF; ">and</span><span style="color: #000000; ">&nbsp;tile.pixmap:<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqlite3.Binary(tile.pixmap)<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">*</span><span style="color: #800000; ">'</span><span style="color: #000000; ">*</span><span style="color: #000000; ">20</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cr.execute(u</span><span style="color: #800000; ">'</span><span style="color: #800000; ">insert&nbsp;into&nbsp;tiles&nbsp;(res,x,y,z,image)&nbsp;values(?,?,?,?,?)</span><span style="color: #800000; ">'</span><span style="color: #000000; ">,(res,xy[0],xy[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],0,b))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;r[0]<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.cacheshooted</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">shooted&nbsp;</span><span style="color: #800000; ">'</span><span style="color: #000000; ">,self.cacheshooted<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">except</span><span style="color: #000000; ">:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;traceback.print_exc()<br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;None<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbconn.commit()<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;tile<br /></span><span style="color: #008080; ">27</span>&nbsp;</div> <br /> 记得空的时候在flex端写个自动跑地图的程序，不能让机器闲着，没事的时候把全国地图的瓦片自动产生一下，免得在访问地图系统的时候再去产生瓦片！<br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> </div><img src ="http://www.cppblog.com/socketref/aggbug/150711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2011-07-11 22:34 <a href="http://www.cppblog.com/socketref/archive/2011/07/11/150711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opensacles性能与openlayers比较</title><link>http://www.cppblog.com/socketref/archive/2011/06/06/148136.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Mon, 06 Jun 2011 04:45:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2011/06/06/148136.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/148136.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2011/06/06/148136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/148136.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/148136.html</trackback:ping><description><![CDATA[测试使用本地wms渲染引擎，发现openlayers加载tiles速度明显快于openscales，速度几乎要2-3倍<br /><br />我想这个原因可能在于flash运行时异步请求都是单线程的，openlayers发送ajax httprequest可能是多线程并发请求的(渲染程序都是一致)<br /><br />** win7下绑定localhost做服务发现响应速度很慢，必须直接写 本地ip地址<br /><br />openscales请求速度慢可能opensacles代码里面控制了并发请求tile的数量，这个要具体看一下scales的代码，看看能够引出接口来修改一下 <br /><br />** openscales初始化 wmsc图层时只有一个resulutions参数，而有时我采用scale缩放比控制，注意 openscales/*/util/*.as提供了scale到resulutoin的转换<br />&nbsp;&nbsp;&nbsp;&nbsp; DPI在openscales里面默认是72 ， WGS84 (4326)是默认的，投影也提供接口更改<br /><br /><br />openscales速度慢的问题找到了，同样启动Ie则没有迟缓的现象，说明还是浏览器的问题，firefox 3.x版本不行，换4.x的看看，如果还是不行，说明flash.ocx for firefox版本不行<img src ="http://www.cppblog.com/socketref/aggbug/148136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2011-06-06 12:45 <a href="http://www.cppblog.com/socketref/archive/2011/06/06/148136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整理之前的webgis demo，提供下载</title><link>http://www.cppblog.com/socketref/archive/2011/05/26/147171.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 26 May 2011 02:56:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2011/05/26/147171.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/147171.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2011/05/26/147171.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/147171.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/147171.html</trackback:ping><description><![CDATA[webgis地图访问地址 ：　<a href="http://sw2us.com:8520/medias/flex/newgis.html">http://sw2us.com:8520/medias/flex/newgis.html</a><a title="http://sw2us.com:8080/" href="http://sw2us.com:8080/"></a><div>下载地址：　<a title="http://sw2us.com:9090/sw2us.webgis.demo.2011.5.26.7z" href="http://sw2us.com:9090/sw2us.webgis.demo.2011.5.26.7z">http://sw2us.com:9090/sw2us.webgis.demo.2011.5.26.7z</a><br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/socketref/sw2us.webgis.demo.png" height="420" width="892" /><br /><div>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</div>sw2us.webgis 在99年就开始有个做地图引擎的想法，由于忙于公司其他开发项目的事情，一直断断续续进行<br />在5173的时候开始用geoserver来架构wms服务器，发现配置部署性能都差强人意，所以想着自己做个wms服务<br />10年的时候也写了个版本，后来用tilecache进行tile 绘制，中国地图1000的比例两台机器绘制了1个月<br />下半年生病了，到11月份回unistrong上班，工作内容就是写驱动，空闲之余继续写地图渲染代码，以前用wx做的<br />代码全部用qt写了一遍，优化了一些速度。地图换了两版本，08年的全国图和11年的上海图，用python脚本进行预处理<br />切割地图进行网格存储。以前的同事多年前就告诉我他们改进4叉树的存储方式来提高访问数据减少数据加载，我也<br />没好好琢磨过，主要是没有时间和精力，只好做这种傻瓜式的简单网格切分和加载。<br /><br />demo只是简单实现了地图加载和现实，然后用openlayers,extjs,geoext,django做了个框架页面，里面放了个不跑的汽车图标<br /><br />这个东西是10年12月完成的，已经准备放弃这个架构的设想,准备采用flex+openscale+django来重做webgis应用，<br />当然那还是需要花费很多时间和精力<br /><br />zhangbin <br />2011.1.20<br /><br />msn: socketref@hotmail.com<br />qq: 24509826<br /><br />==========================================================================================<br />注意：　sw2us.webgis.demo目录必须存放在c:\根目录下,不能更改目录名<br /><br />安装<br />=============<br />1.配置数据库<br />&nbsp;&nbsp; &nbsp;安装pgsql, postgresql-8.3.5-2-windows.exe，数据库端口保持为5432 ，设置postgres用户，密码为111111<br />&nbsp;&nbsp; &nbsp;安装空间数据库扩展 postgis-pg83-setup-1.5.2-1.exe<br />&nbsp;&nbsp; &nbsp;创建 数据库名 newgis,导入数据库文件 newgis.db.backup <br /><br />2. webserver配置 <br />&nbsp;&nbsp; &nbsp;运行C:\sw2us.webgis.demo\apache2.2.pack\http-install.bat&nbsp; 安装apache服务，侦听 9090端口 <br />&nbsp;&nbsp; &nbsp;C:\sw2us.webgis.demo\apache2.2.pack\http-install.bat &nbsp;&nbsp; &nbsp;启动apache服务<br />&nbsp;&nbsp; &nbsp;<br />3.安装微软雅黑字体<br />&nbsp;&nbsp; &nbsp;bin/vistaFont_chs.exe ,安装之后修改系统默认字体为微软雅黑字体<br /><br />4. 安装vc运行环境 bin\vcredist_x86.exe<br /><br />运行: <br />===============<br />&nbsp;&nbsp; &nbsp;start-gis.bat &nbsp;&nbsp; &nbsp;运行django后台服务<br />&nbsp;&nbsp; &nbsp;wms_start.bat &nbsp;&nbsp; &nbsp;运行wms服务器<br />&nbsp;&nbsp; &nbsp;tileserver-rpcservice-1.bat/tileserver-rpcservice-2.bat 为后台地图渲染服务，目前配置5001,5002端口<br />&nbsp;&nbsp; &nbsp;浏览器录入 http://192.168.14.3:8080/ 即可看到地图界面 <br />&nbsp;&nbsp; &nbsp;<br />系统端口说明: <br />===============<br />&nbsp;&nbsp; &nbsp;9090 &nbsp;&nbsp;&nbsp; &nbsp;apache 服务端口 <br />&nbsp;&nbsp; &nbsp;8080&nbsp;&nbsp; &nbsp;django 服务端口<br />&nbsp;&nbsp; &nbsp;8000&nbsp;&nbsp; &nbsp;wms 服务端口<br />&nbsp;&nbsp; &nbsp;5001,5002 地图渲染服务端口<br /><br />&nbsp;&nbsp; &nbsp;<br />以上端口都被写入了相关服务的配置文件，请确保这些端口没有被占用 <br /><br />--&nbsp;&nbsp; &nbsp;修改apache端口 C:\sw2us.webgis.demo\apache2.2.pack\Apache2.2\conf\httpd.conf ;<br />&nbsp;&nbsp; &nbsp;修改之后必须重新启动apache服务(http-shutdown.bat,http-start.bat)<br />&nbsp;&nbsp; &nbsp;修改apache端口之后必须修改对应django的配置 C:\sw2us.webgis.demo\newgis\gis.py(第14行 JSLIB_PATH的webserver指向)<br />--&nbsp;&nbsp; &nbsp;django服务端口可以任意修改 start-gis.bat<br />--&nbsp;&nbsp; &nbsp;wms服务端口修改 wms_start.bat ,修改之后必须同步C:\sw2us.webgis.demo\newgis\medias\js\gis\gismap.js(第19行)的wms服务器指向<br />--&nbsp;&nbsp; &nbsp;地图渲染服务可以根据负荷的情况启动多个服务进程(复制tileserver-rpcservice-1.bat，修改其端口号，比如 5003),在修改或增加渲染<br />&nbsp;&nbsp; &nbsp;进程之后必须修改wms服务的配置C:\sw2us.webgis.demo\swmap.demo\GisServer\tileservers.txt<br />&nbsp;&nbsp; &nbsp;<br />demo系统默认都是采用localhost做服务接口，如果要提供网络支持或者分布这些服务进程来提高性能，则需要修改这些不同的端口和ip地址<br /><br />&nbsp;&nbsp; &nbsp;<br />系统描述：<br />=============<br />&nbsp;浏览器firefox 直接访问django端口，django的url.py分派请求到gis.py,gis.py加载pages/mainwindow.html<br />&nbsp;mainwindow.html已经是个openlayers+ext的框架界面了，其陆需加载 openlayers,ext等的js脚本，注意：这些js<br />&nbsp;脚本并不存在django的目录下，而是存放在apache的web-root目录下，所以必须要修改gis.py和mapgis.js里面的<br />&nbsp;主机指向信息。<br />&nbsp;当mainwindow.html加载之后，工作就交给了openlayers，openlayers将访问wms服务器(gismap.js 19行),此刻wms服务器<br />&nbsp;提供tile数据给浏览器。<br />&nbsp;地图渲染服务必须在wms服务之前启动，wms通过tileserver.txt的配置 采用ice 与渲染服务进程通讯并获得图块并返回给<br />&nbsp;浏览器。<br />&nbsp;渲染服务器、wms服务器、apache和django服务都可以被分隔存储在不同的主机上<br />&nbsp;<br />&nbsp;好了，demo可以在本机跑起来了，但必须是以 http://locahost:8080方式，如果想以网络方式访问则修改wms服务端口,gis.py,gismap.js及相关.bat配置<br />&nbsp;<br />相关问题 <br />=============<br />&nbsp;如果将这些服务主机都配置成localhost，访问速度大大降低 ， 应配置成独立的ip地址<br />&nbsp;apache已经配置了js压缩输出&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;</div><img src ="http://www.cppblog.com/socketref/aggbug/147171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2011-05-26 10:56 <a href="http://www.cppblog.com/socketref/archive/2011/05/26/147171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webgis初步小试，提供下载</title><link>http://www.cppblog.com/socketref/archive/2010/12/03/135361.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Fri, 03 Dec 2010 08:23:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2010/12/03/135361.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/135361.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2010/12/03/135361.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/135361.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/135361.html</trackback:ping><description><![CDATA[找了台快速的公网机器来做<span style="font-size: 11pt; font-family: 微软雅黑;">演示（网通线路访问还是很慢）: <br><a href="http://wallizard.vicp.net/maps/test/test_map.html">http://wallizard.vicp.net/maps/test/test_map.html</a><br><a  href="http://wallizard.vicp.net:8080/">http://wallizard.vicp.net:8080/</a> <br></span>提供ftp下载 <span style="font-size: 11pt; font-family: 宋体;"></span><a href="ftp://122.227.135.172:8502/" style="font-family: 微软雅黑;">swmap.demo.2010.11.20.7z</a><br>ftp://122.227.135.172:8502<br>user: mapdown<br>passwd: mapdown<span style="font-size: 11pt; font-family: 宋体;"><span style="font-family: 微软雅黑;"> <br>demo包含c/s,b/s功能和全国地图数据，共170M左右，可以直接架设起一台wms地图服务器</span></span><br>   <img src ="http://www.cppblog.com/socketref/aggbug/135361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2010-12-03 16:23 <a href="http://www.cppblog.com/socketref/archive/2010/12/03/135361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpServer+ TileCache</title><link>http://www.cppblog.com/socketref/archive/2010/11/18/134002.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 18 Nov 2010 08:49:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2010/11/18/134002.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/134002.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2010/11/18/134002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/134002.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/134002.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; TileCache从去年开始使用已经有一段时间了，之前是为了配合GeoServer来产生缓存网格块，之后在3-8月份处于停滞状态，到9月份身体开始恢复就重新启动swMap工程，彻底抛弃了GeoServer(效率和安装运行环境不能满足要求)。在使用geoServer期间，采用Tilecache产生了千万的tile图块，默认是存放在文件系统，产生的Tile在备份迁移的时候令我寒心，那么多的文件拷贝每次都要耗费4，5个小时，考虑到这种情况，我自己编写了TileCache的Store Backend，将Tilecache产生的Tile存储进PostGresDB，这样我只要备份DB就可以了。<br>&nbsp;&nbsp;&nbsp; 随即而来的是放弃Geoserver，自己重新开发地图渲染服务器，使用了QT令我效果满意，那再使用那一套GeoServer的东西就不合时宜了，TileCache也是需要绑定Apache+mod_python才能工作，简直太累最了，配置个环境还是不太容易，想想自己只是想提供一个WMS的服务罢了何必那么麻烦呢。 地图服务器也有了，产生CacheTiles也开发了自动化的工具，将全国不同显示比例的图块按256x256规格分别放入多个文件，这样备份起来就快速多了。<br>&nbsp;&nbsp;&nbsp; 之前看过TileCache的代码，那时候只是为了编写一个新的Cache Store backend，现在重新回过头来，我决定抛弃apache，语言还是用python，之前做一个酒店广告投放系统时开发过一个Http代理服务器，所以轻车熟路了，保留其Http服务功能，加上TileCache的WMS服务代码，一个swMap的WMS 服务器就可以诞生了。<br>&nbsp;&nbsp;&nbsp; 端详了一会儿TileCache，发现是多么的简单，几乎不用多修改什么地方就可以完成。<br>&nbsp;&nbsp;&nbsp; 由于我的swMap服务程序提供了预先缓存和实时绘制地图的功能，所以通过Http可以以两种模式进行，当然实时模式是用于调试地图层SLD时派上大用场。<br>&nbsp;&nbsp;&nbsp; 实时绘制的时候我的WMS服务器通过Ice连接到swMap服务器，当缓存访问时我的WMS服务器直接从本地Tile文件中读取，那时多么舒服的事情哪！ <br><br><br><br><br> <img src ="http://www.cppblog.com/socketref/aggbug/134002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2010-11-18 16:49 <a href="http://www.cppblog.com/socketref/archive/2010/11/18/134002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>下一步swMap的工作内容</title><link>http://www.cppblog.com/socketref/archive/2010/11/18/133998.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 18 Nov 2010 08:32:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2010/11/18/133998.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/133998.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2010/11/18/133998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/133998.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/133998.html</trackback:ping><description><![CDATA[1. 修改httpserver+tilecache,使 swMap具有WMS功能，支持openlayers访问<br>2. 继续增加swBox功能，诸如: 测距、围栏、自定义用户兴趣点、面积计算<br>3. 缓冲全国图tile到缓存文件，最低比例1:2000,由于是全国性的预先绘制工作，会消耗很大的磁盘空间和处理时间，估计3台4核的PC连续1个星期工作时间<br>4. 开发基于swBox的基本应用，增加POI搜寻和MapGrab功能(用户可以指定地理范围产生指定显示精度的大幅图像，比如可以抓取1:4000的整个上海城区图到一个jpg文件)<br>5. 增加矢量运算操作进行道路匹配<br>6. 增加GPS简易的定位功能，多个移动对象之间的位置拓扑关机的操作，支持轨迹回放和导出功能<br>7. swBox增加Wince版本<br><br><br> <img src ="http://www.cppblog.com/socketref/aggbug/133998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2010-11-18 16:32 <a href="http://www.cppblog.com/socketref/archive/2010/11/18/133998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>swbox 地图渲染完成基本功能</title><link>http://www.cppblog.com/socketref/archive/2010/11/08/132907.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Sun, 07 Nov 2010 17:20:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2010/11/08/132907.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/132907.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2010/11/08/132907.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/132907.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/132907.html</trackback:ping><description><![CDATA[作为替代geoserver的方案，采用python+qt实现地图的加工处理，实时渲染和tilecache缓冲。<br>其中借鉴了geoserver的服务模式，ogc的SLD风格配置，tilecache开源代码的核心，现已用c++完成这些功能，<br>运行效率可谓比geoserver快了好几个数量级<br>未加入道路和多边形文本标注，正在调整标注算法和逻辑； *.xml控制地图，mapsld.xml定义层样式风格<br><br>程序演示：<a style="text-decoration: underline;" title="http://wallizard.vicp.net:9000/swBox_release_2010.11.08.rar" href="http://wallizard.vicp.net:9000/swBox_release_2010.11.08.rar">http://wallizard.vicp.net:9000/swBox_release_2010.11.08.rar</a><br><br><img style="width: 777px; height: 503px;" alt="" src="http://www.cppblog.com/images/cppblog_com/socketref/swbox.2010.11.8.png"><br><br> <img src ="http://www.cppblog.com/socketref/aggbug/132907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2010-11-08 01:20 <a href="http://www.cppblog.com/socketref/archive/2010/11/08/132907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>加了QT绘制地图</title><link>http://www.cppblog.com/socketref/archive/2010/10/19/130501.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Tue, 19 Oct 2010 15:37:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2010/10/19/130501.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/130501.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2010/10/19/130501.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/130501.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/130501.html</trackback:ping><description><![CDATA[之前废弃了wxWidgets，地图用Qt渲染，反锯齿和字体都是现成的<br>加上了SLD控制地图分隔，比之前的效果好了很多<br><br>1.修复了由于判别第一个feature不在可视区域内导致忽略了之后的数据加载的bug<br>2.多边形和线性增加了最小可见宽度，为了加速绘制的速度<br><br>告别了geoserver那种蜗牛和不可控的年月了<br>基本的绘制效果比较满意<br>下一步工作：<br>1.文本绘制和优化<br>2.地图layer压缩减小存储空间以及测试性能上的影响<br>3.优化memheap的算法<br>4.mapcanas从wx移植到qt<br>5.flex 组件优化<br>6.mapserver支持tilecache<br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/socketref/out_qt.jpg" width="768" height="768"><br><br> <img src ="http://www.cppblog.com/socketref/aggbug/130501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2010-10-19 23:37 <a href="http://www.cppblog.com/socketref/archive/2010/10/19/130501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>地图显示比计算</title><link>http://www.cppblog.com/socketref/archive/2010/10/08/129099.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Fri, 08 Oct 2010 14:39:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2010/10/08/129099.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/129099.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2010/10/08/129099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/129099.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/129099.html</trackback:ping><description><![CDATA[地图显示可以用缩放比进行表示，也可以用度表示<br>例如在openlayers时，resolutions用于定义显示精度，也就是比例尺。<br>&nbsp;&nbsp;&nbsp; resolutions: [0.17578125,0.087890625,0.0439453125,0.02197265625] ,定义了4级地图显示比例，每个像素表示多少地理宽度<br>&nbsp;如果换算成显示比时，转换方法:&nbsp; 0.17578125*sw_METERS_PER_DEGREE/sw_METERS_PER_PIXEL = 74,143,700 = 74M<br>&nbsp;也是就 1:74M<br><img src ="http://www.cppblog.com/socketref/aggbug/129099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2010-10-08 22:39 <a href="http://www.cppblog.com/socketref/archive/2010/10/08/129099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TileCache.Cache扩展</title><link>http://www.cppblog.com/socketref/archive/2010/04/14/112600.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Wed, 14 Apr 2010 15:47:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2010/04/14/112600.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/112600.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2010/04/14/112600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/112600.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/112600.html</trackback:ping><description><![CDATA[TileCache默认是Disk缓存Tile数据，存储和检索的效率远不及数据库，所以要开发数据库Cache，读完TileCache代码，发现其系统结构设计的还算可以<br>tilecache-2.10\TileCache\Caches目录下就是TileCache自带的Cache类型，Cache有个抽象基类，我的数据Cache只要实现这些Cache的接口便能完成到数据库的Tile存取。<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Cache&nbsp;(object):<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__init__</span><span style="color: #000000;">&nbsp;(self,&nbsp;timeout&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">30.0</span><span style="color: #000000;">,&nbsp;stale_interval&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">300.0</span><span style="color: #000000;">,&nbsp;readonly&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;False,&nbsp;</span><span style="color: #000000;">**</span><span style="color: #000000;">kwargs):<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.stale&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;float(stale_interval)<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.timeout&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;float(timeout)<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.readonly&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;readonly<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;lock&nbsp;(self,&nbsp;tile,&nbsp;blocking&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;True):<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start_time&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;time.time()<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.attemptLock(tile)<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;result:<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;True<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">elif</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;blocking:<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;False<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;result&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;True:<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;time.time()&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;start_time&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;self.timeout:<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">raise</span><span style="color: #000000;">&nbsp;Exception(</span><span style="color: #800000;">"</span><span style="color: #800000;">You&nbsp;appear&nbsp;to&nbsp;have&nbsp;a&nbsp;stuck&nbsp;lock.&nbsp;You&nbsp;may&nbsp;wish&nbsp;to&nbsp;remove&nbsp;the&nbsp;lock&nbsp;named:\n%s</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;self.getLockName(tile))&nbsp;<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time.sleep(</span><span style="color: #000000;">0.25</span><span style="color: #000000;">)<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.attemptLock(tile)<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;True<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;getLockName&nbsp;(self,&nbsp;tile):<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;self.getKey(tile)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">.lck</span><span style="color: #800000;">"</span><span style="color: #000000;"><br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;getKey&nbsp;(self,&nbsp;tile):<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">raise</span><span style="color: #000000;">&nbsp;NotImplementedError()<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;attemptLock&nbsp;(self,&nbsp;tile):<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">raise</span><span style="color: #000000;">&nbsp;NotImplementedError()<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;unlock&nbsp;(self,&nbsp;tile):<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">raise</span><span style="color: #000000;">&nbsp;NotImplementedError()<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;get&nbsp;(self,&nbsp;tile):<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">raise</span><span style="color: #000000;">&nbsp;NotImplementedError()<br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;set&nbsp;(self,&nbsp;tile,&nbsp;data):<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">raise</span><span style="color: #000000;">&nbsp;NotImplementedError()<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;delete(self,&nbsp;tile):<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">raise</span><span style="color: #000000;">&nbsp;NotImplementedError()</span></div>
接口够简单了吧 ，最主要的实现的 是get,set,getKey这3个主要接口<br>tilecache.cfg的Cache.type设置为DB_POSTGRES<br><br><br><br><br><img src ="http://www.cppblog.com/socketref/aggbug/112600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2010-04-14 23:47 <a href="http://www.cppblog.com/socketref/archive/2010/04/14/112600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>完成swMap基本功能</title><link>http://www.cppblog.com/socketref/archive/2009/08/21/93983.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 20 Aug 2009 19:27:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2009/08/21/93983.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/93983.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2009/08/21/93983.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/93983.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/93983.html</trackback:ping><description><![CDATA[准备放弃以前项目使用的地图引擎库和Gis代码到现在已经有了2个月了<br>现在swMap能做基本demo一丁点的功能了，访问： <a target="_blank" href="http://www.sw2us.com/maps.php">www.sw2us.com/maps.php</a> 或者 <a target="_blank" href="http://220.196.42.107/main.php">http://220.196.42.107/main.php</a><br>当初考虑到放弃之前的东西考虑的问题有很多，当然有公司的知识产权问题，最主要的是之前的产品技术实在是设计的有点糟糕。做开发的知道看别人的代码并且在这基础上去发扬光大这时间很头大和痛苦的事情，特别是碰到那些原本就是比较封闭和差劲的东西。<br>凭借自己的的很多想法开始开发swMap项目，以前的东西都抛弃没有做参考，从原始地图加工设计、地图渲染服务器开发、然后就是基于Pc和Wince的客户端开发，支持本地和远程加载地图的方式，重新设计的数据存储方式除了保留简单的网格存储和搜寻，已经把地图数据进行省份的分割，而不像以前必须加载单独的一个全国地图数据包；地图网格也设计成了多网格大小形式，以便支持同一个地图文件中任意多的缩放比和地图层。<br>开发总是很辛苦，每天都是要做到夜深人静<br>学习了很多东西，思考了很多东西，反复的也有很多，最终还是凭借自己比较宽的知识面，运用了很多opensource的技术，时间和效率当然是非常重要的，所以没有自己去重新实现一些基础的东西，比如matrix就是从cairo库中直接抄过来的。<br>在用c++开发地图服务器和客户端时候也考虑了不同的通信方式和操作系统环境，尽可能的可以支持更多的运行环境。<br>原本计划在昨晚wince版本之后马上支持symbian操作系统，但对symbian的开发研究了之后让我大失所望，其开发是非常低效的且通用性能太差，后来网上得知nokia马上将抛弃symbian而怀抱linux了，这令我我马上考虑了移植linux的想法<br>很多人跟我提到静态网页地图方式，当然我不能做到像google，openlayers这么强的客户端端，也没精力去支持ogc那么的gis协议在地图服务器上，所以能演示基础的地图功能开发了php的展示端。<br>flex和sliverlight都是非常好的技术，但对于ms一直没有好感，所以flex形成了我选择另一个展示客户端的想法。<br>网上下了一堆的flex数据，前后从接触actionscript到做好swFlex客户端一共花了3天时间，发觉越来越喜欢这个东西了，看来以后的前端开发要全换成flex平台了。<br>目前做得swMap的功能非常有限，地图处理也是很简单，甚至连文本标注都没有添加，只是提供了25个图层16级别缩放比在客户端展示。<br>我想待我有时间，我将这些都会完善起来<br>原本很多带开发的技术也没有去做，比如agg，地图4叉树、RTree，A*路由算法<br>朋友给我的几个Gps模块设备这几天要调通并放置到地图上去<br><br>  <img src ="http://www.cppblog.com/socketref/aggbug/93983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2009-08-21 03:27 <a href="http://www.cppblog.com/socketref/archive/2009/08/21/93983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对WebGis的思索</title><link>http://www.cppblog.com/socketref/archive/2009/08/16/93464.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Sat, 15 Aug 2009 16:33:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2009/08/16/93464.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/93464.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2009/08/16/93464.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/93464.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/93464.html</trackback:ping><description><![CDATA[对WebGis进行了简单的了解和琢磨，Google 和OpenLayers还是目前的主流方式<br>Google的地图体现了出了行业老大的专业，地图渲染和前端控制做得没法说<br>OpenLayers显得更加灵活，可以采用Google map，或者选择Mapserver、GeoServer来搭建自己的地图处理服务器，当然技术难度和投入成本也是相当的高，效果定是没有前者要来的好，不过要强调的就是灵活。<br>采用Openlayers方式应该是一个长久发展的Gis公司选择的唯一方式。Google Api很多限制使我对其产生了厌恶，使我无法信任其能如其所言能一直免费下去，太多的开发license限制导致无法商用，说白了要提供完全服务就是拿钱来，不爽！<br>Google Api对于非商业使用的唯一的好处就是做做公司网站的位置宣传，其他的就是完全就是为了推广google map而形式的存在。<br>Google 讲到功能远远大于Openlayers方式，但这不能迷糊了广大的开发者，这完全是笼罩在商业利益的阴影之下<br>Google和ERSI都推出了flex的开发sdk来实现客户端的地图接口，我很欣赏<br>谈到GeoServer，其能支持那么多的数据存储形态我比较支持和喜欢，输出也是非常的丰富，但其真正的效率呢？用j2ee架构起来的性能定是好不到哪里去<br>看
看那些配置GeoServer的Gis服务器想想也是可怕，集群、Oracle
SDE，这些都是些啥概念。用了Postgis近1年，其采用goes做geomerty的运算引擎，效率也是不太理想。oracle
sde也许会强很多，但商业公司的东西性价比能好到哪里去呢<br>对于某些小规模的Gis应用需求想想还是本土化自己写地图引擎算了。某些应用在封闭式
的网络环境之中，google和internet就靠不住了；还有一些特殊行业的Gis应用也许仅仅限制在某一个城镇的水利、管线等应用，处理的数据直接
就是从Cad导出的地理数据，数据的大小和应用需求也决定了必须采用不同的方案，要么自己开发的地理渲染处理，或者用 geoserver这一类的东西。<br>自
己在合众思壮的上海研发公司呆了1年多，公司有个Gis部门，成立了4，5年，也做了一款导航引擎，但是其技术陈旧、架构的不合理已经被众多的小公司甩在
了后面，但还如个宝贝一样藏着揣着。想做移植到linux也无法做，地图组加上引擎组，人员20多号人没干出什么东西出来，稍微有点想法的人员出来跑别的
地方打工去了。<br>本来我也对这个有点兴趣，第二年公司重组部门，我申请去Gis部门，老板还以为我要搞点啥花头什么的不让去，干脆不干了。<br>现
在对于swMap这个产品我已经开发了2个月，已经完成了地图预处理、地图显示，支持win32和mobile，系统架构支持本地地图和服务器渲染两种方
式。借鉴了很多opensource的东西，诸如Qgis，SAGA，NaviRoad,Geos,wxArt2D,Mapserver、ogr、
cairo、libsvgr，agg等有名的gis软件项目，这么久了还是有很多东西要学习的，想想公司真是可笑，搞技术封闭只有是死路，连sun都
opensource了操作系统。幸亏自己的努力才能做了这么多东西<br>写着写着就跑题了，累了，不写了，还是继续开发自己的产品去<img src ="http://www.cppblog.com/socketref/aggbug/93464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2009-08-16 00:33 <a href="http://www.cppblog.com/socketref/archive/2009/08/16/93464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>wxWidget实现贴图</title><link>http://www.cppblog.com/socketref/archive/2009/08/06/92368.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Wed, 05 Aug 2009 17:40:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2009/08/06/92368.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/92368.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2009/08/06/92368.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/92368.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/92368.html</trackback:ping><description><![CDATA[wxWidgets的过于native和功能匮乏及稳定性一直被人所诟病。<br>采用wx做过一定规模的大侠有时深深的有这种痛苦，贴图也困扰了我好长时间，特别是缩放贴图，简直异常的痛苦。<br>sf.net的wxSkin也是过于的呆滞，且缺乏维护，时常挽着QT的demo而流口水到半夜，告诉自己一定以后要用QT，特别是有了QT WINCE版本，加上nokia现在是QT的老爸。继续使用wx只有期盼3.0的推出了，可视其如老娘们生孩子，动作实在是太慢了，等我有钱了，我来做wx的老爸就好了，呵呵！<br><br>还是迫于项目的压力，没办法自己在wxSkin的基础上添加了伸缩贴图的功能，自己实现了所有的wxSkin的功能<br><br><img alt=""  src="http://www.cppblog.com/images/cppblog_com/socketref/gvms.jpg" width="1230" height="768"><br><img src ="http://www.cppblog.com/socketref/aggbug/92368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2009-08-06 01:40 <a href="http://www.cppblog.com/socketref/archive/2009/08/06/92368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>近期地图有了一定的进展，还是要继续加油</title><link>http://www.cppblog.com/socketref/archive/2009/08/06/92367.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Wed, 05 Aug 2009 17:24:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2009/08/06/92367.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/92367.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2009/08/06/92367.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/92367.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/92367.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.cppblog.com/images/cppblog_com/socketref/out.jpg"><br>处理了上海数据，图为上海的道路和区域数据<br><br><img src="http://www.cppblog.com/images/cppblog_com/socketref/out2.jpg" border="0"><br>上图为旋转45度的上海地貌图<br><br>接下来的计划便是将地图渲染服务器装上网络通信的翅膀，实现分布式和服务器渲染。这里的分布式渲染是指客户端在渲染多个地理网格块的同时可连接多个服务器实现渲染，这样如果部署在嵌入式设备端的话剩下的就只有是网络带宽的瓶颈了。<br>ICE是个非常好的通信基础框架，也有嵌入式版本，而且也使用了多年，就采用这个。<br>某些场合只能采用socket通信了<br><br>flex+map也是我的接下来的计划任务重点。采用flex技术，客户端安装问题就不用考虑了，直接嵌入浏览器，想想也是一个字，爽！不过要再熬熬夜研究一下flex技术了，以及后端支持的web服务器。<br>web服务器当然采用php了，在我的swMap引擎提供ice服务的后端，当flex请求到web时，php完成到swMap服务器的图形渲染请求。<br>当然map客户端的实现马上就要启动，封装成activx ocx,开发dll这些发布形式。<br><br>以上这些东东都实现了，做基础的移动位置服务的功能应该差不离了，而且考虑了多种系统服务框架模式<br>最后就是图形和导航技术的研究了。。。<br>继续熬夜。。。。。<br><br> <img src ="http://www.cppblog.com/socketref/aggbug/92367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2009-08-06 01:24 <a href="http://www.cppblog.com/socketref/archive/2009/08/06/92367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【地图新手】加速地图显示的考虑，请地图高手指正</title><link>http://www.cppblog.com/socketref/archive/2008/07/16/56250.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Tue, 15 Jul 2008 18:37:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2008/07/16/56250.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/56250.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2008/07/16/56250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/56250.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/56250.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US"><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">地图层的裁剪</span><span lang="EN-US">: </span><span style="font-family: 宋体;">原始的数据图层包含大量的</span><span lang="EN-US">feature</span><span style="font-family: 宋体;">信息，比如路径上存在大量的顶点</span><span lang="EN-US">vertex</span><span style="font-family: 宋体;">，由于</span><span lang="EN-US">vertex</span><span style="font-family: 宋体;">过密，导致绘制时消耗的时间过大，所以对地图数据要预处理，减化路径复杂度来加速绘制速度。自行编写处理算法，好像</span><span lang="EN-US">geos</span><span style="font-family: 宋体;">库有路径简化的实现，或者使用</span><span lang="EN-US">clib</span><span style="font-family: 宋体;">，</span><span lang="EN-US">slib</span><span style="font-family: 宋体;">处理</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US"><span>2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">设置图层可视范围</span><span lang="EN-US">: <span>&nbsp;</span></span><span style="font-family: 宋体;">每种图层是否显示要根据设置的可视范围来判别</span><span lang="EN-US">,</span><span style="font-family: 宋体;">没有达到指定的显示范围，层对象就是隐藏</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US"><span>3.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">相同类型图层对象子类化</span><span lang="EN-US">: </span><span style="font-family: 宋体;">道路可以分国道、省道及更小单位的对象，每种对象划分在不同的图层上，根据设定的可视范围来决定是否进行绘制</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US"><span>4.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span lang="EN-US">spatial indexed: </span><span style="font-family: 宋体;">选择地图数据的存储方式来加速访问图层数据。</span><span lang="EN-US">Qgis</span><span style="font-family: 宋体;">的效率很低，通过</span><span lang="EN-US">ogr</span><span style="font-family: 宋体;">库虽然能访问多种</span><span lang="EN-US">gis</span><span style="font-family: 宋体;">数据</span><span lang="EN-US">,</span><span style="font-family: 宋体;">但是当选择</span><span lang="EN-US">REct</span><span style="font-family: 宋体;">进行搜索时却是遍历图层所有对象</span><span lang="EN-US">(feature)</span><span style="font-family: 宋体;">，此法效率低下。</span><span lang="EN-US">Rtree indexed</span><span style="font-family: 宋体;">算法能改善此种效果，但目前尚无对此算法研究。选择空间数据库存储是个好的方法。对于地图集中式管理可以采用</span><span lang="EN-US">pgsql-postgis</span><span style="font-family: 宋体;">或者</span><span lang="EN-US">mysql-sptial db,</span><span style="font-family: 宋体;">或者</span><span lang="EN-US">oracle sde,</span><span style="font-family: 宋体;">发现微软</span><span lang="EN-US">sql-server 2005</span><span style="font-family: 宋体;">目前也有空间数据库引擎。</span></p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">对于本地文件型地图存储方式，观察到很多国内地图引擎产商采用自己的文件格式，一个省区的地图数据处理之后只有</span><st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="10" unitname="m" w:st="on"><span lang="EN-US">10M</span></st1:chmetcnv><span style="font-family: 宋体;">，目前尚无经历去研究此种存储方式，唯一简单的就是采用</span><span lang="EN-US">sqlite+spatialite</span><span style="font-family: 宋体;">来实现空间数据存储，其实现了</span><span lang="EN-US">ogc</span><span style="font-family: 宋体;">的部分</span><span lang="EN-US">spatial sql</span><span style="font-family: 宋体;">，看其介绍尚无</span><span lang="EN-US">rtree</span><span style="font-family: 宋体;">算法</span><span lang="EN-US">(builtin),</span><span style="font-family: 宋体;">可能对于超大的数据量的处理性能会差很多</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US"><span>5.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">缩放重绘：只有在缩放操作时才进行地图数据的查询加载</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US"><span>6.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">对于进行</span><span lang="EN-US">Pan</span><span style="font-family: 宋体;">操作时平滑的现实，采用图层显示区域缓存的方式。地图显示区域进行</span><span lang="EN-US">pan</span><span style="font-family: 宋体;">时，可能要对</span><span lang="EN-US">8</span><span style="font-family: 宋体;">个方向进行拖动，比如显示区域</span><span lang="EN-US">320</span><span style="font-family: 宋体;">&#215;</span><span lang="EN-US">240</span><span style="font-family: 宋体;">，那请求区域时请求</span><span lang="EN-US">320</span><span style="font-family: 宋体;">&#215;</span><span lang="EN-US">3</span><span style="font-family: 宋体;">，</span><span lang="EN-US">240</span><span style="font-family: 宋体;">&#215;</span><span lang="EN-US">3</span><span style="font-family: 宋体;">区域的</span><span lang="EN-US">feature</span><span style="font-family: 宋体;">对象，当往下拖动地图时上部的缓存区域将出现无效区域，完成拖放时将上部缓冲区域填充，此种方法如同</span><span lang="EN-US">openlayers</span><span style="font-family: 宋体;">技术。</span><span lang="EN-US">Qgis</span><span style="font-family: 宋体;">未采用此方式，修改可能涉及代码挺多。</span></p><img src ="http://www.cppblog.com/socketref/aggbug/56250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2008-07-16 02:37 <a href="http://www.cppblog.com/socketref/archive/2008/07/16/56250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习Qgis时又接触了个MapWindow</title><link>http://www.cppblog.com/socketref/archive/2008/07/10/55770.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Wed, 09 Jul 2008 18:23:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2008/07/10/55770.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/55770.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2008/07/10/55770.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/55770.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/55770.html</trackback:ping><description><![CDATA[MapWindow(http://mapwindow.org)<br>看了其运行效果，不错，mapwindow 6.0开始全线用 .net开发，这不得不让我觉得有点害怕了，是不是这家公司有被微软收购的意图啊。<br>据说mapwindow的整个代码量有15w行，真是个恐龙啊<br>MapWindow可能作为桌面系统对mapx的替代产品，具体功能有待研究<br>还是老老实实研究Qgis吧，之前也是从libroadnavi,saga一步步学习到现在的QGis<br><br>找到了QT4.4 for wnice的opensource代码，很是开心，嵌入式毕竟是一个长阶段的潮流，MapWindow可就做不到了<br><br><br><img src ="http://www.cppblog.com/socketref/aggbug/55770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2008-07-10 02:23 <a href="http://www.cppblog.com/socketref/archive/2008/07/10/55770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QGis读解。。。</title><link>http://www.cppblog.com/socketref/archive/2008/07/03/55269.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 03 Jul 2008 15:48:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2008/07/03/55269.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/55269.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2008/07/03/55269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/55269.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/55269.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span lang="EN-US">1.Qgsrenderer </span><span style="font-family: 宋体;">图层绘制器抽象基类</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;</span></span><span style="font-family: 宋体;">每个</span><span lang="EN-US">renderer</span><span style="font-family: 宋体;">只能绘制某一种适量图形对象，</span> <span lang="EN-US">Qgsrenderer ::mVectorType
</span><span style="font-family: 宋体;">定义了适量图层类型</span><span lang="EN-US">(QGis::VectorType)
,Qgsrenderer</span><span style="font-family: 宋体;">定义了作为一个绘图器的基本功能接口</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">QgsRasterLayer </span><span style="font-family: 宋体;">通过</span><span lang="EN-US">QgsSingleSymbolRenderer</span><span style="font-family: 宋体;">实现矢量对象的绘制</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">2</span><span style="font-family: 宋体;">．</span>
<span lang="EN-US">QgsMapLayer </span><span style="font-family: 宋体;">地图图层</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;</span></span><span style="font-family: 宋体;">图层类型</span><span lang="EN-US">: VECTOR,RASTER</span></p>
<p class="MsoNormal"><span lang="EN-US">2.1 QgsVectorLayer</span><span style="font-family: 宋体;">矢量图层</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">与</span><span lang="EN-US">QgsVectorLayer</span><span style="font-family: 宋体;">对应的就是</span><span lang="EN-US">QgsRasterLayer , QgsMapLayer</span><span style="font-family: 宋体;">的子类图层对象仅仅这两种。</span></p>
<p class="MsoNormal"><span lang="EN-US">2.2 QgsMapCanvasLayer </span><span style="font-family: 宋体;">画板图层</span></p>
<p class="MsoNormal"><span lang="EN-US">2.3 QgsMapLayerRegistry</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">存储当前所有地图层对象</span><span lang="EN-US">,</span><span style="font-family: 宋体;">提供</span><span lang="EN-US">Layer id</span><span style="font-family: 宋体;">查询</span><span lang="EN-US">MapLayer</span><span style="font-family: 宋体;">对象的功能</span><span lang="EN-US">mapLayer(layid)</span></p>
<p class="MsoNormal"><span lang="EN-US">2.4 QgsMapCanvasLayer</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>QgsMapCanvasLayer</span><span style="font-family: 宋体;">是</span><span lang="EN-US">qgis</span><span style="font-family: 宋体;">应用层的图层对象，用于村促跟用户交互的信息，它并不是</span><span lang="EN-US">Map</span><span style="font-family: 宋体;">核心数据对象</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">3.QgsFeature</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">图层特征对象。</span><span lang="EN-US">QgsFeature</span><span style="font-family: 宋体;">包含若干</span><span lang="EN-US">Attribute</span><span style="font-family: 宋体;">，一个</span><span lang="EN-US">QgsGeometry</span><span style="font-family: 宋体;">对象</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">QgsLine</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;</span>QgsLine</span><span style="font-family: 宋体;">由</span><span lang="EN-US">2</span><span style="font-family: 宋体;">个</span><span lang="EN-US">QgsPoint</span><span style="font-family: 宋体;">构成的线段</span></p>
<p class="MsoNormal"><span lang="EN-US">4. QgsMapRender </span></p>
<p class="MsoNormal"><span lang="EN-US">QgsMapCanvasMap</span><span style="font-family: 宋体;">利用此对象实现绘制，无子类实现。当</span><span lang="EN-US">canvas</span><span style="font-family: 宋体;">产生事件，诸如大小调整、移动、缩放等等请求时，</span><span lang="EN-US">QgsMapCanvas</span><span style="font-family: 宋体;">请求</span><span lang="EN-US">QgsMapCanvasMap</span><span style="font-family: 宋体;">进行刷新绘制，后者调用</span><span lang="EN-US">QgsMapRender::render()</span><span style="font-family: 宋体;">进行绘制图层。</span></p>
<p class="MsoNormal"><span lang="EN-US">Render(){</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>QgsMapRender</span><span style="font-family: 宋体;">内部保留图层名称数组，根据图层</span><span lang="EN-US">id</span><span style="font-family: 宋体;">到</span><span lang="EN-US">QgsMapLayerRegistry</span><span style="font-family: 宋体;">中获取图层对象，绘制图层从最底部开始。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">5.OgsMapCanvas</span><span style="font-family: 宋体;">图层绘制板</span></p>
<p class="MsoNormal"><span lang="EN-US">N</span><span style="font-family: 宋体;">个图层是绘制在</span><span lang="EN-US">QgsMapCanvasMap</span><span style="font-family: 宋体;">这个对象之上的，这个对象是</span><span lang="EN-US">Qt</span><span style="font-family: 宋体;">的绘制对象</span></p>
<p class="MsoNormal"><span lang="EN-US">QgsMapCanvasMap</span><span style="font-family: 宋体;">其实就是提供</span><span lang="EN-US">OgsMapRender</span><span style="font-family: 宋体;">的绘制缓冲，最终还是请求</span><span lang="EN-US">QgsMapRender</span><span style="font-family: 宋体;">进行图层绘制。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">6. QgsProviderRegistry</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Qgis</span><span style="font-family: 宋体;">的数据源作为一个</span><span lang="EN-US">provider</span><span style="font-family: 宋体;">将被登记在</span><span lang="EN-US">QgsProviderRegistry</span><span style="font-family: 宋体;">对象中</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">创建一个新的矢量图层</span> </p>
<p class="MsoNormal"><span lang="EN-US">QgsProviderRegistry</span><span style="font-family: 宋体;">中查找</span><span lang="EN-US">ogr</span><span style="font-family: 宋体;">的</span><span lang="EN-US">provider</span><span style="font-family: 宋体;">，创建一个</span><span lang="EN-US">ogr</span><span style="font-family: 宋体;">的矢量数据空间</span><span style="color: blue;" lang="EN-US">createEmptyDataSource<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color: blue;" lang="EN-US">QgsOgrProvider</span><span style="font-family: 宋体; color: blue;">作为</span><span style="color: blue;" lang="EN-US">QgsVectorDataProvider</span><span style="font-family: 宋体; color: blue;">的子类，</span><span style="color: blue;" lang="EN-US">QgsVectorDataProvider</span><span style="font-family: 宋体; color: blue;">作为接口被其他模块访问</span><span style="color: blue;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">new QgsVectorLayer(ogr){</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>new
QgsSingleSymbolRenderer()</span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">QgsMapToPixel </span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">地图单位到屏幕像素位置的转换，这个操作非常简单，根据设定的每像素地图大小单位来计算地图单位</span><span lang="EN-US">(world)</span><span style="font-family: 宋体;">到屏幕像素的转换，反之亦然</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">QgsProject </span><span style="font-family: 宋体;">、</span><span lang="EN-US">QgsProjectFileTransform</span><span style="font-family: 宋体;">、</span><span lang="EN-US">Qgsversion</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">这些类用于</span><span lang="EN-US">qgis</span><span style="font-family: 宋体;">项目信息管理之用，项目文件类型名</span><span lang="EN-US">.qgs,</span><span style="font-family: 宋体;">格式是</span><span lang="EN-US">xml</span><span style="font-family: 宋体;">。</span><span lang="EN-US">QgsProjectFileTransform</span><span style="font-family: 宋体;">用于不同版本的</span><span lang="EN-US">qgis</span><span style="font-family: 宋体;">的功能文件的转换</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">QgsSymbol</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">这个类一方面是实现绘制图层类型的</span><span lang="EN-US">Icon</span><span style="font-family: 宋体;">，</span><span lang="EN-US">Qgis</span><span style="font-family: 宋体;">中如果创建新的</span><span lang="EN-US">line</span><span style="font-family: 宋体;">矢量层，则这个层的图标显示在层显示树的节点的</span><span lang="EN-US">Icon</span><span style="font-family: 宋体;">就是用</span><span lang="EN-US">QgsSymbol</span><span style="font-family: 宋体;">绘制产生</span></p>
<p class="MsoNormal" style="text-align: center;" align="center"><span lang="EN-US"><!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style="'width:65.25pt;
height:54.75pt'">
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><img  src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg" v:shapes="_x0000_i1025" height="73" width="87"><!--[endif]--></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">另一方面</span><span lang="EN-US">,</span><span style="font-family: 宋体;">在编辑矢量图层时，添加的线段都有两端的节点点，</span><span lang="EN-US">QgsSymbol</span><span style="font-family: 宋体;">就是绘制这个节点</span> </p>
<p class="MsoNormal"><span lang="EN-US"><!--[if gte vml 1]><v:shape id="_x0000_i1026"
type="#_x0000_t75" style="'width:264.75pt;height:168pt'">
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image003.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><img  src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image004.jpg" v:shapes="_x0000_i1026" height="224" width="353"><!--[endif]--></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">矢量图层类型</span><span lang="EN-US">:</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;
</span>Point,</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;
</span>Line,</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;
</span>Polygon,</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">QgsMapTip</span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: 宋体;">图层地标提示。当鼠标在</span><span lang="EN-US">MapCanvas</span><span style="font-family: 宋体;">上移动时</span><span lang="EN-US">,MapTip</span><span style="font-family: 宋体;">被一个定时器驱动，这时</span><span lang="EN-US">MapTip</span><span style="font-family: 宋体;">将当前地图坐标作为中心点，围绕这个点产生一个选择区域</span><span lang="EN-US">(<span>&nbsp; </span>double searchRadius =
mpMapCanvas-&gt;extent().width() * (QGis::DEFAULT_IDENTIFY_RADIUS / 100.0 );)</span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: 宋体;">这个区域作为搜寻区域提交给</span><span lang="EN-US">ogr-provider</span><span style="font-family: 宋体;">查找地图的</span><span lang="EN-US">Feature</span><span style="font-family: 宋体;">对象</span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: 宋体;">再找</span><span lang="EN-US">Featrue</span><span style="font-family: 宋体;">的可显示的字段，然后用</span><span lang="EN-US">QToolTip</span><span style="font-family: 宋体;">进行显示。</span><span style="color: blue;"> <span lang="EN-US">QToolTip</span></span><span style="font-family: 宋体; color: blue;">最终是要被替换掉的</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<h3><span lang="EN-US">QgsFieldMap</span></h3>
<p class="MsoNormal"><span lang="EN-US">typedef QMap&lt;int, QgsField&gt;
QgsFieldMap;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">矢量图层的对象具有多个属性，可以在添加编辑对象时设置这些属性</span></p>
<p class="MsoNormal"><span lang="EN-US"><!--[if gte vml 1]><v:shape id="_x0000_i1027"
type="#_x0000_t75" style="'width:141.75pt;height:161.25pt'">
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image005.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><img  src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image006.jpg" v:shapes="_x0000_i1027" height="215" width="189"><!--[endif]--></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">attributeFields[CmtAttr] = QgsField(attr[CmtAttr],
QVariant::String, "text");</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">以上代码就可以添加一种属性类型</span><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<h3><span style="font-family: 宋体;">地图距离单位</span><span lang="EN-US">:</span></h3>
<p class="MsoNormal"><span lang="EN-US">METERS,</span></p>
<p class="MsoNormal"><span lang="EN-US">FEET,</span></p>
<p class="MsoNormal"><span lang="EN-US">DEGREES,</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Mbr : </span><span style="font-family: 宋体;">可能全称</span><span lang="EN-US"> Max boundary Rectangle</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<h3><span style="font-family: 宋体;">坐标转换</span><span lang="EN-US">: </span></h3>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>1.</span><span style="font-family: 宋体;">空间坐标转换</span><span lang="EN-US">: long/lat</span><span style="font-family: 宋体;">坐标投影到世界地图坐标</span> <span style="font-family: 宋体;">【</span><span lang="EN-US">QgsCoordinateTransform</span><span style="font-family: 宋体;">实现】</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>2.</span><span style="font-family: 宋体;">世界坐标转换到屏幕坐标【</span><span lang="EN-US">QgsMapToPixel</span><span style="font-family: 宋体;">实现】</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 7.5pt; font-family: 宋体; color: #009900;" lang="EN-US">//</span><span style="font-size: 7.5pt; font-family: 宋体; color: #009900;">数学宏</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">#define PI 3.1415926<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 7.5pt; font-family: 宋体; color: #009900;" lang="EN-US">//</span><span style="font-size: 7.5pt; font-family: 宋体; color: #009900;">角度转弧度</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">#define DEG_TO_RAD(ang) ((ang)*PI/180.0)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 7.5pt; font-family: 宋体; color: #009900;" lang="EN-US">//</span><span style="font-size: 7.5pt; font-family: 宋体; color: #009900;">弧度转角度</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">#define RAD_TO_DEG(rad) ((rad)*180.0/PI)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 7.5pt; font-family: 宋体; color: #009900;" lang="EN-US">//</span><span style="font-size: 7.5pt; font-family: 宋体; color: #009900;">取得<span lang="EN-US">x~y</span>之间任意一个值</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">#define RAND_RANGE(x,y) ((x) + rand() % ((y) - (x) + 1)))<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<h2><span lang="EN-US">GPX</span></h2>
<p class="MsoNormal"><span lang="EN-US"><a  href="http://www.gpsbabel.org/">www.gpsbabel.org</a>
</span><span style="font-family: 宋体;">是不同</span><span lang="EN-US">gps</span><span style="font-family: 宋体;">日志数据的通用解析和转换工具</span></p>
<p class="MsoNormal"><span lang="EN-US">gps log</span><span style="font-family: 宋体;">数据分类</span><span lang="EN-US">: </span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span lang="EN-US">Waypoints: </span><span style="font-family: 宋体;">我的行径上要路过的点。比如我去北京，顺便到徐州拜访朋友，所以途经的徐州是我要停留的</span><span lang="EN-US">waypoint</span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span lang="EN-US">Routes</span><span style="font-family: 宋体;">：</span> <span style="font-family: 宋体;">是指所有</span><span lang="EN-US">WayPoint</span><span style="font-family: 宋体;">的集合构成的线路</span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span lang="EN-US">Tracks</span><span style="font-family: 宋体;">：</span> <span style="font-family: 宋体;">我途经的路上所有走过的轨迹点</span><span lang="EN-US">(</span><span style="font-family: 宋体;">因该是最多的数据量</span><span lang="EN-US">)</span></p>
<p class="MsoNormal"><span lang="EN-US">WayPoint</span><span style="font-family: 宋体;">和</span><span lang="EN-US">route</span><span style="font-family: 宋体;">我理解为是面向应用的，而</span><span lang="EN-US">Track</span><span style="font-family: 宋体;">就是基础数据，是物理的记录</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">看看老外的注释</span></p>
<pre><span lang="EN-US">&gt;<em> a) waypoint</em></span></pre>
<pre><span lang="EN-US"><o:p>&nbsp;</o:p></span></pre>
<pre><span lang="EN-US">A geopoint with some special tags like name, comment and the like. </span></pre>
<pre><span lang="EN-US">Usually used to mark special locations as your home, a hotel or a </span></pre>
<pre><span lang="EN-US">geocache. Huge collections of gas stations, post boxes, shops and the </span></pre>
<pre><span lang="EN-US">like are called "points of interest" (aka POIs).</span></pre>
<pre><span lang="EN-US"><o:p>&nbsp;</o:p></span></pre>
<pre><span lang="EN-US">&gt;<em> b) track</em></span></pre>
<pre><span lang="EN-US"><o:p>&nbsp;</o:p></span></pre>
<pre><span lang="EN-US">A collection of geopoints recorded by your GPS device while traveling. A </span></pre>
<pre><span lang="EN-US">trackpoint doesn't have a name or comment, but it usually has a </span></pre>
<pre><span lang="EN-US">timestamp. This distibguishes a trackpoint from a waypoint.</span></pre>
<pre><span lang="EN-US"><o:p>&nbsp;</o:p></span></pre>
<pre><span lang="EN-US">&gt;<em> c) route</em></span></pre>
<pre><span lang="EN-US"><o:p>&nbsp;</o:p></span></pre>
<pre><span lang="EN-US">A collection of waypoints defining the route you want to pass while </span></pre>
<pre><span lang="EN-US">traveling. </span></pre>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p><img src ="http://www.cppblog.com/socketref/aggbug/55269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2008-07-03 23:48 <a href="http://www.cppblog.com/socketref/archive/2008/07/03/55269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Mapserver】 配置WMS 服务器</title><link>http://www.cppblog.com/socketref/archive/2008/07/02/55094.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Tue, 01 Jul 2008 18:12:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2008/07/02/55094.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/55094.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2008/07/02/55094.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/55094.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/55094.html</trackback:ping><description><![CDATA[MapServer安装之后并不具有WMS服务功能<br>所有的配置围绕着Mapfile进行<br>【http://mapserver.gis.umn.edu/docs/howto/wms_server】<br>1.判别当前MapServer是否支持WMS<br>#&gt;mapserv.exe -v <br>
MapServer version 4.6.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=PDF
OUTPUT=SWF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER
SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER
INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG<br>看到以上内容就ok了<br>2.修改mapfile<br>对于mapserver 5.0 的样例数据 workshop-50.zip<br>添加: <span style="font-family: monospace;"><br></span>PROJECTION<span style="font-family: monospace;"><br></span> "init=epsg:4269"<span style="font-family: monospace;"><br></span>END   <br>
<pre class="literal-block">"wms_onlineresource"  "http://192.168.14.65:8080/cgi-bin/mymap.exe?"<br>httpd.conf 添加<br>SetEnvIf Request_URI "/cgi-bin/mymap.exe" MS_MAPFILE=c:/gis/ms4w/Apache/htdocs/workshop-50/itasca.map  <br>路径不能加""哦<br>复制mapserve.exe 为mymap.exe<br>3.重新启动 httpd.exe<br>4.测试：<br>  jump或者qgis测试，添加wms层 ，browser添加 http://192.168.14.65:8080/cgi-bin/mymap.exe? <br>选择一些layer就可以查看喽<br></pre>
<br><br> <img src ="http://www.cppblog.com/socketref/aggbug/55094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2008-07-02 02:12 <a href="http://www.cppblog.com/socketref/archive/2008/07/02/55094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Mapserver】初试体验</title><link>http://www.cppblog.com/socketref/archive/2008/07/01/55082.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Tue, 01 Jul 2008 15:31:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2008/07/01/55082.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/55082.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2008/07/01/55082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/55082.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/55082.html</trackback:ping><description><![CDATA[Mapserver的安装介质可从 http://mapserver.gis.umn.edu下载<br>安装也非常简单，选择何时的服务http端口就可以了，这里我选择了8080<br>下载ms4w 5.0的App数据 workshop-5.0.zip<br>将其简单解压缩到 $apache/htdocs下即可；创建$(apache)/tmp目录<br>修改worksop-5.0/index.html文件，将其中 IMAGEPATH,IMAGEURL 修改为workship-5.0的路径即可<br><br>&nbsp;// EDIT THE NEXT 2 LINES TO MATCH YOUR SETUP<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var snippet = "IMAGEPATH 'C:/gis/ms4w/Apache/htdocs/tmp/'";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; snippet += " IMAGEURL '/tmp/'";<br>&nbsp; &lt;!-- EDIT THESE HIDDEN VARIABLES --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="hidden" name="map" value="C:\gis\ms4w\Apache\htdocs\workshop-5.0\itasca.map"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="hidden" name="program" value="/cgi-bin/mapserv.exe"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="hidden" name="root" value="/workshop-5.0"&gt;&nbsp;&nbsp;&nbsp; <br><br>来测试一下&nbsp; http://127.0.0.1/workshop-5.0,即可看到itasca.map了<br><br>好好研究一把mapserver,配置好wms/wfs server 看看用openlayers/Qgis的效果<br> <img src ="http://www.cppblog.com/socketref/aggbug/55082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2008-07-01 23:31 <a href="http://www.cppblog.com/socketref/archive/2008/07/01/55082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【OpenLayers】Vector编辑使用flash技术</title><link>http://www.cppblog.com/socketref/archive/2008/07/01/55081.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Tue, 01 Jul 2008 15:23:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2008/07/01/55081.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/55081.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2008/07/01/55081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/55081.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/55081.html</trackback:ping><description><![CDATA[如题，今天google是愁到这个问题<br>flash确实现在无处不在，所以不存在是否要求client browser安装已否，已经成了标配。<br>目前没有仔细研读过openlayers的实现代码，所以两者的结合会有哪些问题目前尚不能给出区分，不过openlayers图层的编辑Marker，确实是个头疼的问题，javascript再强，实现的难度还是人尽共知的，所以flash确实个是补充的好方法<br>花时间研究吧<br><br><img src ="http://www.cppblog.com/socketref/aggbug/55081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2008-07-01 23:23 <a href="http://www.cppblog.com/socketref/archive/2008/07/01/55081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几个优秀的图形相关开源项目</title><link>http://www.cppblog.com/socketref/archive/2008/04/04/46232.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 03 Apr 2008 18:40:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2008/04/04/46232.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/46232.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2008/04/04/46232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/46232.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/46232.html</trackback:ping><description><![CDATA[cairo<br>agg<br>wxArt2D<br>geos<br><br><br> <img src ="http://www.cppblog.com/socketref/aggbug/46232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2008-04-04 02:40 <a href="http://www.cppblog.com/socketref/archive/2008/04/04/46232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>