用户操作
[即时聊天] [发私信] [加为好友]
小粟ID:suen
143413次访问,排名561好友40人,关注者84
爱好技术,爱好开源,在华工学过计算机,在武测学过GIS,国家认证系统分析师,曾负责或参与中国科学院开放基金、国家基础测绘科技计划、国家自然科学基金、××市人防指挥地理信息系统、境界数据建库、地图网站等多个项目。因热心GIS技术传播而获得“CSDN地理信息专家”称号,虽然自己觉得离专家的差距还很大,但一直在努力,^-^。
suen的文章
原创 39 篇
翻译 5 篇
转载 41 篇
评论 65 篇
小粟的公告
终于完成GeoWeb开源社区(http://www.gisdev.cn)的搭建和初步测试,请大家注册用户,测试,并提出宝贵意见。
最近评论
douweibin:我也建了一个群 群号是 51824242 也做您的后备群用吧 呵呵
sparkwong3:#common22 发表于2008-08-07 15:54:58 IP: 119.40.19.*
不知道你注意到没有 百度地图其实用的是mapbar的图片引擎

对的
chenshengbj:你好!我想问一下,怎么用GDAL类库对栅格影像进行矢量化?GDAL提供矢量多边形的最小外包矩形的接口吗?我的邮箱是chenshengbj@163.com,希望给我好消息。我继续这几个功能。
xbt746:呵呵,为什么不用postgresql试试
xbt746:呵呵,为什么不用postgresql试试
文章分类
收藏
    相册
    我的照片
    GIS
    .NET开源GIS翻译WiKi
    GeoWeb开源社区
    GIS空间站
    GIS论坛
    中科院地理所
    国家测绘局
    我的旧BLOG归档
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 OpenLayers 项目分析[转](三):BaseTypes (续)收藏

    新一篇: OpenLayers项目分析[转](四)空间数据的组织与实现 | 旧一篇: OpenLayers 项目分析[转](三):BaseTypes

    (三)BaseTypes: OpenLayers中定制JavaScript内置类

    为了让更多的人看到这篇好文章,我把它转载到这里,这篇文章转载自http://www.3snews.net/html/24/10624-17454.html,原文作者如觉得不妥,可联系我删除之。

     

      OpenLayers不仅“自己”写了一些底层的类,像上回说的那些都是。同时也定制了一些JS的一些内置类,即对JS内置类的扩展。这个扩展主要包含3类:String,Number,Function,存在于BaseTypes.js文件中。

     

      String:

    OpenLayers对string类型定制了8个方法,分别是startsWith、contains、trim和camelize;还有另外4个方法:String. startsWith、String. contains、String.trim和String. Camelize,它们将会在3.0Version中被删除,可能是以前版本遗留下来的,这里就不说它们了。

      //Test whether a string starts with another string. 

      startsWith: function(str, sub) {

        return (str.indexOf(sub) == 0);

        }

     

      //Test whether a string contains another string.

        contains: function(str, sub) {

            return (str.indexOf(sub) != -1);

        }

     

     

        //Removes leading and trailing whitespace characters from a string.

        trim: function(str) {

            return str.replace(/^\s*(.*?)\s*$/, "$1");    

        }

     

     

       //Camel-case a hyphenated string.

      //Ex."chicken-head"becomes"chickenHead",

       //and"-chicken-head"becomes"ChickenHead".

       // “骆驼”化带有连字符的字符串。

       camelize: function(str) {

            var oStringList = str.split('-');

            var camelizedString = oStringList[0];

            for (var i = 1; i < oStringList.length; i++) {

                var s = oStringList[i];

                camelizedString += s.charAt(0).toUpperCase() + s.substring(1);

            }

            return camelizedString;

        }

     

     

    Number:

    项目仅对number类型扩展了一个方法OpenLayers. Number. limitSigDigs(还有一个方法Number. limitSigDigs,同样在3.0中会删除)。

        //Limit the number of significant digits on an integer.

        limitSigDigs: function(num, sig) {

            var fig;

            if(sig > 0) {

                fig = parseFloat(num.toPrecision(sig));

            } else {

                fig = 0;

            }

            return fig;

        }

     

     

    Function:

    扩展了两个方法bind 和bindAsEventListener(同样存在Function.bind和Function. bindAsEventListener两个被“遗弃”的函数)。

        //Bind a function to an object.  

        //Method to easily create closures with'this' altered.

        bind: function(func, object) {

            // create a reference to all arguments past the second one

            var args = Array.prototype.slice.apply(arguments, [2]);

            return function() {

                // Push on any additional arguments from the actual function call.

                // These will come after those sent to the bind call.

                var newArgs = args.concat(

                    Array.prototype.slice.apply(arguments, [0])

                );

                return func.apply(object, newArgs);

            };

        }

     

     

        //Bind a function to an object, and configure it to receive the event

        //object as first parameter when called. 

        bindAsEventListener: function(func, object) {

            return function(event) {

                return func.call(object, event || window.event);

            };

        }

    这里说说这两个方法。

    首先看看bind方法,这是一个能够被Function的实例得到的方法,如下所示:

    Function.prototype.bind = function() {

    var _method = this, args = [], object = arguments[0];

    for (var i = 1; i < arguments.length; i++)

    args.push(arguments[i]);

    return function(moreargs) {

    for (var i = 0; i < arguments.length; i++)

    args.push(arguments[i]);

    return  _method.apply(object, args);

    }

    };

    _method 代表Function实例自身,bind可接收多个参数,不过它绑定是是第一个参数,该参数是一个function或者是调用环境,后面的都是执行函数的参数。

     

    Function.prototype.bindAsEventListener = function(object) {

    var  _method = this;

    return function(event) {

    return  _method.call(object, event || window.event);

    }

    };

    这里只是将object作为_method 引用的环境,就是说现在可以在object对象中这样使用,

    object. _method (event||window.event)。

    也许你注意到了Funtion扩展的两个方法一个用到了call而另一个用的是apply,其实这两个并没有什么太大的区别,只是参数传递的形式不同,如若没有参数要传递,那么这两个是一样的:

    apply(obj[,argumentsArray]),call(obj[,arg1[,arg2…]])。


     

    欢迎转载,请注明出处。

    发表于 @ 2008年05月08日 13:23:16|评论(loading...)|编辑

    新一篇: OpenLayers项目分析[转](四)空间数据的组织与实现 | 旧一篇: OpenLayers 项目分析[转](三):BaseTypes

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 小粟