ThinkGeo.com    |     Documentation    |     Premium Support

I got error when I add draw feature to inmemory layer. (google is base map)

I testing with your sample code in page name : DrawEditShape


this code :



        public partial class DrawEditShapes : 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(10836250.0472719, 2328225.56066376, 11759466.9830867, 625833.622052803);
                Map1.MapUnit = GeographyUnit.Meter;

                WorldMapKitWmsWebOverlay worldMapKitWmsWebOverlay = new WorldMapKitWmsWebOverlay("WorldMapKitOverlay");
                worldMapKitWmsWebOverlay.Projection = WorldMapKitProjection.SphericalMercator;

                //Map1.CustomOverlays.Add(worldMapKitWmsWebOverlay);

                BingMapsOverlay bing = new BingMapsOverlay("Bing Map");
                bing.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["VEUri"]);
                bing.MapType = ThinkGeo.MapSuite.WebEdition.BingMapsStyle.BirdseyeHybrid;
                //Map1.CustomOverlays.Add(bing);

                GoogleOverlay google = new GoogleOverlay("Google Map");
                google.GoogleMapType = GoogleMapType.Normal;
                google.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["GoogleUriV3"]);
                Map1.CustomOverlays.Add(google);

                OpenStreetMapOverlay osmOverlay = new OpenStreetMapOverlay("Open Street Map");
                //Map1.CustomOverlays.Add(osmOverlay);

                WmsOverlay wms = new WmsOverlay("WMS Overlay");
                wms.Parameters.Add("layers", "Countries02,USSTATES,USMAJORCITIES");
                wms.Parameters.Add("STYLE", "SIMPLE");
                wms.ServerUris.Add(new Uri("wmssamples.thinkgeo.com/WmsServer.aspx"));
                wms.SetBaseEpsgProjection("EPSG:900913");
                //Map1.CustomOverlays.Add(wms);

                YahooOverlay yahoo = new YahooOverlay("Yahoo Map");
                yahoo.YahooMapType = YahooMapType.Regular;
                yahoo.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["YahooUri"]);
                //Map1.CustomOverlays.Add(yahoo);

                InMemoryFeatureLayer shapeLayer = new InMemoryFeatureLayer();
                shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.FromArgb(180, 102, 255, 102), 10, GeoColor.StandardColors.DarkGreen, 1);
                shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Green, 4, true);
                shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(180, 102, 255, 102), GeoColor.StandardColors.DarkGreen, 1);
                shapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                shapeLayer.DrawingQuality = DrawingQuality.HighQuality;

                LayerOverlay dynamicOverlay = new LayerOverlay("DynamicOverlay");
                dynamicOverlay.IsBaseOverlay = false;
                dynamicOverlay.TileType = TileType.SingleTile;
                dynamicOverlay.Layers.Add("shapeLayer", shapeLayer);
                Map1.CustomOverlays.Add(dynamicOverlay);
                Map1.MapTools.OverlaySwitcher.Enabled = true;

            }
        }

        protected void buttonSubmit_Click(object sender, ImageClickEventArgs e)
        {
            LayerOverlay dynamicOverlay = (LayerOverlay)Map1.CustomOverlays["DynamicOverlay"];
            InMemoryFeatureLayer shapeLayer = (InMemoryFeatureLayer)dynamicOverlay.Layers["shapeLayer"];

            foreach (Feature feature in Map1.EditOverlay.Features)
            {
                if (!shapeLayer.InternalFeatures.Contains(feature.Id))
                {
                    shapeLayer.InternalFeatures.Add(feature.Id, feature);
                }
            }

            Map1.EditOverlay.Features.Clear();
            Map1.EditOverlay.TrackMode = TrackMode.None;
            dynamicOverlay.Redraw();
        }

        protected void buttonEditShape_Click(object sender, ImageClickEventArgs e)
        {
            LayerOverlay dynamicOverlay = (LayerOverlay)Map1.CustomOverlays["DynamicOverlay"];
            InMemoryFeatureLayer shapeLayer = (InMemoryFeatureLayer)dynamicOverlay.Layers["shapeLayer"];

            foreach (Feature feature in shapeLayer.InternalFeatures)
            {
                Map1.EditOverlay.Features.Add(feature.Id, feature);
            }

            shapeLayer.InternalFeatures.Clear();
            Map1.EditOverlay.TrackMode = TrackMode.Edit;
            dynamicOverlay.Redraw();
        }

        protected void Map1_TrackShapeFinished(object sender, EventArgs e)
        {
            LayerOverlay dynamicOverlay = (LayerOverlay)Map1.CustomOverlays["DynamicOverlay"];
            InMemoryFeatureLayer shapeLayer = (InMemoryFeatureLayer)dynamicOverlay.Layers["shapeLayer"];

            foreach (Feature feature in Map1.EditOverlay.Features)
            {
                var a = feature.GetWellKnownText();
                shapeLayer.InternalFeatures.Add(feature.Id, feature);
            }

            Map1.EditOverlay.Features.Clear();
            dynamicOverlay.Redraw();

        }
    }

 


I draw feature and add to inmemory feature, then I resize window I get this error.


 



Update :


I test by add Map_Click event.


then, I Click on map.


and next, I get same error


 


 


 


 


 


 



 and Same code


 


I try to add yahoo with other base map when I resize window I get error in picture.


1. I testing by wolrd map grid,wms layer,shapefeaturelayer,bing map. I get this  (If add all layer(Google,Yahoo,wms,Shape,bingmap,worldmapkit ) It got same error)



2.  Testing by GoogleMap,Open street map  (use for 2 base { yahoo,google},{yahoo,osm } ) .  if add yahoo google and OSM it work fine But When I draw feature and resize  I got error same picture in first post.



 


If I add YahooMap one.(I mean I add Yahoo to base map only one). It work fine.


 


I need to know what's happen.


Pleasew answer me. (Question 1 is important for me)


thanks.



Hello sumeth, 
  
 I have tested with your sample code, but everything is fine, I can resize and click, I can’t recreate your problem, could you please provide a sample that can run directly and recreate the problem? 
  
 Thanks for your help, 
  
 Regards, 
  
 Gary

code :



mediafire.com/?dbnzgzfa6u2s3yt


video:


mediafire.com/?6dmcidd77j743mr


 


I coding in samples code.  please copy and replace to samples code project.


I do nothing with web.config.


I don't know why, I get error.




Hello sumeth, 
  
 Thanks for your code and video, I can see you problem in the video, but I can’t recreate them with the code. 
  
 First, I try to replace this three file, but I can’t find the DrawEditShapes.aspx file, you have copied DrawEditShapes.aspx.htm in the folder, it’s not the same, so I have to use my own DrawEditShapes.aspx file only replaced the rest two file, but I can’t recreate the problem. 
  
 So could you please provide your solution to me? Or if you made any changes in your DrawEditShapes.aspx file, you can give me that and I can have an other try. 
  
 Sorry for inconvenience, 
  
 Regards, 
  
 Gary

 I think I get error because I use Google V3 key.


I try to change for Google Map V2 it no problem, but in mini map is worst coordinate in first load.

If I resize window and then I pan or zoom map it have right coordinate again.
 
 my solution is here :mediafire.com/?6inwfsogk575adb
 
thank you ,Gary
 

 Hello sumeth,


The problem is the MiniMap Maximize/Minimize ratios.
 
Please try changing these values as shown below: 
Map1.MapTools.MiniMap.MaximizeRatio = 24; 
Map1.MapTools.MiniMap.MinimizeRatio= 20;
 
Sorry for the inconvenience.
 
Regards,
 
Gary

that not resolve for me  



Google V3 is error when resize. 



and 



Google V2 is wrost coordinate when I change Base Overlay to GoogleMap.


here video : mediafire.com/?39680e2h653iie6



 Hello sumeth, 


Thanks for your video, I can see the problem, but I can't recreate it. Here is a video :screencast.com/t/PRdpRCnVZ


you can see minimap works fine, and I just run this depend on your code. Could you please provide a solution that I can check if any config problem?


Also I want to know what's your web edtion version?


Thanks for your help and sorry for the inconvenience.


Regards,


Gary



Hello Gary, 

I use Web Edition V5.0, I don't know when your up to V5.5  and use IE 9 

I will change to try it and answer for you. 

I will test all function again. 

I'm sorry for my imprudent. 





Do this step. 

Case 1: Mini map  is wrong coordinate with Google map V2 when switch Base Layer . (Google Map V3 is wrong coordinate when first switch layer.If I pan or zoom that make right coordinate.)



1. add  2 Base Map (Google , Other Map) 

2. Run a page. 

3. Look at minimap. (My result is wrong coordinate in minimap) 

4. switch to another BaseMap . 

5. switch to googlemap again. 

6. see at minimap. (minimap  is wrong coordinate.)


7.  pan map and see result (minimap is wrong coordinate)




Case 2: Click on map and then resize browser. Get error!  (use Google Map V3) ( Google Map V2 is work fine)


1. add google map to base map. 

2. add event  click to map (server side)

3. run it. 

4. click on map. 

5. resize browser 

6. see result (I get Error. see picture at first post in this topic.)


 


I try to do with same cases in V5.5


I got same result.


Here Code : mediafire.com/?8coc4e2ny2owc40


copy and replace in HowDoISample Project


 


all above run with debug.


I test  with view in browser in


IE9    Line: 8 Error: Invalid argument.


Firefox,Chrome is look like no happen. It nothing alert for error.(for case 1: it wrong position when switch to google map. if pan the map , it has right coordinate again)


 


 


Regard,


Sumeth



Hello sumeth, 
  
 Thanks for your code, now I can recreate some of your problems. 
  
 Case1: I can get the right minimap when I run the page, but after switch overlay, I can see the problem. 
  
 Case2: I have tested with chrome before, try to use IE9 today, but I can’t get any error message. When I click the map, I can see the minimap have problems, but after resize no exception thrown. 
  
 I have created a issue for this, and I will let you know the result as soon as we find the root cause, then we can try if the rest of the problem still will show in your computer. 
  
 Thanks for your patience. 
  
 Regards, 
  
 Gary

this code and video of case 2 : mediafire.com/?rs1kkcy03hdiidm


copy and replace to HowDoISample.


 


I will be wait for you answer.  

thanks for your patience too.  

I think Mapsuite team have support good.  



Best Regards,  

Sumeth



Hello sumeth, 
  
 Thanks for your further information and waiting. 
  
 We have find the root cause, but sorry to say, this problem is too difficult to a post, the root cause is  it’s not a default operation from OpenLayers , and is when switching to GoogleOverlay, its position is incorrect, but after 100ms, it adjusts to its right position. We can’t fix this in a short time. 
  
 We will have plan to fix this in the future, thanks for your understanding. 
  
 Regards, 
  
 Gary

In case2 ,Are you have error like me? 
  
 this code and video of case 2 : mediafire.com/?rs1kkcy03hdiidm 
  
 copy and replace to HowDoISample.

Hello sumeth, 
  
 Thanks for your sample code, I have tested it again, same result, I can see  the minimap have problems, but after resize no exception thrown. 
 I have tried both IE, Chrome, Firefox. IE version 9.0.8112.16241. Chrome version 16.0.912.63 Firefox version 3.6.6 
  
 Could you please try the newest WebEdition and see if the problem still exist? 
  
 Regards, 
  
 Gary