tutorial once multiple example ejemplos create mongodb leaflet openstreetmap circle point

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:

Captura de pantalla del mapa

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