ThinkGeo.com    |     Documentation    |     Premium Support

Map Loading GridFeatureLayer slow

Hi Gis Team ,

            Loading GridFeaturelayer file size is more than 200M, the map display effect will be very slow, about the time required for 4-6 minutes, have any good solutions?  

                Thinks .             


Hi Li, 
  
 The same issue is on this thread: thinkgeo.com/forums/MapSuite/tabid/143/aft/11552/Default.aspx 
  
 Thanks, 
 Johnny

Hi Gis Team, 
       The same problem, InMemoryMarkerOverLay loading of 3000 Marker is also very slow. drag the map page report script abnormal pop-up stop loading the script file, what are the solutions? 


Hi Li, 
  
 Just as you know,  we generate the information of the MarkerOverlay, such as each marker’s position, marker’s icon, offset and others, on server side, and then send these information in JSON format to client side to create the HTML DOM elements (a DIV containing an image representing the marker), but the page will becomes really slow if we load a huge number of DOM elements. Additionally, loading more than 3000 image for one time will consume lots of internet speed, it will also cause the application loading slower. 
  
 In my opinion, here are some hints which might be useful for you: 
 • Using SuppressingGridSize. Such as markerOverlay.SuppressingGridSize = 10; 
 • Using Cluster Marker style: 
 ClusterMarkerStyle clusterStyle = new ClusterMarkerStyle(10, 1000, 800); 
                 clusterStyle.MarkerStyle = new PointMarkerStyle(new WebImage("…/…/theme/default/img/marker_blue.gif", 21, 25)); 
                 markerOverlay.ZoomLevelSet.ZoomLevel01.CustomMarkerStyle = clusterStyle; 
 • Load all these markers in InMemoryFeatureLayer , and showing these using PointStyle 
  
 Thanks, 
 Johnny 


Hi Johnny , 
 Thinks your answer ,Page loading speed much faster. 
  
 Because the Marker Image to the rotation angle 
 so SimpleMarkerOverlay loading of 9000 Marker is also the issue of the same load slowly. 
  
 The ClusterMarkerStyle property SimpleMarkerOverlay does not exist 
 What is the method of improving speed?  
  
 thinks , 
 Li 
  
  
  


Hi Li, 
  
 Actually, we don’t recommend to use the SimpleMarkerOverlay with a large number of markers. Just like you are faced, there is no SuppressingGridSize property or ClusterMarkerStyle for it. What’s more, the most difference between SimpleMarkerOverlay and InMemoryMarkerOverlay is the InMemoryMarkerOverlay is using Ajax to load all the markers, and the SimpleMarkeroveraly loads all the markers at one time. 
  
 if you want to rotate the marker, the InMemoryMarkerOverlay still supports it. Please following the below codes: 
 
                ClusterMarkerStyle clusterStyle = new ClusterMarkerStyle(10, 1600, 1200);
                PointMarkerStyle pointMarkerStyle = new PointMarkerStyle();
                pointMarkerStyle.WebImage = new WebImage("…/…/theme/default/img/marker_blue.gif", 21, 25);
                pointMarkerStyle.WebImage.RotationAngle = 50;
                clusterStyle.MarkerStyle = pointMarkerStyle;

                markerOverlay.ZoomLevelSet.ZoomLevel01.CustomMarkerStyle = clusterStyle;
 
 Please let us know if more questions. 
 Thanks, 
 Johnny

Hi Johnny, 
 Thinks your answer . 
   
 so,but ClusterMarkerStyle is every  Marker properties of  WebImage.RotationAngle must be the same in InmemoryMarkerOverLay. 
 Every Marker property WebImage.RotationAngle is not the same in the InmemroyOverlay. 
 I demand that is every Marker properties of WebImage and WebImage.Rotationangle base on Feature.columValue["State"] values of different is different in InMemoryMarkerOverlay. 
  
 Thanks,  
 LiHui

Hi Li, 



we can use the valueMarkerStyle to do it in the InMemoryMarkerOverlay. I created a sample for you, please have a look. 

Any questions please feel free to let us know. 



Thanks, 

Johnny

post11551.txt (2.79 KB)

Hi Johnny , 
   Using valueMarkerStyle to satisfy my needs, but the use of InMemoryMarkerOverLay loading of 6000 Markers is still very slow. The reason may be related to ValueMarkerStyle? If you use the ClusterMarkerStyle attribute speed will speed much !faster 
 thinks  
 LiHui

Hi Li,  
  
 Sorry the attached file in the last reply is missing somehow. Actually, the attached file post11551.txt shows how to use the valueMarkerStyle with ClusterMarkerStyle. The performance is good like expected. 
 Now, I paste them below, please double check it. 
  
 As for loading of 6000 Markers is still very slow with valueMarkerStyle, may I know you how to use it in your end? 
  
 Thanks, 
 Johnny 
  
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", new Collection<FeatureSourceColumn>() { new FeatureSourceColumn("state")});
                //markerOverlay.SuppressingGridSize = 10;
                Random random = new Random();
                for (int i = 0; i < 3000; i++)
                {
                    double xdelt = random.NextDouble() * (131 - 54);
                    double ydelt = random.NextDouble() * (55 - 16);
                    Feature feature = new Feature(-54 - xdelt, 16 + ydelt);
                    if (i % 2 == 0)
                    {
                        feature.ColumnValues.Add("state", "Texas");
                    }
                    else
                    {
                        feature.ColumnValues.Add("state", "California");
                    }
                    markerOverlay.FeatureSource.InternalFeatures.Add(feature);
                }


                MarkerValueItem item1 = new MarkerValueItem("Texas");
                item1.DefaultMarkerStyle = new PointMarkerStyle();
                item1.DefaultMarkerStyle.WebImage = new WebImage("…/…/theme/default/img/marker_blue.gif", 21, 25);
                item1.DefaultMarkerStyle.WebImage.RotationAngle = 50;

                MarkerValueItem item2 = new MarkerValueItem("California");
                item2.DefaultMarkerStyle = new PointMarkerStyle();
                item2.DefaultMarkerStyle.WebImage = new WebImage("…/…/theme/default/img/marker_green.gif", 21, 25);
                item2.DefaultMarkerStyle.WebImage.RotationAngle = -50;

                ValueMarkerStyle valueMarkerStyle = new ValueMarkerStyle("state");
                valueMarkerStyle.ValueItems.Add(item1);
                valueMarkerStyle.ValueItems.Add(item2);

                double tolerance = 100;
                ClusterMarkerStyle clusterStyle = new ClusterMarkerStyle(tolerance, 1600, 1200);
                clusterStyle.MarkerStyle = valueMarkerStyle;//instead of useing pointMarkerStyle;

                markerOverlay.ZoomLevelSet.ZoomLevel01.CustomMarkerStyle = clusterStyle;
                markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                Map1.CustomOverlays.Add(markerOverlay);