ThinkGeo.com    |     Documentation    |     Premium Support

Scale a rectangle shape

 I'm trying to center the map on a center point, set the scale of the map, then get the CurrentExtent.  Problem is the CurrentExtent = Nothing


Using Web Map Suite V6.0.0.0


Here is my code:



         Map1.ZoomTo(tempFeature.GetShape.GetCenterPoint, 3500)

         m_initialExtent = Map1.CurrentExtent


 
What do I need to do to get the Map to generate the CurrentExtent?
 
Alternately, If I can simply scale a RectangleShape, that would work as well:
 

         m_initialExtent = m_targetPropertyLayer.FeatureSource.GetBoundingBox()

         ' Scale the RectangleShape here
 
TIA,
 
Rob



Rob, 
  
 You can use ZoomToScale method of Map,  
 Map1.CurrentExtent = m_targetPropertyLayer.FeatureSource.GetBoundingBox() 
 Map1.CurrentExtent.ZoomToScale(3500) 
  
 Let me know if you have more questions. 
 Thanks, 
 James

That doesn't update the .CurrentExtent.  I need the rectangle to do a subsequent search in other shape files to determine if additional information needs to be loaded.  Essentially, I am getting a target shape (property) and then selecting a scale to load subsequent information about neighboring properties displayed on the map.



Hi Rob, 
  
 When you call Map1.ZoomTo function, this won’t works until map refresh. So you can add a client function like Map1_Click and get the Map1.CurrentExtent in this function. 
  
 Because we have “snap” in map, you can calculate the extent by following function: 
 (Note, because we cannot get ActualHeight and ActualWidth of map control before postBack if you set them as something like 100%, so you can only use it after postback also, if you set actual width or height of map, you can call it before postBack) 
  
  
  
 
 Dim dotsPerInch As Integer = 96
    Public Function GetExtentByScaleAndCenterPoint(ByVal scale As Double, ByVal centerPointShape As PointShape, ByVal screenWidth As Single, ByVal screenHeight As Single, ByVal mapUnit As GeographyUnit)

        Dim resolution As Double = scale / (GetInchesPerUnit(mapUnit) * dotsPerInch)

        Dim extentWidth As Double = resolution * screenWidth
        Dim extentHeight As Double = resolution * screenHeight

        Dim upperLeftPointShape As PointShape = New PointShape(centerPointShape.X - extentWidth / 2, centerPointShape.Y + extentHeight / 2)
        Dim lowerRightPointShape As PointShape = New PointShape(centerPointShape.X + extentWidth / 2, centerPointShape.Y - extentHeight / 2)

        Return New RectangleShape(upperLeftPointShape, lowerRightPointShape)
    End Function

    Private Function GetInchesPerUnit(ByVal mapUnit As GeographyUnit) As Double
        Dim inchesPerUnit As Double = 0
        Select Case mapUnit
            Case GeographyUnit.DecimalDegree
                inchesPerUnit = 4374754
            Case GeographyUnit.Feet
                inchesPerUnit = 12
            Case GeographyUnit.Meter
                inchesPerUnit = 39.3701
            Case GeographyUnit.Unknown
            Case Else
        End Select
        Return inchesPerUnit
    End Function

 
 
  
 Any question please let us know. 
  
 Regards, 
  
 Don