您的位置:首页 > 其它

论解决问题的一般做法 - 以 MapServer 为例

2015-12-05 00:07 260 查看
当你使用一个开源软件时,遇到问题,是不是一筹莫展呢?因为我们对使用的软件不了解,不出问题还好,如果出了问题,如果没有调试信息,那我们只能自行 百度、Google,就算你连 Bing 都用上,如果你用的软件使用不是很广泛,那找到解决方案的希望也是很渺茫。然后,你就不断搜索答案,一遍一遍的尝试错误的解决方案,到头来时间都浪费了,你将会感慨你虚度了一天,第二天你去问论坛的大神,问 QQ 群里的大牛,然而没有人“理你”,可能是因为你问的问题姿势不对,也可能别人觉得你问得问题太 LOW,或者说大牛太忙,不管什么原因,你就是找不到答案。

你开始崩溃了,怎么才能解决问题呢?

于是,你想起一个开发良好的软件肯定有完善的调试信息,这时,你才想起增加错误处理,比如增加调试代码,如 try - catch,查看软件的错误日志,结果报错信息或者错误日志完整的告诉了你出问题的原因,然后你找到出问题的地方,马上解决了错误。

这个情境可能每天都在你、我、他/她的身上发生,我们不应该把时间浪费在没有意义的寻找,就像无头苍蝇一样的,撞到了算你幸运,然而撞不到是多数的情况。我们必须有一个解决问题的思路。对我来说,我的解决思路一般如下:

首先看在自己的认知范围内是否找到问题出在哪里;

如果问题自己找不到为什么,那么可以尝试搜索 Google ,最多看两页的搜索结果,如果找不到解决方案,至少可以看到一些蛛丝马迹,切忌无脑的不断尝试别人给的思路,要弄懂原理才行;

如果还是解决不了问题,那么你可以依靠软件自身的错误日志,毕竟只有软件的开发者最懂这个软件或者类库;

如果什么方法都尝试了,还没有解决,那么离开电脑,让头脑清醒,放松一下,不要影响一天的心情,说不定过一段时间你回来马上就解决了。

下面我举个使用 MapServer 时遇到的问题及其解决思路。

遇到问题

我使用 mapserver 发布 wfs,使用 GetFeature 查询要素时候,用到了 Filter Encoding,结果无论怎么调整参数,总是得到 0 个结果,即使明明知道满足查询条件的要素有很多。例如:

http://127.0.0.1/wfs?VERSION=1.0.0&SERVICE=WFS&REQUEST=GetFeature&map=ceshi_postgis.map&TYPENAME=postgis-layer&Filter=<Filter><PropertyIsEqualTo><PropertyName>gid</PropertyName><Literal>121</Literal></PropertyIsEqualTo></Filter>


解决问题

第一阶段

于是进入使用搜索引擎的阶段,一通乱搜,然而纠结了一个小时,由于 mapserver 用的比较少,很多问题都是在 mapserver 的邮件列表中讨论的,而且没有和我遇到一样的问题的,这条道路走不通,不能一条路走到黑,开始进入第二阶段。

第二阶段

使用 mapserver 的人很少,肯定很少人遇到我的问题,就算遇到,估计也没有分析出来。很多互联网软件,比如 httpd ,都有自己的错误输出日志,mapserver 也是这类软件,应该可以配置输出自己的调试信息,于是我在 mapfile 配置调试参数,并指定输出日志文件位置即可。于是在相应的 mapfile 配置文件中添加如下配置,使mapserver 输出详细错误,并将错误记录在 ms_error.txt 中:

DEBUG 5
CONFIG "MS_ERRORFILE" "/log/ms_error.txt"


再次请求,查看日志文件,发现如下一行,

msProjectRect(): Warning: degenerate rect

这个警告告诉我们:没有指定查询范围,因为 Filter Encoding 要求同时指定属性查询条件和空间查询条件(查询范围),如果是请求 WMS,那么可以直接指定 BBOX参数来规定范围,然而使用 Filter Encoding 不能和 BBOX 参数一起使用,于是只能在 mapfile 中配置 EXTENT 参数,指定 EXTENT 参数后, wfs getfeature filter encoding 请求成功。

总结

遇到问题千万不要蒙头转向,头脑要清醒,遇到问题肯定会触及到自己的不舒适区,超出自己的认知范围,首先要自己检查一下,是不是哪里自己粗心造成的;如果解决不了,可以搜索一下网络,如果第一页搜索结果解决不了,基本解决的希望不大了;如果这样还是解决不了,那么利用一下软件自身携带的调试功能;如果再解决不了,那么发论坛,问这方面比较擅长的人之外,还要尝试自己分析源码或者原理,来加深理解。

经过这些过程,问题基本都会解决了,如果还解决不了,切忌硬着头皮一直搜索网络,不做理解,一遍一遍地尝试网页上的解决方法,到最后把自己弄得崩溃,打击自己的自信心,导致什么事情都不想做。放松一下心情,可能解决问题的思路会突然来到你的脑海,就算没有,也不要影响了你做其他事情的心情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: