ThinkGeo.com    |     Documentation    |     Premium Support

Question About Drawing Point while Measuring Distance

hi sir,


in my distance function, it try to use the same function as it is in the samples.

but by the end of the code, this is the line where drawing of line and points must be visible:


Map1.DynamicOverlay.Redraw();


in my case, i use CustomOverlay not dynamic, so i don't have the function of redraw, the code is working and giving true results, but it is still invisble.


this is my code:


LayerOverlay layerOverlay1 = (LayerOverlay)Map1.CustomOverlays["ShapeOverlay"];

                

                InMemoryFeatureLayer pointShapeLayer = (InMemoryFeatureLayer)layerOverlay1.Layers["pointShapeLayer"];

                Feature newPoint = new Feature(e.Position);

                InMemoryFeatureLayer lineShapeLayer = (InMemoryFeatureLayer)layerOverlay1.Layers["lineShapeLayer"];




                if (ViewState["StartPoint"] == null)

                {

                    pointShapeLayer.InternalFeatures.Clear();

                    lineShapeLayer.InternalFeatures.Clear();

                }


                pointShapeLayer.InternalFeatures.Add(newPoint.Id, newPoint);


                if (ViewState["StartPoint"] != null)

                {

                    PointShape startPoint = (PointShape)ViewState["StartPoint"];

                    MultilineShape line = startPoint.GetShortestLineTo(e.Position, GeographyUnit.DecimalDegree);


                    Feature lineFeature = new Feature(line);

                    string distanceValue = String.Format("{0} Mile", line.GetLength(GeographyUnit.DecimalDegree, DistanceUnit.Mile).ToString("N2"));

                    lineShapeLayer.InternalFeatures.Add(lineFeature.Id, lineFeature);


                    CloudPopup popup;

                    if (Map1.Popups.Contains("DistancePopup"))

                    {

                        popup = (CloudPopup)Map1.Popups["DistancePopup"];

                        popup.Position = e.Position;

                        popup.ContentHtml = distanceValue;

                        popup.IsVisible = true;

                    }

                    else

                    {

                        popup = new CloudPopup("DistancePopup", e.Position, distanceValue);

                        Map1.Popups.Add(popup);

                        popup.AutoSize = true;

                    }


                    ViewState["StartPoint"] = null;

                }

                else

                {

                    ViewState["StartPoint"] = e.Position;


                    if (Map1.Popups.Contains("DistancePopup"))

                    {

                        Map1.Popups["DistancePopup"].IsVisible = false;

                    }

                }




                //Map1.DynamicOverlay.Redraw();


 


and i have adding those 2 layers using this code:


 




                LayerOverlay layerOverlay33 = new LayerOverlay("ShapeOverlay");


                InMemoryFeatureLayer pointShapeLayer = new InMemoryFeatureLayer();

                pointShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimplePointStyle(PointSymbolType.Circle, GeoColor.StandardColors.Red, 8);

                pointShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


                InMemoryFeatureLayer lineShapeLayer = new InMemoryFeatureLayer();

                lineShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = new LineStyle(new GeoPen(GeoColor.StandardColors.Red, 3));

                lineShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


 


                layerOverlay33.Layers.Add("pointShapeLayer", pointShapeLayer);

                layerOverlay33.Layers.Add("lineShapeLayer", lineShapeLayer);

                

                Map1.CustomOverlays.Add(layerOverlay33);



Hi Ahmed,


In fact, the Map1.DynamicOverlay is just an instance of LayerOverlay, and the ReDraw function is a function of LayerOverlay. So you just need to call the ReDraw function of the LayerOverlay which is in the CustomOverlays collection after you have made some changes to it like this:


LayerOverlay layerOverlay1 = (LayerOverlay)Map1.CustomOverlays["ShapeOverlay"];

layerOverlay1.ReDraw();


Also you said that you didn’t find the redraw function, can you make sure that you are using the latest public release version (3.1.182) of Web Edition?
Any more questions please let me know.
Thanks,
Sun

no, what i mean is, if i should add 2 different CustomOverlays, only the first one will be visible, why? 
  
 please check this example: 
 4shared.com/file/140974255/53007482/_2__WebApplication1_-_Copy.html 
  
  
  
 in this example, i have one layer for my countery, the other layer is for drawing. 
  
 if i put my countery before, it will render, the other layer will added but if you try to click in two different points to measure distance, you will not see the lines, but you will find the result. 
  
 if i put my countery layer after drawing layer, my countery will not be visible, but even in this case. 
 so shall i put them all in one layer? 
  
 can you check this for me please. 
 thanks.

Ahmed,



That's because the base overlay type. General speaking, the we only allow one base overlay displays on the map at one time. Try to think adding two overlays whoes background is not transparent. The second overlay overlaps and totally covers the one in the bottom; so that bottom one cannot be saw.



I recommend turning the OverlaySwitcher enabled; you'll notice that there is a radio button in front of the two custom overlays' name.

Map1.MapTools.OverlaySwitcher.Enabled = true;


Please set the second overlay's IsBaseOverlay property to false if you want to display both of them at one time. Please get more information from the post below.

gis.thinkgeo.com/Support/Dis...fault.aspx



Please feel free to let me know if you have any queries.



Thanks,

Howard



Thank you, it is working now. 
  
 last thing I want is just suggestion, if I use to calculate multi point line distance, so I will have incremental and the distance value will go on, it is working, but I informed user to double click when reaching to the final point so i will show the pop up, but it looks that double click event of the map is very hard to fire, the 2 clicks must be exactly in the same place and very fast, it try to change it from control panel but still the same problem. 
  
 So if you can suggest me another scenario of that. 
  


Hi Ahmed, 
  
 Thanks for your suggestion. I think the double click problem is related to the computer environment. We will do more tests against this and make some improvement. 
  
 Please feel free to let me know if you have any more questions. 
  
 Thanks, 
  
 Sun