本文记录使用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里发布数据的时候指定错了图层。