geoserver+mapwindow
最近想利用开源的项目自己做一个地图引擎,提供简单的定位,标注,画点,画线功能。把遇到的问题记在这里。
地图服务器用的是geoserver,关于它的配置网上很多,可以参考http://blog.csdn.net/metaboy/archive/2008/04/15/2292392.aspx。但注意一点,在添加地图数据的时候,如果数据包含中文需要把字符集设置成GB2312,不然可能出现中文显示乱码。
如图:
mapwindow里已经实现了标注,画点,画线,计算长度,计算面积,读取本地shp文件,从WMS获取数据等功能,所以决定先研究一下,再实现自己的地图引擎。
通过配置geoserver,发布地图后,在layer preview里可以看到自己的地图预览。但通过这种方式获得地图数据速度很慢,每次拖动,放大/缩小地图都要向服务器重新发请求,服务器根据请求的坐标,大小重新生成图片发送到客户端。geoserver自带了geowebcache,可以对图片切片缓存,网络访问时直接返回切好的图片,从而加快响应速度。要使用geowebcache只需在geoserver/WEB-INF/web.xml里加入
指明一下缓存图片路径即可。然后重启一次tomcat。
进入http://localhost:8080/geoserver/gwc/demo可以看到你所发布的所有图形,直接点击EPSG:4326可以看到预览,但这个预览是访问缓存目录获取图片,如果没有这个图片再由geowebcache向geoserver请求图片,保存在缓存文件夹,并发送给客户。也可以事先对数据进行切片。点seed this layer设定好切片的线程数,是否覆盖,切片等级及图片范围提交,就可以开始切片了,所花的时间和你设定的等级有关。
用mapwindow访问geoserver发布的地图。需要启用插件里的Online Data Plug-in,点击那个地球小标记开始add online data。server下拉表里有公网上的一些免费WMS地址,你可以连接添加一把试试效果。重要的是把我自己geoserver的WMS添加进来,点击add new弹出一个布局有问题的对话框(我使用的是mapwindow 4.8.1),填入描述和服务器地址。默认情况下服务器地址是http://localhost:8080/geoserver/ows?service=WMS&request=GetCapabilities(未使用web cache的WMS)和http://localhost:8080/geoserver/gwc/service/wms?service=WMS&request=GetCapabilities(使用了web cache的WMS)。如何获取到这两个地址呢?在你的geoserver首页,如图:
对图中红框的链接右键->复制链接地址。即可得到WMS的地址,而web cache的链接一般就是在正常链接里加入gwc/service/所得。
连接成功后,点add server会出现问题,弹出一个向开发者提交BUG的界面。这是由于MapWindow/Plugins/OnlineDataPlugin/ODPServers.xml的第三行&符号有问题,修改成&就好了。现在再点添加服务器,就成功了。选择你要添加的地图,即可在主窗口中出现一个新的图层,内容就是你选择的地图。
添加经过web cache的图片可能不成功,原因就是切片默认用的长宽是256*256,而mapwindow获取图片是根据当前窗口大小来请求的,如果窗口大小不合适就会返回400: Resolution (0.012982080853171873) is not with 5.0% of the closest grid resolution (0.010986328125)。如果把窗口大小调整成和256*256差不多大小,就可以获取到一张图片。
但现在离目标还非常远,mapwindow获取在线数据只在添加时获取一次,之后的放大,缩小,移动都是对这一张图片进行,不会重新向WMS提交请求。
接下来还是得慢慢研究mapwindow的源码,有空再来记录。
转载自:https://blog.csdn.net/cristing_hu/article/details/5661067