ThinkGeo.com    |     Documentation    |     Premium Support

How to get the markers drawn within circle on client side

Hi,


I am adding the markers to map from client side using the below code


 var marker = new OpenLayers.Marker(new OpenLayers.LonLat(lon,lat), icon);            

   markers.addMarker(marker);


 


Just i want to know how can i get the  markers within a circle  when i draw a circle on client side especially.


i know it can be possible by the event  "Map1ClientDrawEnd()" .So i am using  below code to achieve this.


function Map1ClientDrawEnd() {

            var map = Map1.GetOpenlayersMap();

            var editOverlay = map.getLayer("EditOverlay");

            var markerlayer=map.getLayer("Markers");

            for(var i=0;i<markerlayer.marker.length;i++)

            {

                for (var feature in editOverlay.features)

                {

                    PolygonShape polygonShape = (PolygonShape)feature.GetShape();

                    Boolean b=markerlayer.marker.isWithin(polygonShape);

                    if(b)

                    {

                    alert("k");

                    }

                }

            }


 


can you please provide me the right way to  implement this.If you provide some sample it would be more appreciable.


If you need any further information please let me know.


 


Thanks & Regards,


Chandramohan.



Hi Chandramohan, 
  
 We suggest you did spatial query in server side. 
  
 You can add “TrackShapeFinished” event and did query simply like this: 
  
  
 protected void Map1_TrackShapeFinished(object sender, EventArgs e)
        {
            BaseShape shape = Map1.EditOverlay.Features[0].GetShape();

            InMemoryMarkerOverlay markerOverlay = (InMemoryMarkerOverlay)Map1.CustomOverlays[“MarkerOverlay”];
            {
                markerOverlay.FeatureSource.Open();
                Collection<Feature> features = markerOverlay.FeatureSource.GetAllFeatures(ReturningColumnsType.NoColumns);
                foreach (Feature feature in features)
                {
                    if (shape.Contains(feature))
                    {
                        // This marker is what you need
                    }
                }
            }
        }
 
  
 If you want to implement everything on client side, I think maybe you can get some help from JSTS library here for spatial query: 
 github.com/bjornharrtell/jsts 
  
 For Map1ClientDrawEnd the implement as below: 
  
 Server side: 
  
  Map1.EditOverlay.TrackMode = TrackMode.Rectangle;
                Map1.OnClientDrawEnd = “Map1ClientDrawEnd”;
 
  
 Client side: 
 
  var tgMap = null;
        var OnMapCreated = function (map) {
            tgMap = map;
        };
        var Map1ClientDrawEnd = function (feature) {
            if (tgMap) {
                var lonlat = tgMap.getLayersByName(‘MarkerOverlay’)[0].markers[0].lonlat;
                var lon = lonlat.lon;
                var lat = lonlat.lat;                
            }
        };
 
 
  
 Regards, 
  
 Don