ThinkGeo.com    |     Documentation    |     Premium Support

Basic ShapeFile Overlay

Hi all,


     I am trying to add a shapefile to the map( has a basemap) after a button click event. Now the map doesn't display the shapfile right away but only does after either i pan to those areas beyond the visible extent or change the zoom level.


     I am just getting started and so was wondering if anyone can provide me a sample  to look at. I did go through the Think Geo Samples but it only includes adding shapefile/s during page load.


Thanks,


Bnod



Hi Ben,


We have a property “ActiveBaseOverlay” which exactly satisfies your requirement. I add a button in our installed sample GettingStarted/DisplayASimpleMap.aspx, and hook a click event as following code; 

protected void Button1_Click(object sender, EventArgs e)
{
    WmsOverlay wms = new WmsOverlay("WMS Overlay");
    wms.Parameters.Add("layers", "Countries02");
    wms.Parameters.Add("STYLE", "SIMPLE");
    wms.ServerUris.Add(new Uri("wmssamples.thinkgeo.com/WmsServer.aspx"));
    wms.TileType = TileType.MultipleTile;
    wms.TileHeight = 256;
    wms.TileWidth = 256;

    Map1.CustomOverlays.Add(wms);

    // Set the new active base overlay here
    Map1.ActiveBaseOverlay = wms;
}


Then, the new WMS overlay is displayed as a base map. Please have a try and let me know how it works.


Thanks,

Howard



Thanks Howard.  I think I didn't phrase the question well. I apologize for that.  What I meant was that I was able to add the shapefile to the basemap but that it didn't display right away. I would have to pan to the areas beyound the visible extent or change the zoom to display it. I want the basemap that i add during the page load to remain and add the subsequent shapefile overlays over it. For test purpose, I am trying to load the shapefile to the map from the server at a button click event.


                              



Ben,


Sorry for the misunderstanding; please allow me to repeat your requirement. We have a base map from the page load method. Then we have a button to add a new shape file layer to overlap on the base map. What we need to do is to view the shape file immediately when add it onto the map. If there is no misunderstanding, you can simply implement by the following code. 

ShapeFileFeatureLayer shapeLayer = new ShapeFileFeatureLayer("[Shape file path]");
shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
shapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
Map1.StaticOverlay.Layers.Add(shapeLayer);

// set the CurrentExtent property to pan and zoom 
// the map's viewport to a specified extent
shapeLayer.Open();
Map1.CurrentExtent = shapeLayer.GetBoundingBox();
shapeLayer.Close();


Please have a try and let me know if you have more questions.


Thanks,

Howard



Thanks Howard . Works..


      Also, where do i get documentation that provides details on the API's use in different contexts. Like how do I know when i should use customOverlays or dynamicOverlays , or set the steps to setting the extents like u mentioned . 



Howard,


               One more thing, is the Map control supposed to be inside an updatePanel so that the map is refreshed  after a async postback?I currently have it that way..



Ben,


I think the best way to using our APIs in different contexts is to review our installed samples. When you find something interesting in your project, see its code behind and see how it works; then refer to the CHM documentation. If you cannot find any help through both of them, please search the keyword in our forum; I'm sure you can find many funny ideas such as RIA usage etc. If there isn’t any help for you, please feel free to ask us here.


On the other hand, we have a code community projects which updates every week. You can find many interesting usage with our map suite products at: code.thinkgeo.com/


For example: here is a related post for the StaticOverlay, DynamicOverlay and CustomOverlay, please read this post and let me know if you have any questions.

gis.thinkgeo.com/Support/Dis...fault.aspx


Our web map control supports working in UpdatePanel, also you can implement Ajax with our map control as well. Here is our latest project which implement Vehicle Tracking with server side and Ajax side. If you are interesting in this, please visit this page:

gis.thinkgeo.com/Products/Ex...fault.aspx


Thanks,

Howard

 



Howard, 

Thanks for the info. Checking out the above links and other postings in the forum, I gather that it is possible to update Markers on the map without the Map flicker. In all cases that i have seen, map is outside the UpdatePanel and the marker updates are performed from the javascript function. 



Map1.GetMapParser().sendMarkersRequest(); 



Is there similar javascript method for  overlays like ShapeFileFeatureLayer. Right now i have my Map control in the UpdatePanel and although i am able to add shapefile overlays, the UpdatePanel flickers. 



Ben,


Sorry, the entire public client API is containing in the address I posted in the last reply. SendMarkerRequest is a workaround for the customer which is not a public recently; it may break change in the further version. For the shape layer flickers; all these operations are asynchronize, so there must have a blank loading time which you said flicker effect. With UpdatePanel, I think we cannot have this issue fixed simply; but there is a workaround to refresh one Overlay directly instead of refreshing the whole map.


First of all, we raise a callback method on the client side to change one overlay on the server side. After the callback finished, the callback method automatically raises a method when it successes. In this method, please call the method “UpdateOverlay” in the following code to refresh it directly.


var olMap = null;
function OnMapCreated(map) {
    olMap = map;
}

// call this method after callback to refresh one overlay directly.
// overlayId is the Id you set for the overlay when creating the overlay object in the code behind.
function UpdateOverlay(overlayId) {
    if (olMap != null) {
        var overlay = olMap.getLayer(overlayId);
        overlay.redraw(true);
    }
}    

Hope it makes sense, please let me know if you have more questions.


Thanks,

Howard

 



Howard,


               Thanks. Unfortunately I haven't been able to implement that successfully. Could you look into my code if I am missing anything..This is concerning overlay update through callbacks...



1795-Default_aspx.txt (4.17 KB)
1796-Default_aspx_cs.txt (2.79 KB)

Ben,


I think there may a misunderstanding about the callback. What I mean is to implement ICallbackEventHandler interface which you can find more information at msdn.microsoft.com/en-us/lib...S.80).aspx. Please go through this link and see if it helps. Also here attached a sample for you. Let me know if you have more questions.


Thanks,

Howard



1798-DisplayASimpleMap.zip (2.35 KB)