14# tosa
获得bjbus或是sogou的路线信息,需要先分析URL的规则和数据文件的数据结构,需要了解一点点HTTP协议来下载数据文件,一点点XML和json(bjbus上的数据格式主要是json的,其中嵌套了一些XML格式的站名数据,sogou的都是XML的)、也许还要了解一点点SQL和数据库的知识,便于存放和以后使用下载下来的数据,还有就是KML格式(是基于XML格式的Google Earth使用的格式),以便生成KML文件。
这些还不是最主要的,最主要的是解析这些数据中的地理坐标表示法,而要了解地理坐标表示法,bjbus网站用的Flash文件来解密坐标,我用ASV反编译了一个swf文件的脚本之后才了解了加密解密坐标的办法,但解密之后的坐标在GE上有上百米的偏差,还需要纠偏,这个我还没试验该怎么纠。sogou的坐标相对简单,代表经度的值和经纬度坐标基本成线性,但纬度我用了最小二乘法进行多项式拟合,试验了十多个点(用同一地点sogou坐标与Google Earth的坐标对照),大致偏差能在米的级别了,但效果也不太好。另外,给bjbus提供数据服务的mapbar(因为看到数据文件是从这个网站来的),还有另外一种坐标加密方式,是用jsp写的加解密代码,不过代码经过混淆了,可读性很差。但网上有人已经公开了加解密办法(虽然不够简洁),可以直接拿来用。但是解密后的坐标在GE上的误差也不小,仍然需要纠偏。
bjbus的路径数据和sogou的应该是同一来源,但表示方式不同。mapbar自己的路径数据,似乎是前面的数据经过了优化生成的,但优化的效果也不是太好,仍然有许多不准确的地方。
你若是有编程的基础,也许过几天我可以把源代码发给你(因为现在还没写好,也比较乱),如果没有就算了,我看看把数据捣腾成Excel的表格发给你,省得你再去下载路线信息了。
另外,不一下显示全部数据的办法是有的,我用过有人在上帝之眼做的各地村级地名的KML,人家的文件是可以把不同级别的地名在不同距离时才开始显示的,应该可以参考,但我现在还没看。技术问题不多说了,毕竟是公交论坛,不是程序员论坛。有事站短联系吧。 |