ThinkGeo.com    |     Documentation    |     Premium Support

Markers using InMemoryMarkerOverlay not showing

Hi,


I'm using WebEdition 3.1.273, which we just upgraded from version 3.1.1x and I am seeing some behavior that did not occur in the previous version.  The markers that I want to display in a InMemoryMarkerOverlay are not showing at all now.  Additionally I get a javascript error saying "Syntax Error" when the page loads.  I noticed that this error goes away if I remove the line:


markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


But once this line is removed, I still do not see the markers.  Any help would be appreciated.


Thanks,Jeremy



Hi Jeremy,


We didn’t recreate the problem you mentioned in this post, and our test code is like this:


if (!Page.IsPostBack)
{
    Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
    Map1.CurrentExtent = new RectangleShape(-131.22, 55.05, -54.03, 16.91);
    Map1.MapUnit = GeographyUnit.DecimalDegree;

    WorldMapKitWmsWebOverlay worldMapKitOverlay = new WorldMapKitWmsWebOverlay();
    Map1.CustomOverlays.Add(worldMapKitOverlay);
    
    InMemoryMarkerOverlay markerOverlay = new InMemoryMarkerOverlay("MarkerOverlay");
    markerOverlay.Features.Add("Kansas", new Feature(-94.558, 39.078));
    markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
    Map1.CustomOverlays.Add(markerOverlay);
}


In addition, we are using the latest public release (3.1.273) Web Edition like you in our test sample. Could you please supply some code of yours or a simple sample to recreate this problem?
Any more questions please let me know.
Thanks,
Sun

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#B3C6D4")); Map1.MapUnit = GeographyUnit.Meter; Map1.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.LatitudeLongitude; Map1.MapTools.MouseCoordinate.Enabled = true; Map1.MapTools.OverlaySwitcher.Enabled = true; Map1.MapTools.OverlaySwitcher.BackgroundColor = GeoColor.StandardColors.DarkGray; Map1.MapTools.ScaleLine.Enabled = false; Map1.MapTools.MiniMap.Enabled = false; Map1.MapTools.Logo.Enabled = false; Proj4Projection proj1 = new Proj4Projection(); proj1.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326); proj1.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString(); YahooOverlay yahoo = new YahooOverlay("YahooOverlay", YahooMapType.Regular); yahoo.Name = "Yahoo Map"; yahoo.IsVisibleInOverlaySwitcher = true; yahoo.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["YahooUri"]); Map1.CustomOverlays.Add(yahoo); GeoCollection<FeatureSourceColumn>markerColumns = new GeoCollection<FeatureSourceColumn>(); markerColumns.Add(new FeatureSourceColumn("LocationId")); InMemoryMarkerOverlay markerOverlay = new InMemoryMarkerOverlay("Markers", markerColumns); markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; //<-- if I comment out this line, I do not see any markers, but I don't get an error InMemoryFeatureLayer locationLayer = new InMemoryFeatureLayer(); locationLayer.FeatureSource.Projection = proj1; markerOverlay.FeatureSource.Projection = proj1; //<-- if I comment out this line, I get markers, but projection is screwed up Map1.CustomOverlays.Add(markerOverlay); for (int i = 0; i < 3; i++) { Feature newFeature = new Feature(-83.002984 + (i * 2), 39.961961 + i); newFeature.ColumnValues.Add("LocationId", i.ToString()); markerOverlay.Features.Add(newFeature); } locationLayer.Open(); Map1.CurrentExtent = markerOverlay.FeatureSource.GetBoundingBox(); Map1.SyncClientZoomLevels(locationLayer.ZoomLevelSet); locationLayer.Close(); } } 



Jeremy,



I guess, projection is the main issue in your code. Please try to copy all the files from System32 folder in our package to System32 folder of your operation system. Please have a try. 



If you commend out the following code, we won't add the markers on your map; so the error disappears.

markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


Please let me know if you have any questions.



Thanks,

Howard



Howard,


The files should have all been copied into the System32 folder already, but I tried your suggestion anyway and I am still getting the error using the previous code.  Is there a file I need to register or something?  My dev environment is 32-bit.


Also, can you duplicate the error?


Jeremy



Jeremy,


We make a little change to your code, and now the marker displayed, could you please have try using the following block of codes?


protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#B3C6D4"));
        Map1.MapUnit = GeographyUnit.Meter;
        Map1.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.LatitudeLongitude;
        Map1.MapTools.MouseCoordinate.Enabled = true;
        Map1.MapTools.OverlaySwitcher.Enabled = true;
        Map1.MapTools.OverlaySwitcher.BackgroundColor = GeoColor.StandardColors.DarkGray;
        Map1.MapTools.ScaleLine.Enabled = false;
        Map1.MapTools.MiniMap.Enabled = false;
        Map1.MapTools.Logo.Enabled = false;
        Proj4Projection proj1 = new Proj4Projection();
        proj1.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
        proj1.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();
        YahooOverlay yahoo = new YahooOverlay("YahooOverlay", YahooMapType.Regular);
        yahoo.Name = "Yahoo Map";
        yahoo.IsVisibleInOverlaySwitcher = true;
        yahoo.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["YahooUri"]);
        Map1.CustomOverlays.Add(yahoo);
        GeoCollection<FeatureSourceColumn> markerColumns = new GeoCollection<FeatureSourceColumn>();
        markerColumns.Add(new FeatureSourceColumn("LocationId"));
        InMemoryMarkerOverlay markerOverlay = new InMemoryMarkerOverlay("Markers", markerColumns);
        markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

        //<-- if I comment out this line, I do not see any markers, but I don't get an error 
        InMemoryFeatureLayer locationLayer = new InMemoryFeatureLayer();
        locationLayer.FeatureSource.Projection = proj1;
        //markerOverlay.FeatureSource.Projection = proj1;
        //<-- if I comment out this line, I get markers, but projection is screwed up 
        Map1.CustomOverlays.Add(markerOverlay);
        for (int i = 0; i < 3; i++)
        {
            Feature newFeature = new Feature(-83.002984 + (i * 2), 39.961961 + i);
            newFeature.ColumnValues.Add("LocationId", i.ToString());
            markerOverlay.Features.Add(newFeature);
        }
        locationLayer.Open();
        Map1.CurrentExtent = markerOverlay.FeatureSource.GetBoundingBox();
        Map1.SyncClientZoomLevels(locationLayer.ZoomLevelSet);
        locationLayer.Close();
    }
}


Hope this make sense.
Any more questions please let me know.
Thanks,
Sun

Thanks for the reply, but there are problems with this code.  Number one, you  removed the following lines


LayerOverlay railcarLayerOverlay = new LayerOverlay"Location Link", false, TileType.MultipleTile); Map1.CustomOverlays.Add(railcarLayerOverlay);


I noticed this stops the error from happening as well, but this layer is needed in my application to draw historical data on.  Why does this cause the error not to happen anyway?  Are multiple CustomOverlays not allowed?


Number two, you commented out this line: 


markerOverlay.FeatureSource.Projection = proj1; //<-- if I comment out this line, I get markers, but projection is screwed up


This causes the projection to be screwed up as my original comment states, but the markers do show up.  Unfortunately I need the projection to be there so this layer shows correctly.


Thanks again,Jeremy



FYI - the error I am getting is a javascript error "Syntax Error" in opl_GeoResource.axd.



For anyone interested, I got this to work by removing the FeatureSourceColumns and adding the Features directly.  Here is the code:


protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
{
Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#B3C6D4"));
Map1.MapUnit = GeographyUnit.Meter;
Map1.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.LatitudeLongitude;
Map1.MapTools.MouseCoordinate.Enabled = true;
Map1.MapTools.OverlaySwitcher.BackgroundColor = GeoColor.StandardColors.DarkGray;
Map1.MapTools.ScaleLine.Enabled = false;
Map1.MapTools.MiniMap.Enabled = false;
Map1.MapTools.Logo.Enabled = false;

Proj4Projection proj1 = new Proj4Projection();
proj1.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
proj1.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();

Proj4Projection proj2 = new Proj4Projection();
proj2.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
proj2.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();

YahooOverlay yahoo = new YahooOverlay("YahooOverlay", YahooMapType.Regular);
yahoo.Name = "Yahoo Map";
yahoo.IsVisibleInOverlaySwitcher = true;
yahoo.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["YahooUri"]);

Map1.CustomOverlays.Add(yahoo);

InMemoryMarkerOverlay markerOverlay = new InMemoryMarkerOverlay("Markers");

for (int i = 0; i < 3; i++)
{
Feature newFeature = new Feature(-83.002984 + (i * 2), 39.961961 + i);
newFeature.ColumnValues.Add("LocationId", i.ToString());
markerOverlay.Features.Add(newFeature);
}

markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  //<-- if I comment out this line, I do not see any markers, but I don't get an error
InMemoryFeatureLayer locationLayer = new InMemoryFeatureLayer();

locationLayer.FeatureSource.Projection = proj1;
markerOverlay.FeatureSource.Projection = proj2;  //<-- if I comment out this line, I get markers, but projection is screwed up

LayerOverlay railcarLayerOverlay = new LayerOverlay("Location Link", false, TileType.MultipleTile);
Map1.CustomOverlays.Add(railcarLayerOverlay);
Map1.CustomOverlays.Add(markerOverlay);


locationLayer.Open();
markerOverlay.FeatureSource.Open();
Map1.CurrentExtent = markerOverlay.FeatureSource.GetBoundingBox();
Map1.SyncClientZoomLevels(locationLayer.ZoomLevelSet);
locationLayer.Close();
markerOverlay.FeatureSource.Close();
            }
        }



Jeremy,


For the first problem you mentioned in your post, sorry for missing the railcarLayerOverlay. And the projection which is set to markerOverlay should be open when you call the GetBoundingBox function. So I made some change to my code, please take a look:


protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        string url = "api.maps.yahoo.com/ajaxymap?v=3.8&appid=YD-eQRpTl0_JX2E95l_xAFs5UwZUlNQhhn7lj1H";

        Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#B3C6D4"));
        Map1.MapUnit = GeographyUnit.Meter;
        
        Map1.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.LatitudeLongitude;
        Map1.MapTools.MouseCoordinate.Enabled = true;
        Map1.MapTools.OverlaySwitcher.Enabled = true;
        Map1.MapTools.OverlaySwitcher.BackgroundColor = GeoColor.StandardColors.DarkGray;
        Map1.MapTools.ScaleLine.Enabled = false;
        Map1.MapTools.MiniMap.Enabled = false;
        Map1.MapTools.Logo.Enabled = false;

        Proj4Projection proj1 = new Proj4Projection();
        proj1.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
        proj1.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();

        YahooOverlay yahoo = new YahooOverlay("YahooOverlay", YahooMapType.Regular);
        yahoo.Name = "Yahoo Map";
        yahoo.IsVisibleInOverlaySwitcher = true;
        yahoo.JavaScriptLibraryUri = new Uri(url);
        Map1.CustomOverlays.Add(yahoo);

        GeoCollection<FeatureSourceColumn> markerColumns = new GeoCollection<FeatureSourceColumn>();
        markerColumns.Add(new FeatureSourceColumn("LocationId"));
        InMemoryMarkerOverlay markerOverlay = new InMemoryMarkerOverlay("Markers", markerColumns);
        markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

        //<-- if I comment out this line, I do not see any markers, but I don't get an error 
        InMemoryFeatureLayer locationLayer = new InMemoryFeatureLayer();
        locationLayer.FeatureSource.Projection = proj1;

        markerOverlay.FeatureSource.Projection = proj1;
        //<-- if I comment out this line, I get markers, but projection is screwed up 

        LayerOverlay railcarLayerOverlay = new LayerOverlay("Location Link", false, TileType.MultipleTile);
        
        Map1.CustomOverlays.Add(railcarLayerOverlay);
        Map1.CustomOverlays.Add(markerOverlay);

        for (int i = 0; i < 3; i++)
        {
            Feature newFeature = new Feature(-83.002984 + (i * 2), 39.961961 + i);
            newFeature.ColumnValues.Add("LocationId", i.ToString());
            markerOverlay.Features.Add(newFeature);
        }

        markerOverlay.FeatureSource.Open();
        markerOverlay.FeatureSource.Projection.Open();
        Map1.CurrentExtent = markerOverlay.FeatureSource.GetBoundingBox();
        Map1.SyncClientZoomLevels(locationLayer.ZoomLevelSet);
        markerOverlay.FeatureSource.Close();
    }
}


And this block of code works fine in my machine, we are using the latest public release version (3.1.273) of WebEdition in our sample.
Any more questions please let me know.
Thanks,
Sun