ThinkGeo.com    |     Documentation    |     Premium Support

Displaying POI data when users click

I have a layer with the POI and Irender it over the map with a custom style


"POILayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = New PointStyle(PointSymbolType.Star, New GeoSolidBrush(GeoColor.StandardColors.Green), 10)"


But I need to access to their db info (I use shapefiles) in order to display it in some place when the user clicks over them.


I've tried to use the samples that comes with the map suite (web edition) but I don't get it.


Any suggestion?


 


Francisco.



Francisco,



In the click event, it's hard to click the accuracy position where your point shape at. You need to buffer the click point to a polygon then querying.



Here is the code for you; hope it helps.

// get the click position.
PointShape clickWorldPosition = e.Position;

// convert to screen point.
ScreenPointF clickScreenPoint = Map1.ToScreenCoordinate(clickWorldPosition);

// 5 is the radius to buffer the click point.
ScreenPointF clickNextScreenPoint = new ScreenPointF(clickScreenPoint.X + 5, clickScreenPoint.Y);

// calculate the distance is world coordinate of the radius.
double worldDistance = ExtentHelper.GetWorldDistanceBetweenTwoScreenPoints(Map1.CurrentExtent, clickScreenPoint, clickNextScreenPoint, (float)Map1.WidthInPixels, (float)Map1.HeightInPixels, GeographyUnit.DecimalDegree, DistanceUnit.Meter);

// calculate the buffer which you need use for querying.
MultipolygonShape clickArea = clickWorldPosition.Buffer(worldDistance, GeographyUnit.DecimalDegree, DistanceUnit.Meter);



Any questions please let me know.



Thanks,

Howard



Thanks for the help Howard but I don’t know how to get the feature data that is a Point, not a Area. I check  and modify the code that came with the demo samples: 
  
 ---------------- SAMPLE ---------------------- 
     Private Sub Map1_Click1(ByVal sender As Object, ByVal e As ThinkGeo.MapSuite.WebEdition.MapClickedEventArgs) Handles Map1.Click 
  
         Dim PuntosLayer As FeatureLayer = DirectCast(Map1.StaticOverlay.Layers(“CallesLayer”), FeatureLayer) 
         PuntosLayer.Open() 
         Dim selectedFeatures As Collection(Of Feature) = PuntosLayer.QueryTools.GetFeaturesContaining(e.Position, New String(1) {“STREET”, “SECCIONES”}) '{“NEGOCIO”, “TIPO”} 
         PuntosLayer.Close() 
  
         If selectedFeatures.Count > 0 Then 
             LabelNombre.Text = selectedFeatures(0).ColumnValues(“NEGOCIO”) 
             LabelTipo.Text = selectedFeatures(0).ColumnValues(“TIPO”) 
         End If 
  
     End Sub 
  
 ----------------------- END OF SAMPLE --------------------------------- 
  
  
 Every time I click on the point the collecction doesn’t have any results. 


Francisco,



Actually, my attached code is the idea for you. In my last reply algorism, I get the click point and then buffer to a multipolygon which you can directly query features than intersect with the multpolygon. Please see the code below:

Dim selectedFeatures As Collection(Of Feature) = PuntosLayer.QueryTools.GetFeaturesIntersecting(e.Position, New String(1) {"STREET", "SECCIONES"})


Hope it makes sense.

Thanks,

Howard