Leaflet - 如何向类添加静态函数?

时间:2015-12-11 21:03:57

标签: javascript leaflet

我想在L.GeoJSON中添加一个名为" getLatLngPath"的函数,它将获取一个geojson对象并为任何LineString或MultiLineString功能拍摄单个latlng数组。 geojson。简单。

因为我没有覆盖任何代码,而且它是一个静态函数,我的想法是使用include()方法,希望我可以访问函数L.GeoJSON.getLatLngPath( ...)。代码:

L.GeoJSON.include({
    /*
     * Returns a single array containing all the latlngs from each LineString feature
     */
    getLatLngPath: function(geojson, reverse) {
        reverse = typeof reverse === undefined ?  false : reverse;
        var path = [];
        if (geojson.type === 'FeatureCollection') {
            for(var i=0; i < geojson.features.length; i++) {
                // Recursively call this function on each feature
                path = path.concat(this.getLatLngPath(geojson.features[i]));  
            }
        } else if (geojson.type === 'Feature' && (geojson.geometry.type === 'LineString' || geojson.geometry.type === 'MultiLineString')) {
            return L.GeoJSON.coordsToLatLngs( // function existing in L.GeoJSON
                geojson.geometry.coordinates,
                geojson.geometry.type === 'LineString' ? 0 : 1, // Need one more level deep if a MultiLineString
                reverse);       
        }
        return this._pruneDuplicates(path);     
    },

    /*
     * Prunes duplicate-adjacent latlngs
     */
    _pruneDuplicates: function (path) {
        var i=1;
        while (i < path.length){
            if (path[i-1][0] == path[i][0] && path[i-1][1] == path[i][1]) {
                path.splice(i, 1);
            } else {
                i++;
            }
        }
        return path;
    }
});

(注意,代码尚未测试,并且与此问题无关。)

调用L.GeoJSON.getLatLngPath(...)并不起作用 - 它说它不是一个函数。但是,如果我调用工厂方法(它只返回一个&#34; new&#34;它的实例),它就可以工作:

L.geoJson().getLatLngPath(...);

我不是故意狡辩,但这很难看。我不需要为静态方法创建一个新对象如何使我的函数成为一个从L.GeoJSON调用的静态方法?

1 个答案:

答案 0 :(得分:1)

该方法可在类原型中使用:

L.GeoJSON.prototype.getLatLngPath(...);