2011年3月11日

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

摘要: 前提:数据源不能是Shapefile。步骤:1 下载字体2 把字体解压缩到Mapnik的字体文件夹下,我的是“C:\mapnik-0.7.1\lib\mapnik\fonts”3 修改Map文件,在里面增加这样一段1<FontSetname="my-fonts">2<Fontface_name="DejaVuSansBook"/>3<Fontface_name="unifontMedium"/>4</FontSet>4 把TextSymbolizer 中face_name=。。。换成fo 阅读全文

posted @ 2011-03-11 13:51 索夫特威尔 阅读(1963) 评论(3) 推荐(0) 编辑

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 索夫特威尔 阅读(3593) 评论(2) 推荐(5) 编辑

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 索夫特威尔 阅读(8091) 评论(2) 推荐(4) 编辑

2011年1月11日

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

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

posted @ 2011-01-11 21:20 索夫特威尔 阅读(10876) 评论(11) 推荐(4) 编辑

2011年1月5日

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

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

posted @ 2011-01-05 22:56 索夫特威尔 阅读(14009) 评论(4) 推荐(9) 编辑

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 索夫特威尔 阅读(2048) 评论(2) 推荐(0) 编辑

2010年6月26日

Javascript匿名函数的一种应用:封装

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

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

2009年12月12日

养成重构的习惯有多重要

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

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

2009年12月3日

多边形面上一点的算法

摘要: 在GIS中Polygon可以是凹多边形,而且还可以带孔,一般我们把多边形的外轮廓叫做外环(Exterior Ring)把孔叫做内环(Interior Ring)。一个多边形必须且只能有一个外环,可以有若干个内环。所谓多边形上一点(Point On Surface)就是指一个必须落在多边形面上而不是空白处(凹多边形的凹口处和带孔多边形的孔洞里)的点。如下图 很多时候我们需要获得这样的点,例如给多边形加标注时,我们不希望标注显示在多边形的外面。 获得面上点的方法如下: 首先获得一个种子点,一般是多边形的几何中心。然后以此点做横线与多边形的所有环相交,将交点以X分量从左向右排序。此时的交点一定是如下 阅读全文

posted @ 2009-12-03 11:28 索夫特威尔 阅读(1326) 评论(1) 推荐(0) 编辑

2009年10月22日

开放GIS标准OGC之路(4)之 解密Filter

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

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

导航