ThinkGeo.com    |     Documentation    |     Premium Support

Stretching map control not working

Hi Team,


We are working with Nathan Falk at Honeywell and using the mapsuite silverlight edition.


When using the map control, we want it to take the available space(for which i set the width and height property as stretch). But this creates 'object reference not set to an instance' error. If i provide specific height and width then things work fine.

Can you please tell me what should be done to resolve this problem?

Please let me know asap.


Thanks,

Krithika



Krithika, 
  
 To make sure I give you the right answer, I have one item to confirm with you. Do you means that the Overlays of the map don’t fill the full view of the map? Just from your description, maybe ScaleTransform is right for you. I think you can set ScaleTransform to the UIElement of the specified Overlay. The code is like below, please have a try. 
  
  
             LayerOverlay overlay = new LayerOverlay(); 
             overlay.OverlayElement.RenderTransform = new ScaleTransform(); 
  
 thanks, 
 Johnny 


Hi Johnny,


Thanks for your reply.


I tried the same but things didnt work.


I am getting the following error while refreshing the map after adding the server overlays to it.


Object reference not set to an instance of the object


   at ThinkGeo.MapSuite.SilverlightEdition.Map.x01f2d1b4cdb25b49(RectangleShape xcb80b963102e80ec, OverlayDrawType xae1a5db01e9ce207)

   at ThinkGeo.MapSuite.SilverlightEdition.Map.Refresh()

   at RVSConfigurationModule.ConfigurationViewModel.UpdateMapOverlays(ObservableCollection`1 Layers)


In my application i have a docking window. So on one side there is a properties pane and on the other side there is this map pane.


Please let me know what needs to be done to resolve this.


Code attached here:



_Ctrl.Map1.Overlays.Clear();


 


{


 


_Ctrl.Map1.Overlays.Add(_layer.LayerName, overlay);


 


{


overlay.Visibility =


}


 


foreach (Honeywell.RVS.Types.Layer _layer in Layers)ServerLayerOverlay overlay = new ServerLayerOverlay(_layer.LayerName, "SilverlightMapConnector1");if (_layer.IsActive)Visibility.Visible;else

{


overlay.Visibility =


}


overlay.OverlayElement.RenderTransform =


}


 


Visibility.Collapsed;new ScaleTransform(); _Ctrl.Map1.Refresh();


Thanks,


Krithika



Johnny,


We are using Mapsuite silverlight edition 3.0


I tried a simple application with only the map control with stretch property and adding map to it. I faced the same problem.


When i do Map.Referesh() i am getting the same error as the one mentioned in the previous post.


The XAML code and code behind of the application is attached here. Pls have a look and let me know the problem.


Thanks,


Krithika




 



<Grid x:Name="LayoutRoot" Background="White">

 


    <Grid Margin="272,0,0,0">

 


       <ScrollViewer VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Stretch" Margin="-272,0,0,0">

 


            <cc1:Map x:Name="Map1" Width="Auto" Height="Auto" Background="#e5e3df">

 


            </cc1:Map>

 


       </ScrollViewer>

 


    </Grid>

 


</Grid>

Map1.MapTools.MouseCoordinate.MouseCoordinateType =


Map1.MapTools.PanZoomBar.IsEnabled =


Map1.MapUnit =


Map1.MapTools.MouseCoordinate.IsEnabled =


Map1.Background =


 


 


Map1.Overlays.Add(


overlay.OverlayElement.RenderTransform =


 


Map1.Overlays.Add(


overlay1.OverlayElement.RenderTransform =


 


Map1.Overlays.Add(


overlay2.OverlayElement.RenderTransform =


 


Map1.Refresh();


MouseCoordinateType.LatitudeLongitude;true;GeographyUnit.Meter;true;new SolidColorBrush(Color.FromArgb(255, 255, 255, 255));ServerLayerOverlay overlay = new ServerLayerOverlay("CanaveralMap1Server", "SilverlightMapConnector1");"CanaveralMap1Server", overlay);new ScaleTransform(); ServerLayerOverlay overlay1 = new ServerLayerOverlay("CanaveralMap2Server", "SilverlightMapConnector1");"CanaveralMap2Server", overlay1);new ScaleTransform(); ServerLayerOverlay overlay2 = new ServerLayerOverlay("CanaveralMap3Server", "SilverlightMapConnector1");"CanaveralMap3Server", overlay2);new ScaleTransform(); Map1.CurrentExtent = new RectangleShape(533181.490451491, 3144268.68096696, 544626.363014241, 3138546.24468558);


 


 


 




It might be a bug on our side but to verify this, we would need a sample app from you. We were not able to recreate the problem just based on the your code. You can attach your sample app or you can contact support at support@thinkgeo.com to sent it to an FTP account, if you feel more confortable with that. Thank you.

Hi Team, 
  
 Thanks a lot for supporting us very well without which we would not be able to meet our project deadlines and needs. 
  
 I have contacted the support@thinkgeo.com and sent them the sample application to be uploaded to ftp. 
 This application has just a map control in it, for which stretch property is set. Because of this, while you run this application you’ll get an error. Try setting the map control’s width and height statically then things would work fine. 
 The main problem we are facing because of this map control is the off centre zoom behavior. As the map control’s size doesnt adjust automatically based on the available space, we get this problem as some part of the map which is actually present in the map control goes out of view. 
  
 Can we have a quick call to discuss this issue as it is taking a lot of mail chains and we have some tough project deadlines. 
  
 Thanks 
 Krithika

Hi Krithika,



I'm not quite sure what you mean by the stretch. Do you want to auto resize the map with it's parent? If it's true, it's a known issue in current Silverlight Edition; but I have a workaround for you that to use SizeChanged event and set map's width and height dynamically. Please see my attached file in another post at:



gis.thinkgeo.com/Support/Dis...aspx#17654



If there is any misunderstanding, please let me know.



Thanks,

Howard



Hi,


 


Thanks for your reply.


You are right. I want to resize the map control based on the available space. The reason i want to do this is, if i set the height and width of the map control i am facing the off centre zoom problem as some part of the map is not visible to the user as the control didnt't resize.


If this is a known issue then please let us know what can be done to fix this problem?


If needed we can have a call and discuss.


Thanks,


Krithika



Hi Krithika,



I have attached a demo for in your another post at:

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



Please download it and try how it works,



Thanks,

Howard



Hi Howar,


Yes i am expecting the auto-size of the map as otherwise i am facing the off-centre zoom problem while using the map zoom control to zoom.


Can you add the workaround to the sample application i had sent to you and give it to me.


I saw in the csharp samples at thinkgeo site how they are using the size changed event. But didnt understand few things in that.


1. On which control are they triggering the size changed event? For me on resize of the usercontrol the event is not being fired.


2. While handling the ElementResize you are getting the htmlpage scrollwidth and scrollheight. But why are you subtracting some specific number from it? I assume that it is for the side and top panes. But for me these are not static panes. Their size can be changed by the user.


It would be great if you could give me a sample application with these questions addressed.


Thanks,


Krithika


 



Krithika,



I see, but I'm not sure which sample subtracts some specific number; I recommend to set the SizeChanged event to its parent node which can auto re-sizes. I have added the logic to your code and for reducing the size of the attached file, I removed the data and cache files. Please re-add them to the project and try again.



In your application, I don't know why you set a special margin to the grid, but the map works fine as I tested. Let me know if you have more questions. If the code is private, please let me know and I'll remove it immediately.



Thanks,

Howard



RVSWebClient.zip (76.3 KB)

Hi guys, 
 Just wondering if anything has changed with the auto-sizing of the maps? I can’t seem to get it to work, but I wasn’t sure if it got stuck in a daily-build somewhere along the way. 
 Thanks very much! 
 -Dustin

Dustin,  
  
 With the 4.5 samples currently displayed in the Online Demos section I am able to change the size of the windows and the map size changes as well. Is this want you are looking for?

 


Hi Dustin,
Sorry for the delayed response.
I hate to bother you but it’s very hard for me to figure out what exactly the issue you’ve encountered in your case.
Could you please provide further information about your problem, like the version of the assembly you’re using, a code sample if possible?
Thanks.
James

Hi James,


I'm essentially trying to have the map fill its surrounding container, but leaving the heigh/width of the map unset, or setting them to 'Auto' results in the map not being rendered.  It works fine if there is no surrounding container, though.  Maybe I'm just not doing it correctly, but I would love a tip if you could give me one.  All I'm looking at is something like this:


 



    <Grid x:Name="LayoutRoot" Background="Blue">
        <Canvas Width="Auto" Height="auto" Background="Red">
            <my:Map Name="Map1" Background="Green" Height="Auto" Width="Auto"/>
        </Canvas>
    </Grid>


Thanks a lot!
-Dustin

Dustin,


 


You are doing right. Just remove the canvas from your xaml and your requirement will be implemented.


 



    <Grid x:Name="LayoutRoot" Background="Blue">
            <my:Map Name="Map1" Background="Green" Height="Auto" Width="Auto"/>
    </Grid>

 


Thanks,


 


James