ThinkGeo.com    |     Documentation    |     Premium Support

What is the best way to create markers from shape file and use our own icons for markers?

 


Hi,


What is the best way to create markers from shape file and use our own icons for markers?


I've tried 2 ways: (1)FeatureSourceMarker Overlay, (2)ShapeFileFeatureLayer.


In the first way, I could use our own icons, but performance is very bad. It take about 7 sec to show all markers (~3000) on the map. Why it is so long? Does it upload the same icon for each marker and generate image on the server?


In the secon way, performance is good, but I have to use your standard shapes and didn't find way how to apply our own icons.


Below is my code:


 


 FeatureSourceMarkerOverlay producerOverlay = new FeatureSourceMarkerOverlay("ProducerMarkers");

producerOverlay.FeatureSource = new ShapeFileFeatureSource(Server.MapPath("~/App_Data/SHP/Properties/Producer.shp"));

producerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage = new WebImage("/Icons/Producer.png");

producerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.ContentHtml = "[#PropertyNa#]";

producerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.AutoSize = true;

producerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.BackgroundColor = GeoColor.StandardColors.White;

producerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.BorderColor = GeoColor.StandardColors.Black;

producerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.BorderWidth = 1;

producerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


---------------

ShapeFileFeatureLayer producerLabelLayer = new ShapeFileFeatureLayer(Server.MapPath("~/App_Data/SHP/Properties/Producer.shp"));

producerLabelLayer.Name = "ProducerLabel";

producerLabelLayer.ZoomLevelSet.ZoomLevel06.DefaultTextStyle = TextStyles.CreateSimpleTextStyle("PropertyNa", "Arial", 8, DrawingFontStyles.Italic, GeoColor.StandardColors.Brown, 3, 3);

producerLabelLayer.ZoomLevelSet.ZoomLevel06.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

producerLabelLayer.DrawingMarginPercentage = 50;



Hello Igor, 
  
 Thanks for your post,  for your situation, I believe you can set the MarkerStyle = new ClusterMarkerStyle() to improve the performance.  
  
 For this style, there are two effects,  
  
 1. It will hidden the unnecessary marker in an area that will make the map looks much better, for example, in the map you have 1000 thousand marker, it’s hard to see each one clearyly, then you use this style and set the distance property to a value, so in that value, it will only show one marker. of course if you always want to show every marker, set the distance to 0.  
  
 2. It will simplify the html request, with out this style, it will transfer to client side with html including popup, information etc, a big size of data for each marker, but after use this style, it only transfer a location with image information, only when you click or hover the marker, it will request more information. That will greatly increase the performance.  
  
 I hope this can help.  
  
 Regards,  
  
 Gary

Thank you, Gary! it helps a lot!  
  
 Is it possible in this case to display different icons (big, medium, small) depend on hidden marker numbers? I mean, if there are a lot of markers in this area, I prefer to show a big icon, etc  
  


Hello Igor, 



It only support you to show a different icon between clustered and before, you can't change different style depends on how many markers have been clustered. 



But I think this is a very good thoughts, You can vote this enhancement to helpdesk.thinkgeo.com/EnhancementTracker. This captures the enhancement request and provides visibility to the customer letting them know that the enhancement is on a list somewhere and that popularity of the enhancement helps set the priority of when the enhancement would be added to the product. This option doesn't carry any cost for you. 



Or if you need this function immediately, your account rep can contact you for a professional services. 



Sorry for the inconvenience. 



Regards, 



Gary