置顶随笔

[置顶]WebGIS最佳实践-3 为GeoServer编写漂亮的Style

摘要: 凡是用过的人都知道,在GeoServer里面创建美观的Style是一件痛苦的事(如果有人觉得是种享受请不要反驳,当我哗众取宠就是了)。GeoServer直接支持OGC的SLD作为样式(Style)的描述。SLD是用XML描述的,而XML是由许多相互嵌套的“<"和">"搭建的。我很不喜欢手动编写XML,尤其是从空白文件开始编写,这是其一。其二,在GeoServer的Style页面编写Style无法立刻看到效果,经常需要重复几个枯燥的动作才能看到,大大降低了工作效率。这在“所见即所得”肆虐的年代,简直就是大逆不道。本文中我会把我配图的方法和常用的工具拿出来阅读全文

posted @ 2011-05-14 16:25 索夫特威尔 阅读(772) 评论(1) 编辑

[置顶]WebGIS最佳实践-2 在WebGIS程序中实现路径分析

摘要: 案例代码下载 问题:如何在WebGIS程序中实现路径(Route)分析。 方案: 先来简单介绍下路径分析,我们经常遇到这样的问题:要去一个什么地方,却不知道怎么走,于是只好问人家,人家会告诉你,向前走多远然后拐弯再走多远,看见个什么建筑过街就到了。这种描述很普遍但是说实话对于空间想象不好的人理解起来实在费劲,所以我往往还要问好几个人才能找到。后来有了Google地图,问题就简单多了,只需点两个点,它就会返回一条很明确的路线,一目了然,虽然有时会有点小错误,但是已经不影响大局了。我们在哪里,该怎么走,这附近有什么我们感兴趣的地方,等等一系列这类问题都是空间位置服务要解决的。路径分析就是空间位置服阅读全文

posted @ 2011-04-26 10:26 索夫特威尔 阅读(653) 评论(0) 编辑

[置顶]在GeoServer中使用“宋体”

摘要: 有时候需要在SLD中使用中文字体,例如“宋体”,如果采用默认的SLD,会发现字符集错误,这时可以把SLD的文件头改成<?xmlversion="1.0" encoding="gb2312"?>就OK了。 就这么简单阅读全文

posted @ 2011-04-15 13:17 索夫特威尔 阅读(254) 评论(0) 编辑

[置顶]WebGIS最佳实践-1 为GeoServer增加GP(Geometry Processing)服务

摘要: 源代码下载起源:QQ群中一个朋友问我怎么把GP服务增加到GeoServer中,当他描述他的需求时我脑海里大概就有了实现方案,但是要在QQ里把这个方案说清楚确实不太容易,于是我萌生了写一篇文章的念头。进而,我决定开始一个系列就叫“WebGIS最佳实践”,这里当然没有什么“最佳”,这里只有我遇到的,别人遇到的,或者我自己的突发奇想的关于WebGIS的问题,然后我会提供一个解决方案,这个方案可能是我设想的,也可能是别人提出我整理的。如果是别人的我会尽量注明出处。这个系列我会不定期更新,谢谢关注。问题:怎么把长度度量(Length)和缓冲区(Buffer)操作增加到GeoServer中,怎么调用它。方阅读全文

posted @ 2011-04-14 12:52 索夫特威尔 阅读(534) 评论(0) 编辑

[置顶]GeoServer源码解析和扩展 (三)结构篇

摘要: 上一章我们通过实现一个服务对如何扩展GeoServer有了一定的了解,但是,对于为何要这样做并没有说明,本章我们重点来说说GeoServer的结构,下图来自GeoServer官网(希望没有侵权),它很好的揭示了GeoServer处理请求的全过程。 我们说GeoServer使用Spring框架来构建,这里就可以看到Spring的使用,虚线框中的Restlet就是用Spring引入系统的,每个服务包的“applicationContext.xml”文件里都包含了描述Route映射的信息,例如WMS就有如下片段: <bean id="wmsURLMapping" class阅读全文

posted @ 2011-01-26 21:13 索夫特威尔 阅读(1249) 评论(2) 编辑

[置顶]GeoServer源码解析和扩展 (一)基础篇

摘要: 一 缘起 一直在使用GeoServer,从来没关心它的实现。也是GeoServer设计的实在太好,下载,安装,启动页面,根本不费力。这是其一,其二,GeoServer遵循OpenGIS的开放标准WMS,WFS,WCS,这3个标准涵盖了大部分WebGIS基础应用,一般情况下不太需要在服务端做什么开发了。 那么会不会有不一般的情况呢?如果直接用GeoServer实现业务级别的REST服务是不是会更高效呢?如果搞清楚它的结构遇到奇怪问题时是不是就不必到处求人了呢?如果,也许只是如果,有一天你自己不得不实现一个服务器,今天的学习是不是会有所帮助呢?除去以上原因,难道你就不想知道它是怎么工作的吗?好了,阅读全文

posted @ 2011-01-05 22:56 索夫特威尔 阅读(1654) 评论(1) 编辑

[置顶]Javascript匿名函数的一种应用:封装

摘要: 在一些Javascript库中可以看见这种写法: (function(){ //所有库代码代码 })(); 说实话,对于js初学者的我来说。这个东西太吓人了,在这些JS库中,这个函数基本上把整个库的所有代码全括起来了,这种写法完全超越了我的常识。难道不应该好好的划分一下吗,难道不应该体现出层次和功能划分吗,怎么会一个函数搞定呢。我一开始完全不敢去细想它的道理。直到使用JS一段时间后,某一天一位同事在闲聊时说起了这个问题,我才知道这个叫匿名函数。匿名函数我并不陌生,C#,Python,Lua中都有这个咚咚。我到网上去查了一下,介绍文章很多,也很详细,但是我心头的疑问却没有得到解决:为什么要这样.阅读全文

posted @ 2010-06-26 23:35 索夫特威尔 阅读(1942) 评论(6) 编辑

[置顶]养成重构的习惯有多重要

摘要: 身为一个维护人员,我每天的工作就是研究产品的代码,修正各种bug,或者添加各种新功能。Martin Fowler在《重构》一书中使用了一个隐喻,“坏味道(bad smell)”。用这个隐喻来形容我目前的处境,那就是我正在粪坑里挣扎。这里充斥着“Copy/Past/Modify”而来的代码。为了实现一个功能而随心所欲添加的成员变量。长达一两千行的函数。几万行的类。到处都是public的成员变量。丰富多彩的编程风格。 这个程序运行起来很漂亮,用户也很满意(据说)。我想作为用户,是不需要关心代码如何如何的。作为老板也是不需要关心代码如何如何的(虽然他声称他很在乎)。那么正真关心代码的人是谁呢,我想.阅读全文

posted @ 2009-12-12 14:59 索夫特威尔 阅读(2570) 评论(41) 编辑

[置顶]开放GIS标准OGC之路(4)之 解密Filter

摘要: Filter是一中语言,一种XML实现的语言,这就使得它非常适合于分布式系统。我们接触过的OWS服务都不同程度的使用到它。SLD用它来实现复杂的Rule选择。WFS在所有需要定位操作对象的地方都会使用Filter。这一章我们换一种讨论的方式,我不想再罗列乏味的Tag,然后加上翻译过来的解说。我们应该实实在在的实现一个程序,在实现的过程中完成我们的讨论。 前面的章节我们一直维护着一个WMS服务器“ShapeMapServer”,刚开始我并没有把它当回事,我只是想把它作为一个范例来使用,但是随着话题的深入,这个范例也注定逐渐复杂,功能也慢慢丰富起来。这一章我们将一起来面对这个程序,我们一起来为他增阅读全文

posted @ 2009-10-22 17:42 索夫特威尔 阅读(1899) 评论(6) 编辑

[置顶]开放GIS标准OGC之路(3)之 WFS初探

摘要: 在"OGC之路(1)WMS总结"中我们讨论了WMS标准。我们可以从WMS服务器很方便的获得指定区域内的地图,但是我们只能获得渲染后的地图。有时候我们希望获得指定图层的Feature数据包括地理坐标和属性,更进一步,当我们需要修改数据源的数据的时候,WMS就不能满足需要了。OGC为我们提供了另外一个标准Web Feature Service(WFS)来对应以上需求。顾名思义,WFS是通过网络操作Feature的服务。它支持客户端对服务器的Feature执行INSERT, UPDATE, DELETE, LOCK, QUERY,DISCOVERY操作。乍一看感觉WFS像是一个数阅读全文

posted @ 2009-10-15 10:53 索夫特威尔 阅读(2455) 评论(6) 编辑

[置顶]OGC之路(1) 之 WMS标准学习总结

摘要: 一切都源于一年多以前,记得是512之后的不久,老板从国外找来一家专门提供地图业务的公司。他们本来使用ArcGIS作为服务平台,但是后来考虑到每年昂贵的服务费用,决定把业务拿到中国来,结果就找到我们。其实我们连GIS应用的开发经验都没有,不知道老板怎么说的(不愧是老板,要是我只能老老实实说没做过愿意学)把这个活拿到了手。我得简单介绍下我们要做的事情。我们需要维护一套C#的代码(甲方在沿海先找了家公司开发的,然而还是由于维护费用问题又把代码交给我们)。这套代码实话说,基本思想是正确的,可惜没有坚持到底,结果到处都是复制修改的内容。OO的基本原则它几乎都破坏了完了,可以说是反面教材的典范。但是它的.阅读全文

posted @ 2009-09-27 18:05 索夫特威尔 阅读(2648) 评论(0) 编辑

2011年5月14日

WebGIS最佳实践-3 为GeoServer编写漂亮的Style

    凡是用过的人都知道,在GeoServer里面创建美观的Style是一件痛苦的事(如果有人觉得是种享受请不要反驳,当我哗众取宠就是了)。GeoServer直接支持OGC的SLD作为样式(Style)的描述。SLD是用XML描述的,而XML是由许多相互嵌套的“<"和">"搭建的。我很不喜欢手动编写XML,尤其是从空白文件开始编写,这是其一。其二,在GeoServer的Style页面编写Style无法立刻看到效果,经常需要重复几个枯燥的动作才能看到,大大降低了工作效率。这在“所见即所得”肆虐的年代,简直就是大逆不道。本文中我会把我配图的方法和常用的工具拿出来与大家分享,虽不是什么火箭科学,但也算是工作经验的总结,希望对战斗在配图第一线的童鞋有所帮助。另外也是想抛砖引玉,如果你有自己的经验也请发布出来共同进步。写了这么多虚伪的文字(汗),下面进入正题。

先上图

image

【这张图的配色我参考了Google Map,说白了就是把它的颜色一点点抠下来,虽然很费事但是效果我还是很满意的】

矢量数据来自http://sms.webmap.cn/find.asp?status=%CD%EA%B3%C9&accessOption=%CF%C2%D4%D8,大家需要自行下载。 

image

 

下表是数据之间的对照关系

shp文件名

数据名称

Style名称

Layer名称

 
bou2_4p 1:400万国界与省界 bou2_ply bou2_4p  
bou2_4l 1:400万国界与省界 bou2 bou2_4l  
hyd2_4p 1:400万一级河流 lake hyd2_4p  
hyd2_4l 1:400万一级河流 river hyd2_4l  
roa_4m 1:400万主要公路 road roa_4m  
rai_4m 1:400万主要铁路 rail rai_4m  
res2_4m 1:400万地市级以上居民地 china_city res2_4m  

这些图层会按照表中顺序组合为LaueyGroup,就可以了。

这里提供GeoServer的样式文件打包下载:http://files.cnblogs.com/sillyemperor/webgis_best_practices_3_slds.7z。具体用法很简单,解压缩然后复制到"[GeoServer]\data_dir\styles"路径下面,重启服务即可。至于Layer和LayerGroup的发布,请参看网上资料,这里不赘述。之前提到一点,我们的数据是shp文件,所以发布成Store之后记得把编码改成“GB2312”

image ,不然渲染出来会变成乱码。

    介绍第一个工具uDig,它的作用有二:一、提供“所见即所得”的配图环境;二、帮助创建Style的模板。需要说明的是,在有些情况下,uDig创建的样式不能直接复制到GeoServer的Style页面中。我会在介绍到具体内容时再细说。

    第二个工具是一个在线服务:http://www.yellowpipe.com/yis/tools/hex-to-rgb/color-converter.php它的作用是把RGB分量转换成CSS需要的16进制字符串。当然类似工具绝不只一个,反正我用的是这个。

    第三个是参考文献:http://portal.opengeospatial.org/files/?artifact_id=16700这是我们将要用到的SLD中关于符号化语言的标准文档,遗憾的是全英文,我没找到过翻译版,只能将就一下了。

    武器都备齐了,现在开始我们的征程。首先启动uDig,把数据加载到新的地图中,记住要按照上面的顺序。

image

1、先从最简单的开始,地区和国家的样式“bou2_ply”。右键选中“bou2_4p”图层选择“ChangeStyle”菜单打开“Style Editor”对话框。在XML选项中我们可以看到uDig为多边形提供的缺省样式,其中最重要的就是

<sld:PolygonSymbolizer>
 <sld:Fill>
  <sld:CssParameter name="fill">#F7EFEF</sld:CssParameter>
  <sld:CssParameter name="fill-opacity">0.5</sld:CssParameter>
 </sld:Fill>
 <sld:Stroke/>
</sld:PolygonSymbolizer>

先简单介绍下这个“PolygonSymbolizer”,在SLD中符号(Symbolizer)是一个很重要的概念,它代表地图元素会被如何显示。例如:点元素(Point)使用PointSymbolizer,多边形就是PolygonSymbolizer。再来看“Fill”,它是填充样式命令,如果不提供则表示该样式不需要填充,也就是中空。命令参数CssParameter 则定义填充的各项参数值,如“<sld:CssParameter name="fill">#F7EFEF</sld:CssParameter> ”就是在指定填充颜色。最后来说说“Stroke”命令,它代表画线,也可以用CssParameter 来制定具体参数值,我们这里希望国界没有边框所以直接把它删掉。再回来看看填充色,我前面提到过配色是从GoogleMap来的,现在来看看怎么做。先打开GoogleMap,缩放到需要的位置,然后截图,将截图复制到操作系统自带的画板中,然后用取色工具image选取背景颜色,再打开“编辑颜色”菜单,从里面复制出RGB分量。打开 http://www.yellowpipe.com/yis/tools/hex-to-rgb/color-converter.php网页,将RGB分量复制到image 界面中获得“Hex Code”,再把这个值复制到“<sld:CssParameter name="fill">#F7EFEF</sld:CssParameter> ”里替换原来的值。然后点击“Style Editor”对话框右下角按钮“Apply”就可以看到效果了。一口气说了这么多,希望你没有不耐烦。毕竟这是操作步骤,我只会在这里说一次,后面就是重复类似动作了。

 

2、稍微复杂点的,铁路样式“rail”。首先说明,SLD语法允许多个Symbolizer顺序组合出新的效果,这里我们会用到3条线来实现铁路的样式,从下到上依次是image image image 具体的SLD代码见文件rail.sld。这三条线叠加的效果就是image 。这里还要引入另外一组命令”MaxScaleDenominator/MinScaleDenominator”,这个命令实现这样一种效果:当地图缩放到一定的比例范围时图元才会显示,否则就不显示。如果没有这个效果我们的地图就会挤成这样

image

 

3、打大BOSS了,城市样式“china_city”。需要简单说明以下城市数据,有一个字段叫“ADCLASS”将城市分成1,2,3,9四级。我希望不同级别的城市用不同的图标,并且在不同的显示级别出现。

    1级城市用image ;2级城市用image ;3级城市用image ,9级城市用image这些样式不复杂,就不多说了,重点放在两个问题上:使用过滤器(Filter)和使用中文。

先看代码

                    <ogc:Filter>
                        <ogc:PropertyIsEqualTo>
                            <ogc:PropertyName>ADCLASS</ogc:PropertyName>
                            <ogc:Literal>1</ogc:Literal>
                        </ogc:PropertyIsEqualTo>
                    </ogc:Filter>

这是“china_city.sld”中的一段,“Filter”命令定义一个判断语句,只有当这个判断语句结果为真时它所在的样式才会起作用,从这点看“MaxScaleDenominator/MinScaleDenominator”可以认为是特殊的“Filter”。上面这段语句用伪代码写出来就是:feature.ADCLASS == 1。也就是当字段“ADCLASS”的值为“1”时为真。使用Filter我们可以构造出复杂的渲染样式,不过实话说这样的代码风格实在太不直观了。

最后来看这段代码

                   <sld:TextSymbolizer>
                        <sld:Label>
                            <ogc:PropertyName>NAME</ogc:PropertyName>
                        </sld:Label>
                        <sld:Font>
                            <sld:CssParameter name="font-family">宋体</sld:CssParameter>
                            <sld:CssParameter name="font-size">12.0</sld:CssParameter>
                            <sld:CssParameter name="font-style">normal</sld:CssParameter>
                            <sld:CssParameter name="font-weight">bold</sld:CssParameter>
                        </sld:Font>...此处省略若干字
                    </sld:TextSymbolizer>

这段代码定义了标签符号,也就是显示文字,我们想把字段”NAME”的值用“宋体”显示出来。如果你直接把这个SLD从uDig里复制到GeoServer里然后点“Validate”按钮,你很可能会收到这条警告:java.io.UTFDataFormatException: Invalid byte 2 of 2-byte UTF-8 sequence.解决方法其实很简单,把XML开头的“<?xml version="1.0" encoding="UTF-8"?>”改成“<?xml version="1.0" encoding="gb2312"?>”就OK了。同样不要问我为什么。

    说了这么多终于可以结束了,在结束前我有点小小的不高兴,虽然以上方法在实践中证明是可行的,但是未免太麻烦了,要不断在多个程序和界面之间换来换去,在uDig里面配好的地图还要到GeoServer里面再做一次,这不是程序员解决问题的方式,我觉得应该有工具能让我把uDig配好的地图直接发布到GeoServer上,而不是像这样给大家津津乐道一大堆注意事项和小技巧。好了,再次感谢大家,我们下期节目再见。

 

posted @ 2011-05-14 16:25 索夫特威尔 阅读(772) 评论(1) 编辑

2011年4月26日

WebGIS最佳实践-2 在WebGIS程序中实现路径分析

案例代码下载

 

问题:如何在WebGIS程序中实现路径(Route)分析。

方案

    先来简单介绍下路径分析,我们经常遇到这样的问题:要去一个什么地方,却不知道怎么走,于是只好问人家,人家会告诉你,向前走多远然后拐弯再走多远,看见个什么建筑过街就到了。这种描述很普遍但是说实话对于空间想象不好的人理解起来实在费劲,所以我往往还要问好几个人才能找到。后来有了Google地图,问题就简单多了,只需点两个点,它就会返回一条很明确的路线,一目了然,虽然有时会有点小错误,但是已经不影响大局了。我们在哪里,该怎么走,这附近有什么我们感兴趣的地方,等等一系列这类问题都是空间位置服务要解决的。路径分析就是空间位置服务的一个大类。顺便提一下,OGC制定了一个空间位置服务的标准OpenLS,有兴趣的朋友可以“烟酒烟酒”。

    下图是Google地图中路径分析的一个很典型的画面

image

想要实现这样一个程序并不如想象中困难,最简单的就是使用Google地图或者其他类似的在线商业地图服务,具体方式可以参看服务API的文档,这里就不深入了。另外,也可以使用商业GIS开发平台,例如ArcGIS就可以很轻松的实现类似的功能,我使用过的感觉就是“一分钱一分货”。但是我的博客重点关注开源工具,所以我们来看看用开源工具都有哪些方法。

    首先介绍一个免费的在线OpenLS服务,http://openrouteservice.org/,它的数据源来自OpenStreetMap,但是OSM的数据国内部分很不全,实用意义不大,我们姑且只能把它当做学习资料。

    开源GIS平台里集成了类似功能的不多(要么就是我没有找到),我只在Grass里见到过。上次一个朋友还提到一个工具pgRouting,是PostGIS的扩展,有兴趣的可以看看,我还没来得及学习。

    实现了图算法的开源库不少,理论上我们也可以利用它们来自行开发,我就使用NetworkX在Python下尝试过,效果还算过得去,其实就代码量而言,整个方案并不算坏,但是涉及太多的库很凌乱,不容易说明。最后我还是转回到GeoServer下面来。

    GeoServer采用GeoTools开发,而GeoTools提供了一个很好的Graph包,只需要把我们的路径分析服务通过GeoServer扩展发布出去就好了,顺便还可以提供演示例程。我们将使用“WebGIS最佳实践-1 为GeoServer增加GP(Geometry Processing)服务”的代码作为基础来开发。代码的安装及使用见附录。下面来介绍下我们自定义的这个路径分析服务。

    我们的要求如下:1)输入两个点的坐标和数据源名称;2)返回一条道路的几何体。根据这个需求我们来设计一个请求:http://[GeoServer Address]/ows?request=GetRoute&service=NA&version=1.0.0&stops=[WKT|WKT|…]&graph=[Layer Name]。返回值是:WKT|WKT|…。如果你已经安装好代码和数据并且已经启动服务,你可以点击下面这个链接看看效果:

http://localhost:8080/geoserver/ows?request=getroute&service=na&version=1.0.0&graph=in101503&stops=POINT%20(%20-105.0037%2039.8227%20)|POINT%20(%20-73.9713%2040.8504%20)

下面是OpenLayers开发的例子效果:

image

有问题欢迎与我联系:QQ 346294202

附录

1 代码安装,首先,本机需要安装JDK1.5及以上版本,Eclipse Helios Release。GeoServer2.1-RC3的源码。下载源码,解压到GeoServer的代码目录下

启动eclipse,打开File\Import菜单导入demos项目。然后把demos增加到web-app项目的依赖项目中

这一步主要是为了让web-app启动时能够加载我们的项目。现在启动web-app的Start类

然后浏览器中敲入:http://localhost:8080/geoserver/web/,会进入登录界面,点击Demos链接打开演示页面

image

2 数据安装,我做测试的路径是从这个链接下载的http://www.nws.noaa.gov/geodata/catalog/transportation/html/interst.htm,由于数据大不想占用博客园的空间,请自行下载。数据下载后可以用GeoServer发布成Layer,名称一定请取成“in101503”,免得影响试运行。注意:如果你的机器上安装了GeoServer,请将它关停,因为从代码启动的GeoServer很可能使用了同一端口。

posted @ 2011-04-26 10:26 索夫特威尔 阅读(653) 评论(0) 编辑

2011年4月15日

在GeoServer中使用“宋体”

有时候需要在SLD中使用中文字体,例如“宋体”,如果采用默认的SLD,会发现字符集错误,这时可以把SLD的文件头改成<?xml version="1.0" encoding="gb2312"?> 就OK了。 就这么简单

posted @ 2011-04-15 13:17 索夫特威尔 阅读(254) 评论(0) 编辑

2011年4月14日

WebGIS最佳实践-1 为GeoServer增加GP(Geometry Processing)服务

源代码下载

 

起源:QQ群中一个朋友问我怎么把GP服务增加到GeoServer中,当他描述他的需求时我脑海里大概就有了实现方案,但是要在QQ里把这个方案说清楚确实不太容易,于是我萌生了写一篇文章的念头。进而,我决定开始一个系列就叫“WebGIS最佳实践”,这里当然没有什么“最佳”,这里只有我遇到的,别人遇到的,或者我自己的突发奇想的关于WebGIS的问题,然后我会提供一个解决方案,这个方案可能是我设想的,也可能是别人提出我整理的。如果是别人的我会尽量注明出处。这个系列我会不定期更新,谢谢关注。

 

问题:怎么把长度度量(Length)和缓冲区(Buffer)操作增加到GeoServer中,怎么调用它。

方案

    我选择的GeoServer源码是2.1-RC3,这是我正在研究的代码,它的结构比2.0.2有了较大的改变,看多我GeoServer源码解析和扩展 (二)注册服务”的朋友可能会发现许多不同,不过不用太过担心,原来的结果在新代码里依旧兼容,只是会有“Deprecated”警告。

    首先我们需要设计服务协议,我希望的HTTP调用可能是这样:http://[GeoServer Address]/ows?request=GetLengths&service=gp&version=1.0.0&geoms=[WKT|WKT|…]。它符合OGC OWS的调用规则。该服务返回一个JSON的数组,[length,length,…],由于输入参数可以是多个Polyline,所以返回也是多个值,以下标对应。

    同样,缓冲区的调用规则为:http://[GeoServer Address]/ows?request=GetBuffers&service=gp&version=1.0.0&geoms=[WKT]。返回JSON数组,[WKT|WKT|…]。

    如果你安装了我提供的代码,马上就可以试试下面的例子。

    GetLengths的调用请求例子:http://localhost:8080/geoserver/ows?request=getlengths&service=gp&version=1.0.0&geoms=LINESTRING%20(%201%205,%205%205,%205%201,%203%203,%201%201%20)|LINESTRING%20(%201%205,%205%205,%205%201,%203%203,%201%201%20)

    GetBuffers的调用请求例子:http://localhost:8080/geoserver/ows?request=getbuffers&service=gp&version=1.0.0&distance=10&geoms=LINESTRING%20(%201%205,%205%205,%205%201,%203%203,%201%201%20)|LINESTRING%20(%201%205,%205%205,%205%201,%203%203,%201%201%20)

   

    确定了服务协议,下面来编码(这个太简单就不需要什么设计了)。细节我就不再赘述,可以自行查看源码。我只在这里简述一下代码结构,见下图:


命名空间wj.demos.gp下面是服务代码,wj.demos.web是演示页面的代码。GeoServerApplication.properties存放着一些页面上的配置信息,文件里面不是乱码是汉字的UFT8表示,用jdk自带工具native2ascii生成的。这样才能显示出汉字。

 

附录

1 代码安装,首先,本机需要安装JDK1.5及以上版本,Eclipse Helios Release。GeoServer2.1-RC3的源码。下载源码,解压到GeoServer的代码目录下


启动eclipse,打开File\Import菜单导入demos项目。然后把demos增加到web-app项目的依赖项目中


这一步主要是为了让web-app启动时能够加载我们的项目。现在启动web-app的Start类


然后浏览器中敲入:http://localhost:8080/geoserver/web/,会进入登录界面,点击Demos链接打开演示页面

 


 

演示页面处理自带的连接外还有一个“几何操作(GP)演示”,这就是我们安装的页面。打开后进入我们的演示页面。


演示页面下方有选项,可以选择操作,长度和缓冲两种。目前演示只能画线,单击画线,双击结束画线。下面是演示结果。


 


posted @ 2011-04-14 12:52 索夫特威尔 阅读(534) 评论(0) 编辑

2011年3月11日

在Mapnik中显示中文(网上资料整理)

前提:数据源不能是Shapefile。

步骤: 

1 下载字体 

2 把字体解压缩到Mapnik的字体文件夹下,我的是“C:\mapnik-0.7.1\lib\mapnik\fonts”

3 修改Map文件,在里面增加这样一段

 1  <FontSet name="my-fonts">

2   <Font face_name="DejaVu Sans Book" />
3   <Font face_name="unifont Medium" />
4 </FontSet>

4 把TextSymbolizer 中face_name=。。。换成fontset_name="my-fonts"

5 成功,good luck 

 参考链接http://highearthorbit.com/cjk-fonts-in-openstreetmap-tiles/ 

posted @ 2011-03-11 13:51 索夫特威尔 阅读(391) 评论(2) 编辑

2011年2月2日

GeoServer源码解析和扩展 (四)文件系统

摘要: 上一章我介绍了GeoServer的一些重要的资源以及它们的访问接口,现在来看看它们的保存形式。GeoServer的数据没有保存到数据库,而是文件系统,这让我们的学习轻松不少。默认情况下,GeoServer的数据都会放到一个叫“data_dir”的文件夹下面,虽然你可以自己设置这个文件夹的路径,但是它的内部结果是固定的,如下图 这是2.0.2版本的data_dir,从子目录的名称基本上能够猜测它的作用。“coverages”保存的是影像数据。“data”保存了矢量数据,基本上是Shapefile。“styles”保存的是样式文件,即“*.sld”文件。“workspaces”保存的是工作空间,.阅读全文

posted @ 2011-02-02 11:14 索夫特威尔 阅读(600) 评论(1) 编辑

2011年1月26日

GeoServer源码解析和扩展 (三)结构篇

摘要: 上一章我们通过实现一个服务对如何扩展GeoServer有了一定的了解,但是,对于为何要这样做并没有说明,本章我们重点来说说GeoServer的结构,下图来自GeoServer官网(希望没有侵权),它很好的揭示了GeoServer处理请求的全过程。 我们说GeoServer使用Spring框架来构建,这里就可以看到Spring的使用,虚线框中的Restlet就是用Spring引入系统的,每个服务包的“applicationContext.xml”文件里都包含了描述Route映射的信息,例如WMS就有如下片段: <bean id="wmsURLMapping" class阅读全文

posted @ 2011-01-26 21:13 索夫特威尔 阅读(1249) 评论(2) 编辑

2011年1月11日

GeoServer源码解析和扩展 (二)注册服务

摘要: 先上源码下载 上一章我们介绍了GeoServer源码分析的必要性(这个就见仁见智了)以及诸项准备工作,并且在最后还给出了OWS请求处理流程的伪代码。 这一章我们来看看要注册自己的服务需要做哪些工作。假设我们要为一个物流公司GOODS开发系统,有一个功能是给定起点和终点的城市名称以及包裹的重量返回运费,运费的计算公式如下: 运费(¥) = 距离(千米) X 货物重量(千克) 我们需要知道城市间的距离,这就需要用到GIS系统(当然也可以不用),假设已经部署了GeoServer服务器(个人以为如果要求不高或者钱没有多到烫人,使用这种免费的软件足够用了)。基本设计是这样的,为GeoServer注册一.阅读全文

posted @ 2011-01-11 21:20 索夫特威尔 阅读(1300) 评论(9) 编辑

2011年1月5日

GeoServer源码解析和扩展 (一)基础篇

摘要: 一 缘起 一直在使用GeoServer,从来没关心它的实现。也是GeoServer设计的实在太好,下载,安装,启动页面,根本不费力。这是其一,其二,GeoServer遵循OpenGIS的开放标准WMS,WFS,WCS,这3个标准涵盖了大部分WebGIS基础应用,一般情况下不太需要在服务端做什么开发了。 那么会不会有不一般的情况呢?如果直接用GeoServer实现业务级别的REST服务是不是会更高效呢?如果搞清楚它的结构遇到奇怪问题时是不是就不必到处求人了呢?如果,也许只是如果,有一天你自己不得不实现一个服务器,今天的学习是不是会有所帮助呢?除去以上原因,难道你就不想知道它是怎么工作的吗?好了,阅读全文

posted @ 2011-01-05 22:56 索夫特威尔 阅读(1654) 评论(1) 编辑

2010年6月27日

Javascript prototype 元语言编程

摘要: 昨天发了一篇小文Javascript 匿名函数的一种应用:封装,没想到来自Tony Zhou的第一个回复就把我带入到Javascript的元编程领域。我以前使用过的语言中Python和lua是支持元编程的。他们都使用了一种类似元表的结构来实现元编程。js也有同样的机制,尝试之后发现,一点都不逊色。而js的元表就是prototype。先来看一段代码: function A(){this.x = 10;this.add = function(s){ this.x += s; }}a1 = new A();alert(a1.x)//output 10a1.add(10)alert(a1.x)//ou阅读全文

posted @ 2010-06-27 21:24 索夫特威尔 阅读(1490) 评论(2) 编辑

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

昵称:索夫特威尔
园龄:3年5个月
粉丝:17
关注:8

搜索

 

常用链接

我的标签

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜