GIS相关问题记录

本文记录使用Java处理GIS数据过程中遇到的问题和解决方法。

1、uDig里创建新图层

uDig is an open source (EPL and BSD) desktop application framework, built with Eclipse Rich Client (RCP) technology.

我用uDig版本1.1.1,找了很久才找到怎样创建(而不是“添加”)一个新图层,感谢HXY,应该是在主菜单里选择Layer->Create。 主菜单File->New->New Layer打开的实际是“添加”图层对话框,而在Map的右键菜单里也只有Add...而没有Create。在Layer的右键菜单里倒是有Operations->Create Feature Type,但当时我没把它和Create Layer联系起来,而且它上面还有一个Add Feature Type菜单项,实现的是一模一样的功能,不知道为什么要设置两个不同名字。感觉uDig的UI在“User Friendly”方面还有很大的改进空间。

2、uDig对已有的Layer添加(修改)Attributes

可通过Layer的Operations->Reshape操作实现,具体步骤见uDig帮助的Users Guide: Adding a column to a shapefile参考链接

3、在用OpenLayers展示WMS(Web Map Service)地图数据时指定所需要的样式(Style)

一般我们用GeoServer作为服务器的时候,在后台已经为每个地图都指定了对应的样式。客户端如果需要改变这个缺省的风格,可以通过styles参数指定。对OpenLayers来说,就是在创建OpenLayers.Layer.WMS对象的时候指定这个参数,它的值必须是服务器上已经存在的风格的名称。下面是一个例子:

var myLayer =new OpenLayers.Layer.WMS(  
                "My Layer", "http://127.0.0.1:8080/geoserver/wms",
                {
                    srs: 'EPSG:4326',
                    width: '800',
                    styles: 'another_style_registered_on_the_server',
                    height: '494',
                    layers: 'topp:CHN_water_areas_dcw',
                    format: 'image/png',
                    tiled: 'true',
                    tilesOrigin : "85.65425605773926,18.746308612823487",
                    transparent: true                },
                {
                    'opacity': 0.50, 'isBaseLayer': true, 'wrapDateLine': true, 'buffer':0
                }

            );

暂时还没有找到不需要事先在服务器上注册样式实现这个目的(即完全在客户端控制图层显示)的方法,而OpenLayers的样式控制功能里的StyleMap只能实现对Vector类型图层的显示控制。另一种可能的方式是动态生成SLD(Dynamic SLD),似乎(因为在OpenLayers的文档里没有提到)WMS有一个"SLD"参数可以指定使用任意地址的SLD,这个地址有一些讨论,但我加上这个参数后没有试出任何效果。

4、在GeoServer的样例页面里查看发布的地图时提示错误信息_The requested Style can not be used with this layer_. The _style_ specifies an attribute of XXX and the _layer_ is: topp:xxxx

原因是图层topp:xxxx里不包含样式文件(SLD)里引用的"XXX"属性,例如样式里指定地图上根据人口对不同国家着色,但图层里没有人口这个属性,就会出现这个异常。多数情况是在GeoServer里发布数据的时候指定错了图层。