ThinkGeo.com    |     Documentation    |     Premium Support

OpenStreetMapOverlay coordinates change when IsBaseOverlay = false

Hi,


 tried to use OverlaySwitcher instead of radio
buttons.


Using “WebEdition_HoDoI_CS \ Overlay
\UseOpenStreetMap” sample add 2 lines:





OpenStreetMapOverlay osmOverlay = new OpenStreetMapOverlay("Open Street Map");



// added lines begin<o:p></o:p>


osmOverlay.IsBaseOverlay = false;<o:p></o:p>


osmOverlay.IsVisibleInOverlaySwitcher = true;<o:p></o:p>


// added lines end<o:p></o:p>


Map1.CustomOverlays.Add(osmOverlay);<o:p></o:p>







 With “IsBaseOverlay = false” coordinates for a choosen point are not the same as with “IsBaseOverlay
= true”.


Can you confirm this and is there a workaround?


Best Regards Helmut


 



Hi Helmut, 
  
 Do you meant when you set to False or True, the same point on map shows different coordinates with the lower-right MouseCoordinate? 
  
 I did a quickly test, it looks just the same. 
  
 Could you please upload a screen capture for that and which version are you using? 
  
 Regards, 
  
 Don

Hi Don,



thanks for the response.

The version = 8.0.0.0.

For both test cases ( IsBaseOverlay = true or false ) I choose a point and place the mouse cursor over the choosen point. Then I compare the shown coordinates in the lower right corner of the map control.

There is a difference in X and Y between the 2 cases. Also noticed, if “IsBaseOverlay = false” I’m not able to fully zoom in anymore, it stops at zoom level 19.



Note: the images show a point in the south of Key West Florida

IsBaseOverlay = true ( -9106045 / 2020246 )





IsBaseOverlay = false (-9106074 / 2020184 )





IsBaseOverlay = false, but cursor on “IsBaseOverlay = true” - coordinate ( -9106045 / 2020246 )





The cursor is not on the same point anymore. 

This means if you would place a point/feature on this coordinate it would show up on different places ( this is the actual bug I’m facing ).

Note, I only saw this on OpenStreetMap, not with Google or Bing.



Best Regards

Helmut

Hi Helmut,  
  
 I think maybe I missed something here, as below is my test code, I want to directly zoom into the point (-9106045, 2020246) but I found this point in OSM is in the sea but not in the point of your screen capture. 
  
 Please let me know if I missed any code here: 
  
  
  public partial class UseOpenStreetMap : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
                //Map1.CurrentExtent = new RectangleShape(-13939426.6371, 6701997.4056, -7812401.86, 2626987.386962);
                Map1.MapUnit = GeographyUnit.Meter;
                Map1.MapTools.MouseCoordinate.Enabled = true;
                Map1.MapTools.OverlaySwitcher.Enabled = true;

                OpenStreetMapOverlay osmOverlay = new OpenStreetMapOverlay("Open Street Map");
                // added lines begin
                osmOverlay.IsBaseOverlay = true;
                osmOverlay.IsVisibleInOverlaySwitcher = true;
                // added lines end

                Map1.CurrentScale = new ZoomLevelSet().ZoomLevel19.Scale;
                Map1.CenterAt(-9106045, 2020246);                
                Map1.CustomOverlays.Add(osmOverlay);
            }
        }
    }

 
  
 Regards, 
  
 Don

Hi Don,



sorry my fault, wasn’t aware that the coordinates that you see in the map are not the same as the coordinates you get in OnClick.



Please use the following code to reproduce the problem:


public partial class UseOpenStreetMap : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
            Map1.MapUnit = GeographyUnit.Meter;
            Map1.MapTools.MouseCoordinate.Enabled = true;
 
            OpenStreetMapOverlay osmOverlay = new OpenStreetMapOverlay(“Open Street Map”);
            osmOverlay.IsBaseOverlay = true;
            //osmOverlay.IsBaseOverlay = false;// to reproduce offset error, uncomment this line
            Map1.CustomOverlays.Add(osmOverlay);
 
            PointShape pointInKeyWest = new PointShape(-9106046, 2820243);
            InMemoryFeatureLayer pointLayer = new InMemoryFeatureLayer();
            pointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimplePointStyle(PointSymbolType.Circle, GeoColor.StandardColors.Red, 11);
            pointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
            pointLayer.InternalFeatures.Add(“KeyWestPoint”, new Feature(pointInKeyWest));
 
            LayerOverlay dynamicOverlay = new LayerOverlay();
            dynamicOverlay.TileType = TileType.SingleTile;
            dynamicOverlay.IsBaseOverlay = false;
            dynamicOverlay.Layers.Add(“InMemoryFeatureLayer”, pointLayer);
            Map1.CustomOverlays.Add(dynamicOverlay);
 
            Map1.CurrentScale = new ZoomLevelSet().ZoomLevel18.Scale;
            Map1.CenterAt(pointInKeyWest);
        }
    }
}

As said the point moves “IsBaseOverlay” - dependent.



Thanks and Regards

Helmut

Hi Helmut, 
  
 Thanks for your code, we reproduced that, it looks it only appear when the overlay is OpenStreetMapOverlay, we will work for it and any update will let you know. 
  
 Regards, 
  
 Don

Hi Helmut,  



Sorry reply you too late, I just discuss this with our development team, so I just know in our design the OpenStreetMapOverlay/BingMapsOverlay/GoogleOverlay can just be set as BaseOverlay, because all of them are opaque, so they cannot cover other layer. 



So could you please let us know your scenario here, we want to know why need to set osmOverlay.IsBaseOverlay = false, and help you find a solution for that. 



And I just know why the point in different location, that’s because when you set OpenStreetMapOverlay is not BaseOverlay it render under different projection.



Regards, 



Don

Thanks Don,



this is no problem as we have a workaround for it. The original idea was to have every overlay ( map, shape, raster ) switchable via checkbox.

Now we use the radio buttons for the maps ( OSM, Google, Bing ) and an empty dummy overlay ( “No Map” ) all having IsBaseOverlay = true.

With this all points are correct.

It looks like this:





Thanks for the help.



Regards Helmut


Hi Helmut, 
  
 I am glad to hear you have solved that. 
  
 Any question please let us know. 
  
 Regards, 
  
 Don