K_Reverter的网页开发记录

要么不做,要么就当作艺术品来做!

导航

灵图JS API的试用体会

        昨天(2005-12-09)听说灵图也(http://www.51ditu.com)和Google一样发布JS 的API了,于是我就赶紧的从http://api.51ditu.com/注册使用了一个账号,看了一下,大体上还是比较不错的,可是我还是觉得有一些问题,大体列举如下:

  • 最致命的缺点就是图片加载速度还是比较慢,这个问题也表现在51ditu自己的网站上,就比Mapbar什么的慢很多,这次的API,图片加载速度也比Google慢
  • API本身的最明显的弱点我觉得是没有一个完整的事件处理程序,LTEvent没有Google的GEvent强大,比如,我想像我的Google地图一样在地图下面是显示一个代表当前视图中心点经纬度和缩放倍数的状态栏,就很费周折,最后是这样解决的:
    1        map._reDrawPolyLine=map.reDrawPolyLine;
    2
            map.reDrawPolyLine=function()
    3
            {
    4            for(var i=0;i<mapChangeHandle
    .length;i++)
    5
                if(mapChangeHandle[i])
    6
                    mapChangeHandle[i].call();
    7
                map._reDrawPolyLine();
    8
            };
    9        mapChangeHandle.push(showInfo);

    使用"抓取"地图重新绘制折线的函数(可以认为每次地图更改都要重新绘制折线喽),在运行前先运行mapChangeHandle数组里面的句柄,以后只要将函数添加或移出到mapChangeHandle数组,就可以实现一个map的move事件,我想模拟出moveend事件而不是move事件,可是太困难了,现在这个方法大体上可以用,可是还有一些细节的问题,我也不知道怎么回事,要是能够像Google Maps API一样提供move和moveend等方法就好了。
  • centerAndZoom和Google的centerAndZoom差不多,可是在Google之中,这个方法还可以作为地图切换用(假如不改变经纬度的话,否则不推荐使用),可是在51ditu上如果你第二次调用该方法就会弹出提示说"当前已经是可拖动的状态!",这个不知道算不算是51Ditu API的缺陷,不过假如你调用前先用disableDrag()方法,就可以避免这个问题。我是这样用的:
    if(map.ParentLay.Lay.canDrag) map.disableDrag(); map.centerAndZoom(point,zoom); 
    这样就不会有提示了,不过我想这么用肯定不是51DituAPI开发人员期望的用法,不过除此之外好像也没有发现其他更好的函数用来同时进行经纬度和缩放倍数切换了
  • 不支持自定义控件,我想在地图上添加一个十字准星玩玩,写好代码后发现总也添加不上去,后来才发现LTMaps的控件添加函数addControl里面,通过控件ID进行判断,针对不同的ID执行不同的初始化方法,而我自定义的控件的ID并没有在里面提到,所以实际上是添加不上去的,后来我只好搞怪,自己为LTMaps写了一个添加自定义控件的方法:
    1        LTMaps.prototype.addMyControl=function(ControlObj)
    2
            {
    3
                var obj=ControlObj.getObject();
    4
                this.ParentLay.appendChild(obj);
    5
                ControlObj.reDraw();
    6        }

    在这个方法里面,我假定控件自己有一个reDraw方法,在控件添加到地图之后调用让控件自己对行位置修正,这样才成功的实现了添加一个基本的控件
  • 是否支持自定义的标注类型我没有仔细研究,不过从上面提到的LTMaps存在一个reDrawPolyLine方法来看,应该也是不支持的,因为折线标注类型的reDraw过程并不是独立作为LTPolyLine的方法,而是定义在LTMaps之中,自定义的标注类型不大可能改动LTMaps,所以应该也比较困难
  • 还有我觉得这个坐标系统比较乱,在API文档中说明了LTPoint的构造函数格式应该是LTPoint( int Lat , int Lng )的,也就是说先纬度再经度的,而且我看了代码,确实LTPoint也是这样定义的,可是在API的范例文档之中,确是这样使用LTPoint:new LTPoint( 11636224 , 3991040 ),这个点代表(116.36224,39.91040),是不是很奇怪?116.36224应该是经度才可能是代表中国境内的某点的啊,也就是说应该是先说经度再纬度的,而这样使用在范例中却又是正确的,这就形成了一个矛盾的地方(不知道是不是我自己被这个给弄乱了,我本来就不是很了解这些地理常识)

        就是因为最后一个问题没有解决,所以到现在我基于51Ditu的研究网页还没有打算发布出来给大家看看,以上观点都是个人在不长的事件内总结的,难免出错甚至大错,欢迎指正

posted on 2005-12-10 10:29  K_Reverter  阅读(1669)  评论(0编辑  收藏  举报