简单介绍下开源GIS桌面开发组件

上一篇 / 下一篇  2008-05-30 22:08:35

查看( 1144 ) / 评论( 15 )

看到前面一篇SharpMap的帖子,刚好这段时间有个项目要求使用开源GIS,并且分析项目需求后觉得比较适合用C/S结构。如是开始搜寻合适的开源GIS组件。

由于是做客户端的开发,所以我一开始就没考虑Java平台。其实Java平台的开源项目更加活跃,JTS,GeoTools等项目都已经非常成熟。

比较遗憾的是Windows平台上可用的开源GIS项目实在是很少,我搜索到比较有影响力有:

1.MapWindow,一个桌面GIS软件,提供C++开发的ActiveX控件二次开发使用,自己的GUI界面是用VB.Net开发,更新很活跃,而且目前有一个很早期的.Net版本。使用它的桌面软件,感觉还不错,并且由于有插件机制,功能上也能满足大部分需求了。然后看了网站上提供的文档,感觉ActiveX控件提供的接口比较不舒服,而且功能上也相对有限,不过它的论坛好像还比较活跃。MapWindow的更新还是很活跃的,不过它的ActiveX控件用来做二次开发还不是特别合适,期待.net版本早日到来。

2.SharpMap,基于.net的GIS组件,同时支持WinForm和Web两种平台,由于我主要关心桌面的开发,对其Web的支持没怎么关心。目前网站上提供两个版本下载,0.9正式版和2.0beta1,我更新了几天它的2.0版本的代码库,发现2.0版本的API还处在非常不稳定的状态,经常有较大的变动。于是转向0.9,认真研究了一下,觉得它的代码量较少,虽然文档不多,但是由于接口设计比较清晰简单,使用和扩展也比较方便,在没发现其他更好的开源项目后,决定使用这个的0.9版本。不过从这段时间的使用情况来看,它的功能相对较弱,很多功能都需要自己扩展,比如其自身的空间查询功能非常少,还有它自带的MapImage控件也过于简单,实际使用需要自己开发地图显示控件。

3.NetTopologySuite,提供拓扑操作支持,可以认为是JTS的.net版本,项目已经很久没更新过了。为了扩展SharpMap的空间查询能力,我也使用了这个库。最开始是在SharpMap的网站上看到有提供的对NetTopologySuite支持的代码,下载这个代码回来使用后发现不能支持NetTopologySuite最新的版本,并且看了它的代码后认为效率上会有严重问题,最后修改了它的部分代码,并自己重新封装了部分基本的空间查询操作,目前来看,效果还可以,不过在大数据量的情况下效率依然不佳。

4.PostGIS,这个就不多说了,提供PostgreSQL的空间数据支持。在俺的这个程序中现在同时支持Shp文件和PostGIS,如果后期遇到性能问题,就将数据全部转换到PostGIS中,希望至少可以解决查询时的效率问题。SharpMap也有热心人提供的对PostGIS提供支持的代码,不过这也是比较老的代码了,使用的数据驱动是一个已经停止更新的项目,并且代码也并不完善。(呵呵,有一个好明显的Bug啊。。)

这四个是目前我认真了解过了的项目,其他的还有一些,比如MsSQLSpatial等等,不过我都没仔细看过。

最后顺便问个问题,关于Shp文件的sql查询。我搜索了一下shp文件操作的问题,并且看了sharpMap和另一个开源的ShpLib的实现,都没有提供对Shp文件的SQL查询实现,从Shp文件的结构来看,它的空间信息和属性数据是顺序存放的,用顺序位置来关联的,虽然能直接使用dbase的数据驱动访问属性数据库,执行SQL语句,但获取到的属性数据无法和空间坐标关联,但是ArcGIS里面却是可以做到的。最后在MapWindow的代码里面找到一个实现方案,它将shp文件所有的数据加载到.Net的一个DataTable中,然后调用DataTable的Query方法来执行SQL表达式,由于是加载了所有的数据,所以其在数据中顺序ID就可以获取到,然后就可以去获取空间信息。但是这种实现存在很明显的效率问题,一张10万条数据的表全部载入到内存中?请各位指点有没有更好的解决办法。


TAG:

sunshine320的个人空间 sunshine320 发布于2008-05-31 17:15:28
支持开源,但现在还没有开始研究开源
Maplite maplite 发布于2008-05-31 18:30:43
总结的不错。
如果熟悉C++的话还可以考虑考虑mapnik,完全跨平台的,图像渲染采用AGG。GIS内核是GEOS,相当于geotools的C++版。

最后你这个问题可以考虑采用sqlite,把shp文件和dbf导进去。
yishh的个人空间 yishh 发布于2008-05-31 20:40:39

QUOTE:

原帖由 maplite 于 2008-5-31 18:30 发表
总结的不错。
如果熟悉C++的话还可以考虑考虑mapnik,完全跨平台的,图像渲染采用AGG。GIS内核是GEOS,相当于geotools的C++版。

最后你这个问题可以考虑采用sqlite,把shp文件和dbf导进去。
sqllite最初也考虑过,但是试用之后发现,由于它提供的是一个扩展模块,,NET的数据驱动无法访问此功能。从它的网站上看,似乎目前只提供了PHP的开发库。

至于C++,自从毕业后一直从事Java方面的WebGIS开发。现在看到C++代码里面的->和::就头疼的不行 .不过这个mapnik似乎是个不错的东西,好像支持python,有时间好好看看。

[ 本帖最后由 yishh 于 2008-6-1 09:50 编辑 ]
Mars的自语 maweifeng 发布于2008-06-01 00:20:22
前些日子看到mapnik时,还记得什么时候给maplite推荐 mapnik呢,呵呵。
MapWindow是类似MapX的接口风格,开始时会不适应,不过用习惯了就好了。
Maplite maplite 发布于2008-06-01 13:44:51
sqllite最初也考虑过,但是试用之后发现,由于它提供的是一个扩展模块,,NET的数据驱动无法访问此功能。从它的网站上看,似乎目前只提供了PHP的开发库。
==================================
不知道你说的扩展模块是什么意思?
sqlite有C#包装的NET版
yishh的个人空间 yishh 发布于2008-06-01 17:17:32

QUOTE:

原帖由 maplite 于 2008-6-1 13:44 发表
sqllite最初也考虑过,但是试用之后发现,由于它提供的是一个扩展模块,,NET的数据驱动无法访问此功能。从它的网站上看,似乎目前只提供了PHP的开发库。
==================================
不知道你说的扩展模块 ...
我指的是http://www.gaia-gis.it/spatialite/ 这个。你的意思是使用OGR+SQLLite吗?

[ 本帖最后由 yishh 于 2008-6-1 17:52 编辑 ]
Maplite maplite 发布于2008-06-02 14:17:55
SpatiaLite是sqlite更高层次的封装,扩展了很少的空间操作函数,也就是说目前实用价值并不大,很多东西还得自己写。
我的看法是,你采用sqlite来存储管理你的属性和空间数据就可以了,说白了就是你想要的不是全部读入内存而作为一个持久化的存储数据文件而已,至于空间数据的二进制格式,是否要采用OGR或去支持OGC,就看你自己意愿了。
yishh的个人空间 yishh 发布于2008-06-02 20:17:25

QUOTE:

原帖由 maplite 于 2008-6-2 14:17 发表
SpatiaLite是sqlite更高层次的封装,扩展了很少的空间操作函数,也就是说目前实用价值并不大,很多东西还得自己写。
我的看法是,你采用sqlite来存储管理你的属性和空间数据就可以了,说白了就是你想要的不是全部读 ...
哦,明白了。如果是这样的话那我还是选择PostGIS比较好。多谢多谢
metaboy发布于2008-06-03 20:29:36
回复 8# 的帖子
有些开源的软件的架构本来就存在着问题,想基于J2EE的Geoserver,其读取数据就是将数据全部写到内存里面,无法作为一个持久化的存储数据文件,这种问题该么样解决啊??
yishh的个人空间 yishh 发布于2008-06-05 15:43:47

QUOTE:

原帖由 metaboy 于 2008-6-3 20:29 发表
有些开源的软件的架构本来就存在着问题,想基于J2EE的Geoserver,其读取数据就是将数据全部写到内存里面,无法作为一个持久化的存储数据文件,这种问题该么样解决啊??
我觉得这种服务器端的东西读取全部数据到内存是合理的,这样可以提高服务响应的效率。对于现在的服务器而已,内存大小应该不会成为瓶颈。
问空间 gem_tang 发布于2008-06-18 21:01:10
  大家探讨的很好,加亮!

人无完人,OpenSource程序一般是某一个或几个人主刀写的,所以程序也无完程序。
暂且这么推论吧。

从GISer的角度,都想借鉴或者是发明最牛的空间算法来解决一定的问题;
从纯科班程序员的角度,希望用最先进的计算方法来弥补GIS理论算法方面的不足;
从Project Leader的角度,希望用最少的人力、时间、资源成本来完成还算过得去的功能;

这一切都是无止尽、无法调和的,看似无奈,从我的工作经验来看,倾向于第2种,因为现在的IT手段今非昔比,而学校里的教科书和前几年的OpenSource已经有点儿跟不上形势,纯科班的GISer出来比较吃亏,如果想吃GIS的技术饭,个人觉得还是应该在计算机上下点儿真功夫!
一个道家的程序员的空间 linux23 发布于2008-06-19 09:05:42

QUOTE:

原帖由 metaboy 于 2008-6-3 20:29 发表
有些开源的软件的架构本来就存在着问题,想基于J2EE的Geoserver,其读取数据就是将数据全部写到内存里面,无法作为一个持久化的存储数据文件,这种问题该么样解决啊??
不可能,如果数据有两G(这种数据有一大票),java的那点内存怎么够用? 还要手动调。虽然我没有研究过里面具体的代码,但是凭直觉,应该是不可能。
bigyu发布于2008-06-26 09:41:16
来参观下
支持POSTGIS,也期待MsSqlSpatial
问空间 gem_tang 发布于2008-06-29 19:30:22
   
上级别的服务器 内存至少4G
花一点点钱来买个内存条 VS 一个高级程序员花一个月来优化Java代码
老板当然算得过来
icuit发布于2008-08-04 12:08:00
有一个QGIS也还不错
支持shp,tab,及OGC的格式,还有WMS
数据库用POSTSQL
可以做数字化

C++,QT的库,所以跨平台也没问题.

只是觉得openGis这种
客户端工具跨平台没什么意思
倒是觉得主要是因为用的库是Free and 跨平台的所以才跨平台


至于楼主提到的支持TSQL的问题
如果真想用SQL方便,不如直接把属性数据存在数据库里
在文件上用SQL,何必折腾自己呢?
我来说两句

(可选)

日历

« 2008-08-21  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 1671
  • 日志数: 6
  • 建立时间: 2008-01-24
  • 更新时间: 2008-08-14

RSS订阅

Open Toolbar