2017-05-16 1 views
0

Je suis nouveau dans JS et les requêtes ci-dessous peuvent sembler simples.Trouver le centre d'un cercle dessiné à l'aide de la fonction de dessin et également calculer la distance entre 2 lat.

Requête: J'ai dessiné plusieurs cercles sur la carte et j'ai besoin de récupérer tous les détails des marqueurs disponibles dans le cercle. Pour y parvenir, j'essaie d'aller chercher le centre du cercle en latitude et de calculer la distance de tous les marqueurs sur la carte par rapport à ce centre du cercle. si (distance < = rayon) la conclusion du marqueur est dans le cercle.

  1. Comment le centre du cercle est déterminé.
  2. comment la distance est calculée entre le centre et le marqueur?

Merci à l'avance ..

Répondre

2

Supposons que vous avez quelque chose comme ça quelque part:

var editableLayers = new L.FeatureGroup(); 

et que vous avez ajouté cette option à votre L.Control.Draw:

edit: { 
    featureGroup: editableLayers, //REQUIRED!! 
    remove: false 
} 

comme le dit la documentation L.Draw.

Maintenant, vous pouvez rechercher vos cercles:

var circleList = []; 
editableLayers.eachLayer(function (l) { 
    if (l instanceof L.Circle) { 
     circleList.push(l); 
    } 
}); 

Même façon de rechercher les marqueurs:

var markerList = []; 
editableLayers.eachLayer(function (l) { 
    if (l instanceof L.Marker) { 
     markerList.push(l); 
    } 
}); 

Maintenant, vous voulez tout marqueur qui se trouve dans un cercle quelconque:

var markersInside = []; 
var i; 
for (i=0; i<markerList.length; i++) { 
    var j; 
    var m = markerList[i]; 
    var mposition = m.getLatLng(); 
    for (j=0; j<circleList; j++) { 
     var c = circleList[j]; 
     var cposition = c.getLatLng(); 
     var cradius = c.getRadius(); 
     if (cposition.distanceTo(mposition) <= cradius) { 
      markersInside.push(m); 
      break; 
     } 
    } 
} 

Here is a fiddle qui déclare artificiellement le featureGroup.

N'hésitez pas à lire leaflet doc qui contient à peu près tout ce que j'ai utilisé et est très bien écrit.

+0

Bonjour Julien, Merci de votre aide. J'ai eu un doute ici, j'essaie de rechercher les marqueurs de type d'icône dans le rappel de L.Draw.Event.CREATED, lorsque j'essaie d'accéder aux editableLayers, il montre seulement une couche qui est de type Circle. Remarque: des marqueurs de type ICON sont ajoutés. –