ThinkGeo.com    |     Documentation    |     Premium Support

Zoom problem!

 Hi,


I've extended map component with my own class. 



Public Class ZTMap


    Inherits Map


[....]




 Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)


       If Not Me.Page.IsPostBack Then


            Me.MapBackground.BackgroundBrush = New GeoSolidBrush(GeoColor.FromArgb(255, 233, 232, 214))


            Me.MapTools.ScaleLine.Enabled = False


            Me.MapTools.KeyboardMapTool.Enabled = True


            Me.MapTools.MiniMap.MaximizeRatio = 32


            Me.MapTools.MiniMap.MinimizeRatio = 32


            Me.EditOverlay.TrackMode = TrackMode.None


            Me.MapTools.MiniMap.Enabled = False


            Me.MapUnit = GeographyUnit.Feet


            Me.MapBackground.BackgroundBrush = New GeoSolidBrush(GeoColor.GeographicColors.DeepOcean)


            Me.SetDefaultZoomLevels()


            Me.LoadDefaultLayers()


            Me.CurrentExtent = Me.StartExtent


            Me.RestrictedExtent = Me.StartExtent


        End If


[...]


End Sub


On my web page I've handled Click and TrackShapeFinished events. 



 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


        AddHandler ZTMap1.Click, AddressOf SelectFeature_Click


        AddHandler ZTMap1.TrackShapeFinished, AddressOf ZTMap1_FinishedTrackShape


end Sub


My map is build over shape files.


When my map is loaded the cursor become an hand. The map is clickable and every time the user clicks on map a postback is fired! This is the first strange behavior. I don't want a postback for every user click . I only want to handle the user click over some feature.


The second strange behavior is that when a postback is done the zoom level changes, sometimes the new level is the previous extent, sometimes the new level is the map extent.


help!


thanks


John




 


Hi Egbert,
If we attached the “Click” event to map object, the postback will happened after we click on the map, because the “Click” is a postback event instead of “Ajax” event. To handle the event over certain features, we need to use MarkerOverlay instead of LayerOverlay, and then use markerOverlay’s click event.  Can you give us more detail about it?
Sorry that we are unable to recreate the extent offset issue following your description, please check the attached sample, which display the extent below when click on the map.
Thanks,
Johnny

ZoomProblemRecreate.zip (132 KB)

<blockquote> 
 If we attached the “Click” event to map object, the postback will happened after we click on the map, because the “Click” is a postback event instead of “Ajax” event. To handle the event over certain features, we need to use MarkerOverlay instead of LayerOverlay, and then use markerOverlay’s click event.  Can you give us more detail about it? 
  </blockquote> 
 Ok.  
 Some more detail: 
 
Public Class ZTMap
    Inherits Map
[…]

    Public Overridable Sub LoadDefaultLayers()

        Me.OnDefaultLayersLoading()
        Dim lay As New LayerOverlay()

        For Each l As ZTLayer In Me.ShapeFilesLayer
            Dim f As FeatureLayer = l.GetLayer()
             lay.Layers.Add(l.Name, f)
        Next
        Me.CustomOverlays.Add(lay)
        Me.OnDefaultLayersLoaded()

    End Sub
 
 […] 
 These are the default layers based on shape files that serve as background. 
 Over these layers I’ve another layer where I want to put my “markers”. I build these markers in this way: 
  
Public Class ZTMap
    Inherits Map
[…]

Public Sub TogglePVLayer(ByVal show As Boolean)
        If Me.DynamicOverlay.Layers.Contains(“PVLAYER”) Then
            Me.DynamicOverlay.Layers.Remove(“PVLAYER”)
        End If
        If show Then
            Dim pvl As New PVLayer(Me.PVList)
            Me.DynamicOverlay.Layers.Add(“PVLAYER”, pvl)
        End If
    End Sub
[…]
end class
 
 PVLayer is a custom class where I define my styles. 
  
  
Public Class PVLayer
    Inherits InMemoryFeatureLayer
[…]
  Public Sub New(ByVal pvlist As List(Of Puntovendita))
        MyBase.New(getFeatureSourceColumns(), getFeatureList(pvlist))

        ’
        'Livello Zoom 01
        ’

        'Pallino del PV
        Dim vs As New ValueStyle()
        vs.ColumnName = “ADECOLOR”
        
        For Each Item As PuntoVendita In pvlist
            Dim pst As New PointStyle()
            Dim chtml As GeoColor = GeoColor.FromHtml(Item.Colore)
            pst = PointStyles.CreateSimpleCircleStyle(New GeoColor(180, chtml.RedComponent, chtml.GreenComponent, chtml.BlueComponent), 6)
            vs.ValueItems.Add(New ValueItem(Item.Colore, pst))
        Next

        Me.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(vs)
        Me.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level14
[…]

    End Sub
end class
 
  
 <blockquote> 
 Sorry that we are unable to recreate the extent offset issue following your description, please check the attached sample, which display the extent below when click on the map. 
 </blockquote> 
  
 I checked your example but when I click the map doesn’t change the zoom level as I’d like. 
 There is some default action on zoom level when postback is done? 
  
 Another detail: I use a Master.Page to contain my aspx page. The ScriptManager is on the Master.Page. 
 Is this a problem for the map control? 
  
  
<%@ Master Language=“VB” AutoEventWireup=“false” CodeBehind=“MSZTBase.master.vb” Inherits=“RS3MapShort.MSZTBase” %>
<%@ Register Assembly=“System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35” 
Namespace=“System.Web.UI” TagPrefix=“asp” %>
<?xml version=“1.0” encoding=“iso-8859-1” ?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN” “w3.org/TR/xhtml11/DTD/xhtml11.dtd”>
<%–<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “w3.org/TR/html4/strict.dtd”>–%>
<html xmlns=“w3.org/1999/xhtml” xml:lang=“it”>
<head runat=“server”>
 […]
</head>
<body>
    <form id=“form1” runat=“server”>
        
       <asp:ScriptManager ID=“ScriptManager1” runat=“server” ScriptMode=“Debug”>
        </asp:ScriptManager>
        […]
 
  
 Thanks 
 John 
  


 


Hi,
Thanks for the demo code, it seems like you want to add various default properties to the map objects, such as Map, InMemoryLayer etc. I think there is no problem except several items:
1.       The OnLoad of base class should be invoked, when overwrite it in ZTMap.
2.       There isn’t LoadDefaultLayers method in map control, but it seems like the “Override” code exist in the demo code “Public Overridable Sub LoadDefaultLayers()”.
3.       I’m sorry we are unable to find the Marker definition in the demo code “TogglePVLayer” method, The marker should be the Overlay instead of Layer.
Is it possible to let us know your requirement or give us a demo which runs into unexpected? And then we can provide more information.
The simple logic during a postback is just get the current zoom level from client side and then save it to session on server side for loading. There isn’t special setting. It seems that you are developing with VS2005, am I right? We also tried with it, but all works fine. Can you have a check whether there is any code about changing the zoomLevel, scale in your custom code? Or please give us a demo?
Thanks,
Johnny