once - mongodb tutorial
No se pueden mostrar solo los puntos dentro de un rango específico(círculo) usando la función.getBounds()(Folleto) (2)
Estoy tratando de mostrar una cierta cantidad de puntos dentro de un rango específico, que está dentro de un círculo . Pero cuando .getBounds()
función .getBounds()
para comparar para ver si el punto está dentro del límite, obtengo algunos puntos fuera de él, como se muestra en la siguiente captura de pantalla:
El código que se usa actualmente para verificar si el punto está dentro del círculo encuadernado está a continuación:
echo ''
var mark = L.marker(['' . $r->coordinates[0]->longitude . '','' . $r->coordinates[0]->latitude . '']);
if(circle.getBounds().contains(mark.getLatLng())){
mark.addTo(map);
mark.bindPopup("''.$info.''");
}
'';
Estoy haciendo un bucle en una matriz para recuperar la latitud y longitud y desde allí, para ver si las coordenadas se llenan en el límite, si es así, lo agrega al mapa con su ventana emergente correspondiente
¿Alguna solución con respecto a este problema en particular?
Gracias por ayudar
El método getBounds()
siempre devuelve un área rectangular. Por lo tanto, no se puede usar para verificar si un objeto no rectangular contiene un punto dado.
Para un círculo, debe poder calcular la distancia ( distanceTo()
) del punto al centro del círculo ( getLatLng()
) y verificar si es más pequeño que el radio del círculo ( getRadius()
). Tenga en cuenta que la distancia y el radio están en metros.
Puede crear su propio método contains
y agregarlo a la clase L.Circle
porque no tiene uno por defecto. Puede usar el método de utilidad distanceTo
de los objetos L.LatLng
para calcular la distancia entre su marcador y el centro del círculo y compararlo con el radio del círculo:
L.Circle.include({
contains: function (latLng) {
return this.getLatLng().distanceTo(latLng) < this.getRadius();
}
});
Ahora cuando tienes un círculo y un marcador u objeto latlng puedes hacer esto:
var map = L.map(...);
var circle = L.circle(...).addTo(map),
marker = L.marker(...).addTo(map);
latLng = L.latLng(...);
// Returns true when in the circle and false when outside
circle.contains(marker.getLatLng());
circle.contains(latLng);
Ejemplo de trabajo en Plunker: http://plnkr.co/edit/OPF7DM?p=preview
Referencia de L.Circle: http://leafletjs.com/reference.html#circle
Referencia de L.Marker: http://leafletjs.com/reference.html#marker
Referencia L.LatLng: http://leafletjs.com/reference.html#latlng