我想在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调用的静态方法?
答案 0 :(得分:1)
该方法可在类原型中使用:
L.GeoJSON.prototype.getLatLngPath(...);