Skip to content
Snippets Groups Projects
Commit 45210327 authored by Glenn Vorhes's avatar Glenn Vorhes
Browse files

convert sorted features

parent 1a97a4cb
No related branches found
No related tags found
No related merge requests found
import { ol } from 'custom-ol';
/**
* take an array of features and sort by a given property name
*/
declare class SortedFeatures {
sortedFeatures: Array<ol.Feature>;
propertyName: string;
_propertyType: string;
/**
*
* @param {Array<ol.Feature>} features array of ol features
* @param {string} propertyName - the property name to use for lookup
*/
constructor(features: any, propertyName: any);
/**
* recursive search to find the value
* @param {number|string} propertyValue - the property value to search for
* @param {boolean} [exactMatch=false] if only an exact match should be returned
* @param {Array} [sortedFeatures=this.sortedFeatures] - the candidate features
* @returns {ol.Feature|undefined} the feature matching the lookup
*/
getFeature(propertyValue: any, exactMatch: any, sortedFeatures: any): any;
}
export default SortedFeatures;
"use strict";
/**
* Created by gavorhes on 12/23/2015.
*/
var provide_1 = require('../util/provide');
var nm = provide_1.default('olHelpers');
/**
* take an array of features and sort by a given property name
*/
var SortedFeatures = (function () {
/**
*
* @param {Array<ol.Feature>} features array of ol features
* @param {string} propertyName - the property name to use for lookup
*/
function SortedFeatures(features, propertyName) {
this.sortedFeatures = features;
this.propertyName = propertyName;
if (this.sortedFeatures.length > 0) {
this._propertyType = typeof this.sortedFeatures[0].getProperties()[this.propertyName];
var __this_1 = this;
this.sortedFeatures.sort(function (a, b) {
if (__this_1._propertyType == 'number') {
var aMinusB = a['getProperties']()[__this_1.propertyName] - b['getProperties']()[__this_1.propertyName];
if (aMinusB == 0) {
return 0;
}
else {
return aMinusB > 0 ? 1 : -1;
}
}
else if (__this_1._propertyType == 'string') {
var propA = a['getProperties']()[__this_1.propertyName] || '';
var propB = b['getProperties']()[__this_1.propertyName] || '';
propA = propA.toString().trim();
propB = propB.toString().trim();
if (propA == propB) {
return 0;
}
else {
return propA > propB ? 1 : 0;
}
}
});
}
}
/**
* recursive search to find the value
* @param {number|string} propertyValue - the property value to search for
* @param {boolean} [exactMatch=false] if only an exact match should be returned
* @param {Array} [sortedFeatures=this.sortedFeatures] - the candidate features
* @returns {ol.Feature|undefined} the feature matching the lookup
*/
SortedFeatures.prototype.getFeature = function (propertyValue, exactMatch, sortedFeatures) {
if (typeof sortedFeatures == 'undefined') {
sortedFeatures = this.sortedFeatures;
}
if (typeof exactMatch !== 'boolean') {
exactMatch = false;
}
if (sortedFeatures.length == 0) {
return undefined;
}
if (sortedFeatures.length == 1) {
if (exactMatch) {
if (sortedFeatures[0].getProperties()[this.propertyName] == propertyValue) {
return sortedFeatures[0];
}
else {
return undefined;
}
}
else {
return sortedFeatures[0];
}
}
var lowProp = sortedFeatures[0].getProperties()[this.propertyName];
var highProp = sortedFeatures[sortedFeatures.length - 1].getProperties()[this.propertyName];
if (exactMatch) {
if (lowProp == propertyValue) {
return sortedFeatures[0];
}
else if (propertyValue < lowProp) {
return undefined;
}
else if (highProp == propertyValue) {
return sortedFeatures[sortedFeatures.length - 1];
}
else if (propertyValue > highProp) {
return undefined;
}
}
else {
if (propertyValue <= lowProp) {
return sortedFeatures[0];
}
else if (propertyValue >= highProp) {
return sortedFeatures[sortedFeatures.length - 1];
}
}
var midIndex = Math.floor(sortedFeatures.length / 2);
var midFeature = sortedFeatures[midIndex];
var midProperty = midFeature.getProperties()[this.propertyName];
if (midProperty === propertyValue) {
return midFeature;
}
if (propertyValue < midProperty) {
return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(0, midIndex));
}
else {
return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(midIndex));
}
};
return SortedFeatures;
}());
nm.SortedFeatures = SortedFeatures;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = SortedFeatures;
//# sourceMappingURL=SortedFeatures.js.map
\ No newline at end of file
{"version":3,"file":"SortedFeatures.js","sourceRoot":"","sources":["../../src-ts/olHelpers/SortedFeatures.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
...@@ -2,12 +2,16 @@ ...@@ -2,12 +2,16 @@
* Created by gavorhes on 12/23/2015. * Created by gavorhes on 12/23/2015.
*/ */
import provide from '../util/provide'; import provide from '../util/provide';
import {ol} from 'custom-ol'
let nm = provide('olHelpers'); let nm = provide('olHelpers');
/** /**
* take an array of features and sort by a given property name * take an array of features and sort by a given property name
*/ */
class SortedFeatures { class SortedFeatures {
sortedFeatures: Array<ol.Feature>;
propertyName: string;
_propertyType: string;
/** /**
* *
...@@ -21,12 +25,26 @@ class SortedFeatures { ...@@ -21,12 +25,26 @@ class SortedFeatures {
if (this.sortedFeatures.length > 0) { if (this.sortedFeatures.length > 0) {
this._propertyType = typeof this.sortedFeatures[0].getProperties()[this.propertyName]; this._propertyType = typeof this.sortedFeatures[0].getProperties()[this.propertyName];
let _this = this; let __this = this;
this.sortedFeatures.sort(function (a, b) { this.sortedFeatures.sort(function (a, b) : number {
if (_this._propertyType == 'number'){ if (__this._propertyType == 'number'){
return (a['getProperties']()[_this.propertyName] - b['getProperties']()[_this.propertyName]); let aMinusB = a['getProperties']()[__this.propertyName] - b['getProperties']()[__this.propertyName];
} else if (_this._propertyType == 'string'){ if (aMinusB == 0){
return (a['getProperties']()[_this.propertyName] > b['getProperties']()[_this.propertyName]); return 0;
} else {
return aMinusB > 0 ? 1 : -1;
}
} else if (__this._propertyType == 'string'){
let propA = a['getProperties']()[__this.propertyName] || '';
let propB = b['getProperties']()[__this.propertyName] || '';
propA = propA.toString().trim();
propB = propB.toString().trim();
if (propA == propB){
return 0;
} else {
return propA > propB ? 1 : 0;
}
} }
}); });
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment