Bueno, vamos a rock estas características de la DragBox
!
Hay tres opciones que he encontrado para extraer las características de la medida de la DragBox
.
Consideraciones e hipótesis:
- No podía extraer de los tipos de capas (raster o vector) de la
map.getLayers()
objeto, así que vamos a suponer que hemos almacenado la función de las capas individuales de las variables globales.
- Las características se almacenan en una variable con el nombre
featureLayer
.
- He cambiado el
altKeyOnly
condición a shiftKeyOnly
para aumentar la compatibilidad (en Linux presionando la tecla Alt mueve la ventana activa por defecto).
Primer método:
El primer método es el más básico como puede ver en este violín:
http://jsfiddle.net/GFarkas/L7xjb6yx/
Hacer un acceso directo de la variable:
var features = featureLayer.getSource().getFeatures();
Hacer una matriz vacía para la coincidencia de los puntos de bucle y a través de las características almacenadas en la featureLayer
variable:
box.on('boxend', function() {
var featuresinBox = [];
for (var i=0;i<features.length;i++) {
Consulte con el ol.extent.containsCoordinate()
función de si el punto real se ajusta a la medida de la DragBox
. Si cabe, añadir a la featuresinBox
matriz:
if (ol.extent.containsCoordinate(box.getGeometry().extent, features[i].getGeometry().getCoordinates())) {
featuresinBox.push(features[i]);
}
Segundo método:
El primer método es muy básico, no tiene la menor posibilidad de fallar. Sin embargo, hay algunas funciones auxiliares en OpenLayers 3 escrito para la función de las fuentes. Una de estas funciones se llama forEachFeature()
, que se reproducirá en bucle a través de la cuenta para usted. Violín: http://jsfiddle.net/GFarkas/fk1mqq25/1/
Matriz vacía para la coincidencia de características:
box.on('boxend', function() {
var featuresinBox = [];
Llame a la forEachFeature()
función con un opt_this
variable (en mi caso se llama e
):
featureLayer.getSource().forEachFeature(function(e) {
De verificación. Si cabe, se encuentra:
if (ol.extent.containsCoordinate(box.getGeometry().extent, e.getGeometry().getCoordinates())) {
featuresinBox.push(e);
}
Tercer método:
El tercer método es el más sencillo, sin embargo es en un estado experimental como se indica en el documento API. Utiliza un ol.source.Vector
función, también llamado forEachFeatureInExtent()
. Utilice a su propio riesgo. Violín: http://jsfiddle.net/GFarkas/b0d5mhyd/3/
Conjunto vacío:
box.on('boxend', function () {
var featuresinBox = [];
Llame a la forEachFeatureInExtent()
función con la medida de la DragBox
y empuje cada característica que es en la medida en que el conjunto vacío:
featureLayer.getSource().forEachFeatureInExtent(box.getGeometry().extent, function (e) {
featuresinBox.push(e);
});
Hay un cuarto método que manualmente se comprueba si la coordenada(s) de una función
es en el DragBox
medida o no, pero es más complicado que el primer método, que es lo suficientemente seguro para su uso en la mayoría de los entornos.
Notas finales:
- El
featuresinBox
de la matriz contiene la copia exacta de la coincidencia de características. Usted puede extraer información de ellos, con las funciones correspondientes. Yo sólo se utiliza la .length
de atributo para el bien de la simplicidad en mi violines.
- Para el cuarto método: el
ol.Extent
objeto contiene sólo las dos esquinas opuestas de la medida (como en todo enfoque de SIG, la primera es la de la esquina inferior izquierda).
- Si usted tiene más de una característica de la capa, entonces usted tiene un bucle a través de cada uno de ellos, para hacerlas valer en la "consulta".
- Si usted tiene uno o dos dimensiones características (líneas o polígonos), entonces usted tiene que comprobar cada coordenadas para asegurarse de que están completamente en el
DragBox
(para ellos getGeometry().getCoordinates()
devuelve una matriz de coordenadas). La única excepción es el forEachFeatureInExtent()
función, pero como es en un estado experimental, usted no debe esperar un 100% de resultados.
- Poco extra para jugar con la selección de características: http://jsfiddle.net/GFarkas/b0d5mhyd/4/