系列链接:

Java web与web gis学习笔记(一)——Tomcat环境搭建

Java web与web gis学习笔记(二)——百度地图API调用

JavaWeb和WebGIS学习笔记(三)——GeoServer 发布shp数据地图

JavaWeb和WebGIS学习笔记(四)——使用uDig美化地图,并叠加显示多个图层


前言:uDig是一个 [open source](https://baike.baidu.com/item/open source/114160) (EPL and BSD) 桌面应用程序框架,构建在Eclipse RCP和GeoTools(一个开源的Java GIS工具包)上的桌面GIS(地理信息系统) ;是一款开源桌面GIS软件,基于Java和Eclipse平台,可以进行shp格式地图文件的编辑和查看;是一个开源空间数据查看器/编辑器,对OpenGIS标准,关于互联网GIS、网络地图服务器和网络功能服务器有特别的加强。uDig提供一个一般的java平台来用开源组件建设空间应用。 ——百度百科

一、下载uDig

可以从uDig官网下载,可以看到,对于Windows平台,1.5.0.RC1版本可以选择安装版和解压版,2.0.0只有解压版提供下载。这里选择2.0.0版本的解压版就好。

uDig界面是英语,可以用插件进行汉化,但我觉得没必要。如果的确有需要,参考:

https://jingyan.baidu.com/article/fc07f989bc2ec412ffe51904.html

从uDig的介绍可以看出,这是一个基于Java和Eclipse的开源桌面GIS软件。因此,想要使用uDig必须先安装Java,在前几篇文章里也提到过,具体方法在这里就不多说了。

而Eclipse相信Java开发者都不陌生,它是一个开源的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。尽管我们大多都将它当作一个集成开发环境(IDE)来使用,但Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE)。其核心功能(Eclipse RCP)提供了标准化的组件模型,包括菜单,工具栏等,也使得基于 Java 开发桌面应用也变得容易了很多。

尽管uDig是基于Eclipse RCP开发的,但当我们仅仅使用它进行地图美化时,并不需要安装并搭建eclipse的开发环境

当然,如果你需要通过uDig绘制地图符号,进行复制编辑等操作时(就像我们在ArcGIS的ArcMap上做的那样),则似乎需要搭建开发环境。至于开发环境如何搭建,可以参考如下两篇博客:

Udig开发环境搭建/入门教程

udig-1.4.0 开发环境搭建

二、 uDig加载数据

1. 启动uDig

首先启动uDig,如果使用的是安装版,直接双击快捷方式就好。如果是解压版,在文件目录下双击“udig_internal"即可。

2.创建项目

新建一个Project,可以理解为Eclipse中的WorkSpace。

3.新建地图

在项目名称上点右键,选择New Map,即可创建一个新的地图文档。

4.添加图层

在地图名称上点击右键,选择Add...,可通过各种数据源导入数据。这里以shp为例,选择Files。


可以看到我们的shp数据已经导入地图中了。uDig跟ArcMap操作类似,对图层单击右键,选择Zoom to layer即可缩放到图层。

三、为图层定义样式,美化地图

对于每一个图层,都可以单独配置样式。图层的样式是通过SLD进行描述的。相信接触过QGIS,或者开发过GIS软件(。)的人都比较熟悉。

SLD是风格化图层描述器(Styled Layer Descriptor)的简称,是2005年OGC提出的一个标准,标准在一定条件下允许WMS服务器对地图可视化的表现形式进行扩展。

SLD采用XML来配置地图图层渲染的可视化风格,可以设置过滤器,自定义图例等。其中rule是SLD最重要的一个元素,在rule中允许根据某个给定的字段/参数(使用过滤器)对数据集进行分类,并对该分类设置样式。简单的说,一个rule就是一种分组渲染规则(例如分级设色地图中的某一中颜色)。关于SLD的具体内容,我会在另一篇博客详细说明。

1.配置图层样式

选择需要配置的图层,点击右键,Change Style(这里以面要素为例)

在Style Editor界面可以对点线面的样式进行配置。这里打开的是面要素的Style Editor,因此不能选择左边的Lines和Points,嗯这很合理,对点、线要素同理。Theme中可以根据属性字段进行分级/分类渲染(此时每一个级别/类别就对应了一个rule),相当于ArcMap中对图层的Symbology进行设置。

关于样式的具体配置方法,几乎都与ArcMap类似,在这里不做过多介绍。配置一个你觉得好看的地图就好啦!


值得一提的是:

如果想要在图中显示注记,有两种方式:

​ (1)第一种方式如下图,对每一个rule分别配置Labels,可以实现每一种rule有不同样式的注记。如果shp数据含有中文,一定要注意选择中文字体,并更改字符的编码方式为GB2312或GBK,否则会出现乱码。

​ (2)第二种方式在Simple Featrue里面设置Label,设置方法同理,此时的注记应用于整个图层而非某一个rule。同样要注意中文的问题。

2.导出SLD

在Style Editor中选择XML选项卡,可以看到图层样式的SLD。如果数据有中文,需要将

encoding="UTF-8"

改成

encoding="GBK"encoding="GB2312"

左下角export可以导出SLD文件,但为了避免不必要的编码问题,这里建议直接复制文本框中的XML文档内容。

四、添加Style到GeoServer

打开GeoServer页面,选择数据的Styles,然后选择Add a new style

在接下来出现的页面中设置Style的各项参数。将复制的SLD内容粘贴到下方的文本框,或者使用图中导入SLD文件并上传的方法(不推荐)。然后保存Style即可。

然后再数据的图层中,找到我们创建的Style所对应的图层,点击图层名称。

在”发布“选项中找到WMS Settings,修改默认Style为我们新建的Style即可。


在Layer Preview预览图层,可以看到,该图层已经具有我们配置好的样式了。

注意:如果在预览时无法显示地图,或者出现中文字符乱码,可能是由于数据源的编码方式和SLD的编码方式不一致导致,具体处理方法,参考另一篇博客:GeoServer style中文乱码解决方法

五、叠加显示多个图层

在GeoServer中发布的图层,通过Layer Preview查看,只能看到当个图层效果。但我们的地图往往是多个图层叠加的结果。想要查看叠加后的结果,有两种方法:

1.修改请求参数

在浏览器地址栏可以看到Layer Preview预览图层效果的URL是:

http://localhost:8080/geoserver/xjs/wms?service=WMS&version=1.1.0&request=GetMap&layers=xjs%3ABoundaryChn2_4p&bbox=73.44696044921875%2C6.318641185760498%2C135.08583068847656%2C53.557926177978516&width=768&height=588&srs=EPSG%3A4326&format=application/openlayers

其中,请求参数的layers=xjs%3ABoundaryChn2_4p定义了当前访问的图层名

(这里的%3A是指十六进制3A所对应的ASCII字符,即 " : ",也就是说图层名为xjs:BoundaryChn2_4p)

因此,对于多个图层的叠加显示,只需要在layers参数中使用" , "将多个图层名分隔开即可。

例如:layers=xjs%3ABoundaryChn2_4p,xjs%3ABoundaryChn1_4l,xjs%3ABoundaryChn2_4l

2.创建图层组

将已发布的多个图层创建为一个图层组,在Layer Preview预览时即可作为一个目标进行预览,这样也能实现图层的叠加显示。

具体操作如下:



创建完毕后即可在Layer Preview中对该图层组进行预览



写在最后:uDig是一个开源桌面GIS软件,使用它美化地图并发布到GeoServer的实质是利用SLD规范对WMS服务进行扩展。因此,配置图层样式Style的方式不一定拘泥于uDig一种。我们常用的ArcMap其实也能够配置Style,只是他配好的图层样式并不保存在shp中,而是保存在mxd或者msd文件中。因为ArcGIS是一个商业软件,不能直接输出sld文件。我们可以试用一些插件将mxd文件转成sld,这里可以给大家分享一个:

链接:https://pan.baidu.com/s/1hvnQBhEGBp2oPk-cOYttaQ

提取码:5l1f

当然,QGIS等开源软件也支持直接导出SLD文件。

JavaWeb和WebGIS学习笔记(四)——使用uDig美化地图,并叠加显示多个图层的更多相关文章

  1. JavaWeb和WebGIS学习笔记(七)——MapGuide Open Source安装、配置以及MapGuide Maestro发布地图——超详细!目前最保姆级的MapGuide上手指南!

    JavaWeb和WebGIS学习笔记(七)--MapGuide Open Source安装.配置以及MapGuide Maestro发布地图 超详细!目前最保姆级的MapGuide上手指南! 系列链接 ...

  2. JavaWeb和WebGIS学习笔记(六)——使用ArcGIS for Server发布地图服务

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  3. JavaWeb和WebGIS学习笔记(五)——使用OpenLayers显示地图

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  4. JavaWeb和WebGIS学习笔记(三)——GeoServer 发布shp数据地图

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  5. Arcgis api for javascript学习笔记(4.5版本)-三维地图并叠加天地图标注

    1.三维地图实现 在官网的demo中就有三维地图的实现,如下图所示 <!DOCTYPE html> <html> <head> <meta charset=& ...

  6. Java web与web gis学习笔记(二)——百度地图API调用

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  7. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  8. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  9. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

随机推荐

  1. 开源三轴云台EVVGC(simple BGC)分析

    一. 主程序分析 主程序结构清晰,流程如图所示,下面将对每个部分做详细分析 二. 系统初始化 系统初始化部分的流程如上图所示,下面对每部分做具体分析 1. 时钟初始化 该部分主要是使能DWT,用DWT ...

  2. 记-Windows环境下Prometheus+alertmanager+windows_exporter+mtail监控部署

    1.概述 最近因项目需要统计服务的负载情况及机器的负载情况,但是项目里面却没有相关统计而服务所在的机器也没有相关的监控,因为工期原因就选择了相对轻量级的prometheus方案.其中windows_e ...

  3. SSL的作用?

    SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证.SSL协议要求建立在可靠的传输层协议(TCP)之上.SSL协议的优势在于它是与应用层协议独立无关的 ...

  4. 为什么需要消息系统,mysql 不能满足需求吗?

    1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据 丢失风险.许多消息队列所采用的& ...

  5. 使用conda管理python环境和包

    操作系统:CentOS7使用virtualenv管理python虚拟环境virtualenv是一款轻量级第三方虚拟环境管理工具,不像Anaconda大小达上百M,virtualenv大小只有10M左右 ...

  6. jdk 8 HashMap源码解读

    转自:https://www.cnblogs.com/little-fly/p/7344285.html 在原来的作者的基础上,增加了本人对源代码的一些解读. 如有侵权,请联系本人 这几天学习了Has ...

  7. C++中类所占的内存大小以及成员函数的存储位置

    类所占内存的大小是由成员变量(静态变量除外)决定的,虚函数指针和虚基类指针也属于数据部分,成员函数是不计算在内的.因为在编译器处理后,成员变量和成员函数是分离的.成员函数还是以一般的函数一样的存在.a ...

  8. Anaconda 怎么安装cv2

    Anaconda run python程序的时候,如果有import cv2, 但是遇到报错的时候, 可以考虑在anaconda 中安装opencv, 安装过程非常简单. 什么是opencv , op ...

  9. c/c++中的i++和++i的区别

    使用 i++ vs. ++i i++是先赋值再加1 ++i是先加1再赋值 到目前为止,你已经学习了如何编写下面这样的 C++ for 循环: for (int i = 0; i < 10; i+ ...

  10. 纯干货数学推导_傅里叶级数与傅里叶变换_Part4_傅里叶级数的复数形式