ThinkGeo.com    |     Documentation    |     Premium Support

Large KML file loading issue

Hi,

I tried loading a 29 MB kml file on to the map. It does get displayed, but takes a very long time. I did not have problem with smaller kml files (around 500 kb). I use the following function to load kml files




public void LoadKMLFile(string strFilename)
        {
            try
            {
                string kmlFile = strFilename;
                KmlFeatureLayer kmlLayer = new KmlFeatureLayer(kmlFile);
                kmlLayer.FeatureSource.Projection = proj4;
                kmlLayer.StylingType = KmlStylingType.StandardStyle;
                kmlLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoPen(GeoColor.GetRandomGeoColor(200, RandomColorType.All)), new GeoSolidBrush(GeoColor.GetRandomGeoColor(200, RandomColorType.All)));
                //kmlLayer.Transparency = 100;
                kmlLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = new LineStyle(new GeoPen(GeoColor.GetRandomGeoColor(200, RandomColorType.All), 5));
                kmlLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.GetRandomGeoColor(200, RandomColorType.All)), 10);
                kmlLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
                LayerOverlay KMLOverlay = new LayerOverlay();
                if (strOverlayTimeConstant == "True")
                {
                    KMLOverlay.Layers.Add("KmlLayer" + strdateTimeNow, kmlLayer);
                    wpfMap1.Overlays.Add("KmlOverlay" + strdateTimeNow, KMLOverlay);
                    wpfMap1.Overlays[wpfMap1.Overlays.Count - 1].Name = "KmlOverlay" + strdateTimeNow;
                    wpfMap1.Overlays.MoveToTop("KmlOverlay" + strdateTimeNow);
                }
                else
                {
                    uniqueNumOverlay = uniqueNumOverlay + 1;
                    strdateTimeNow = DateTime.Now.ToString("ddMMyyyyhhmmssffff") + uniqueNumOverlay.ToString();
                    KMLOverlay.Layers.Add("KmlLayer" + strdateTimeNow, kmlLayer);
                    wpfMap1.Overlays.Add("KmlOverlay" + strdateTimeNow, KMLOverlay);
                    wpfMap1.Overlays[wpfMap1.Overlays.Count - 1].Name = "KmlOverlay" + strdateTimeNow;
                    wpfMap1.Overlays.MoveToTop("KmlOverlay" + strdateTimeNow);
                }
 
                //   wpfMap1.Refresh();
                kmlLayer.RequireIndex = false;
                //kmlLayer.Open();
 
                //if (kmlLayer.FeatureSource.GetCount() > 0)
                //{
                //    wpfMap1.CurrentExtent = kmlLayer.GetBoundingBox();
                //}
                //kmlLayer.Close();
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
 
        }



What can be done within the code to speed up the display? I suppose caching can be done, but would it be ok to cache smaller kml files too as I would be using the same function to load all kml files.



Thanks and regards,

Jacob

Hi Jacob, 
  
 What’s your meaning of cache?  
  
 One of our supporter thought that means you want to split a big KML file to smaller KML files to improve load speed, but I think you should only want to open cache on overlay for KML file. 
  
 If my thought is what you means, I think smaller KML is the same with big KML because our cache don’t related with datasource, it will save tile images. If you don’t want to cache smaller KML file, you can add a judgement before load the file, so the cache only work for big KML file. 
  
 Regards, 
  
 Don

Hi Don, 



I am not sure how caching could be done in ThinkGeo. Kindly give me more info on how to accomplish it. What would be the options available other than splitting the actual KML file? 



Thanks, 

Jacob

Hi Jacob, 
  
 Sorry I don’t have a big KML file for test, but our cache is on WPF level and you should want to open it like this: 
  
  LayerOverlay KMLOverlay = new LayerOverlay();
            KMLOverlay.TileCache = new FileBitmapTileCache(“your cache directory”, “your cache id”);
 
  
 Please let me know whether that works for you. 
  
 Regards, 
  
 Don

Hi Don, 
 I tried as you advised…but there is no difference… It takes so long and sometimes it does not show up at all. 
  
 After loading the KML file, I did a fit to layer. It started showing up after 5 minutes. Again after doing some zooming in and out, the kml does not show on the map.  I did a Fit to layer once again as I expected the tiles would have been already generated after the first fit. Even after waiting for 10 mins, the kml does not show up.  
  
 I can send you the kml file (29 mb) for you to test… how do I send it? The same file takes just a few seconds to load in ArcGIS Explorer Desktop. 
  
 Regards, 
 Jacob

Hi Jacob, 
  
 Please upload that file to our FTP, you can contact your sales for detail if you don’t have an account on it. 
  
 Regards, 
  
 Don

Hi Don,  
  
 I have uploaded the KML file… It is at clients.thinkgeo.com/fbsharing/fGuTsLpz 
  
 Thanks and regards, 
 Jacob 
  


Hi Aji,


KML is a file format used to display geographic data with
rich information, including locations, images etc. it’s the format for loading
small data, but seems like the data you provided is more than 29MB. As we know,
KML file is organized in XML format and hard to create the index for it as
there are too many other elements. If we check the KML official website from
Google at developers.google.com/kml/d...apsSupport
, we can see there is a suggested size limit for KML , seems like It’s for
displaying on Google Maps, but I guess we can take a reference:



    
        
            
            

Maximum fetched file
            size (raw KML, raw GeoRSS, or compressed KMZ)


            
            
            

3MB


            
        
        
            
            

Maximum uncompressed
            KML file size


            
            
            

10MB


            
        
        
            
            

Maximum number of
            Network Links


            
            
            

10


            
        
        
            
            

Maximum number of total
            document-wide features


            
            
            

1,000


            
        
    

 


 














Could you please do a split to the KML data?


 


Thanks,


Johnny