GeoServer3D 开发文档
1、文档简介
本文主要介绍 GeoServer 开发的环境配置,因为主要涉及到 W3DS 模块的集
成与扩展,所以后边针对 W3DS 模块的集成做些介绍。
2、准备工作
1、 下 载 源 码 http://geoserver.org/display/GEOS/GeoServer+2.4.0 目 前
最新最稳定的版本是 2.4.0;
2、 下载工具,JDK,Eclipse,Maven,SVN,这些东东可以去官网下载,
3、GeoServer 源码导入 eclipse
这个具体步骤可以按照源码中 developer_README.txt 文件中的步骤来,比较
费时,因为构建过程中要下载很多 jar 包,需要注意一下几点:
1、 如果你想构建 eclipse 工程可以不用执行 mvn (clean) install 命令(编
译命令),可以直接使用 mvn (clean) eclipse 命令就可以成构建 eclipse
工程,可能会出现很多文件 download 失败,需要多尝试几次;
2、 若是有关于 test 的错误,那么使用 mvn -DskipTests clean eclipse 跳
过 test。这一过程主要是下载 eclipse 要用到的 jar 以及一些 pom 文件
( 通 常 会 下 载 到 C/ 下 的 某 个 .m 文 件 夹 下 , 像 我 的 :
C:\Users\lenovo\.m2\repository,这是 maven 默认的本地仓库位置,
你可以进入 Maven 安装目录下的 conf 子目录中,打开 settings.xml
进行配置修改,默认的本地仓库更改到 D: /.m2/repository 这个目录,
d:/.m2/repository);
3、 如果你还遇到其他的问题的话可以自己查一下,构建 eclipse 项目之后
就可导入 eclipse 环境中了,步骤是 file—import—existing project into
workplace,接下来选择源码根目录就行了;
4、 Start up Eclipse.Got to: Windows -> Preferences ,In the wondow
that pops up click on Java -> Build Path -> Classpath VariablesOn
the Classpath Variables panel, select New Define a new variables
called M2_REPO and set it to your local maven repository. (for
windows
and
Settings/username/.m2/repository)
C:/Documents
it
would
be
5、 还可能会有字符编码的错误,你自己在源码中自己改一下就行了
6、 运行 web-app 包中的 start 类,就可以启动 GeoServer 服务了,访问
http://localhost:8080/geoserver
4、W3DS 模块集成到 Core 中
如果你需要 W3DS 模块的集成与扩展工作,还需要做以下的配置文件和源码
的修改工作,W3DS 源码的结构有三部分组成:W3DS 模块在 community 中。
core, those modules which GeoServer requires to function and are distributed
with the main GeoServer distribution;
extension, plug-ins available as separate artifacts from the main distribution;
community, experimental or unstable modules which are not part of the release
process;
4.1、修改 pom.xml 文件
首先将 W3DS 模块从 community 中移到 GeoServer 根目录内,需要修改四个
pom.xml 文件;
1、 因为需要把 W3DS 模块从 community 中移到 GeoServer 根目录中,所
以 community 包的根目录的 pom.xml 文件做以下修改:该文件夹中的
232 行到 237 行删掉:
w3ds
w3ds
2、 W3DS 包中的 pom.xml 做修改:文件中第 7 行和第 10 行作如下修改,
红色字体是修改过的。
org.geoserver
geoserver
2.4.0
org.geoserver
w3ds
jar
Web 3D Service
3、 Geoserver 根目录中的 pom.xml 文件的 150 行和 1460 行处添加 w3ds
模块:
org.geoserver
wcs1_1
${gs.version}
org.geoserver
wfs
${gs.version}
org.geoserver
wms
${gs.version}
org.geoserver
w3ds
${gs.version}
org.geoserver
gwc
${gs.version}
net.sf.json-lib
json-lib
。。。。。。。。。。。。。。。。。。。。。。。。。
platform
main
security
wcs
wcs1_0
wcs1_1
wfs
wms
w3ds
ows
gwc
rest
restconfig
web
community
extension
4、 Web 包下的子包 app 包中的 pom.xml 的 20 行处添加 w3ds 模块:
org.geoserver.web
web-core
${project.version}
org.geoserver.web
web-wms
${project.version}
org.geoserver.web
w3ds
${project.version}
org.geoserver.web
web-gwc
${project.version}
修改完以上 4 处 pom.xml 文件应该再重新构建 eclipse 项目,导入 eclipse 中
发布服务,W3DS 模块就可以集成到 geoserver 框架中,可以发布三维数据,但
是有可能会出现源码中有些文件不完整的情况,需要我们完善。
5、完善源码
源码中 W3DS 包中有可能缺少一个图片文件,还有 web-demo 包中需要完善
一些代码
1、 geoserver-2.3.3-src\geoserver-2.3.3\web\w3ds\src\main\java\org\geoser
ver\w3ds\web 该源码路径下有可能缺少一个图片文件 server_3d.png;
2、 web-demo 包 有 两 个 文 件 需 要 完 善 : MapPreviewPage.java 和
MapPreviewPage.html,这两个文件是实现 LayerPreview 功能的 wicket
代码文件,没有完善之前是下边这样的效果:没有可以预览 X3D 数据
格式的功能
3、 MapPreviewPage.html 文件作如下修改:红字为添加内容
4、 MapPreviewPage.java 文件作如下修改:红字为添加内容
/* Copyright (c) 2001 - 2013 OpenPlans - www.openplans.org. All
rights reserved.
* This code is licensed under the GPL 2.0 license, available at the
root
* application directory.
*/
package org.geoserver.web.demo;
import static org.geoserver.web.demo.PreviewLayerProvider.ALL;
import
static
org.geoserver.web.demo.PreviewLayerProvider.COMMON;
import static org.geoserver.web.demo.PreviewLayerProvider.NAME;
import static org.geoserver.web.demo.PreviewLayerProvider.TITLE;
import static org.geoserver.web.demo.PreviewLayerProvider.TYPE;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.behavior.IBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.ows.util.ResponseUtils;
import org.geoserver.w3ds.utilities.X3DInfoExtract;
import org.geoserver.web.GeoServerApplication;
import org.geoserver.web.GeoServerBasePage;
import org.geoserver.web.demo.PreviewLayer.PreviewLayerType;
import org.geoserver.web.wicket.GeoServerDataProvider.Property;
import org.geoserver.web.wicket.GeoServerTablePanel;
import org.geoserver.wfs.WFSGetFeatureOutputFormat;
import org.geoserver.wms.GetMapOutputFormat;
import org.geotools.geometry.jts.ReferencedEnvelope;
/**
* Shows a paged list of the available layers and points to previews
* in various formats
*/
@SuppressWarnings("serial")
public class MapPreviewPage extends GeoServerBasePage {
PreviewLayerProvider provider = new PreviewLayerProvider();
GeoServerTablePanel
table;
private transient List availableWMSFormats;
private transient List availableWFSFormats;
private
String
getW3DSRequest(X3DInfoExtract
x3dInfo,
PreviewLayer layer, String format)
{
String textHtmlUrl = null;
if (x3dInfo.isTiled()) {
crs
String
layer.layerInfo.getResource().getSRS();
=
"&crs="
+