使用GeoTools读取和绘制Shapefile格式 — (学习GIS【1】)
ESRI Shapefile(shp)是一种美国ESRI公司开发的空间数据开放格式。目前,该文件格式已经成为了地理信息软件界的一个开放标准,这表明ESRI公司在全球的地理信息系统市场的重要性。
看了一些资料,对其中一句话比较感兴趣 “Shapefile文件不含有拓扑数据结构”
【由此带来其他几个问题】
什么是拓扑?
什么文件格式包含拓扑数据结构?
为什么其Shapefile文件不含拓扑数据结构(mapinfo公司的mif/mid文件格式好像也不含有)?
为什么有拓扑数据机构的文件格式要包含拓扑数据结构?
找到一些资料,比较简单,但很好的解释了以上几个问题,一下是资料截图
上面有点偏题了:P
因为在自己写得一个GIS框架中需要支持对Shapefile格式的支持,所以才需要读写Shapefile格式
因为解析过mapinfo的mif/mid文件格式,所以觉得也不会太复杂,但是因为时间比较紧,所以希望找到能够读写shapefile格式的解决方案,那就省的自己写了:)
在网上搜索了半天,找到了GeoTools.
我是在这个页面找到这个工具的,有兴趣的朋友可以看看,里面有很多关于Gis的软件
http://zh.wikipedia.org/w/index.php?title=GIS%E8%BB%9F%E4%BB%B6%E5%88%97%E8%A1%A8&variant=zh-cn
GeoTools:Geo Tools是自由的基于Java的制图工具包,允许在网页浏览器上交互式浏览地图,而无需专门的服务器端的支持。
然后在GeoTools主页下载了四个包(版本是geotools-2.5.5)
geotools-2.5.5-src.zip geotools-2.5.5-guide.zip geotools-2.5.5-doc.zip geotools-2.5.5-bin.zip
解压完才大吃一惊,里面的源代码数量大大超过我的想象(很多咳)shapefile的读写功能只是其中一小部分
看了下资料,geotools的历史已经很长时间,而且这个项目现在还是激活的:)看来这个解决方案应该没有问题了
首先是读取shapefile
http://docs.codehaus.org/display/GEOTDOC/04+How+to+Read+a+Shapefile
我参考是上面的页面,在页面里整个过程有点繁琐,如果想快点把程序,直接打开JBudiler,创建一个新工程,然后把geotools-2.5.5-bin.zip解压后里面的build目录下的所有jar包都包进工程,然后复制上面页面的例子程序直接创建一个测试类就可以跑了
有几个警告就不理它了~~~~~~
如何通过GeoTools绘制Shapefile
http://docs.codehaus.org/display/GEOTDOC/09+ShapeLab
主要通过上面这个地址里面的例子,但运行上面页面中的例子程序有点问题,所在在这里记录一下如何解决问题的以做备忘
在运行上面例子程序ShapeLab.java时缺少一个JMapPane类,页面中下面的回复好多人都是出现这个问题,这个也做了回复,好像因为新版本没人维护这个类了,所以在2.5.5中没这个类了,以前2.3.X有这个类的,那怎么呢,重新下载2.3.X?
这个办法不太好,好像用老版本毕竟不是太爽,那就只好把这个类下载下来~~
上面这个网站专门搜索代码的,不错,我在里面搜索到了JMapPanel,还搜索到了JMapPanel依赖的三个类
HighlightChangedEvent HighlightChangeListener HighlightManager
最后ShapeLab.java终于运行起来了,我读取了一个shp格式文件,运行效果如下:
这是什么河呢:)很容易猜的到吧~~~~~~~~~~~
转载自:https://blog.csdn.net/snailjava/article/details/4255156