The Vb.Net behind this example is as follows (sorry its large)
Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Globalization
Imports System.Xml
Imports System.Web
Imports System.Web.SessionState
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls
Imports WCPierce.Web.UI.WebControls
Partial Class _Default
Inherits System.Web.UI.Page
Public YAHOOAPI_code = "MAPRESTHOMES"
Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
Dim gSmallMapControl As New GSmallMapControl()
Dim gMapTypeControl As New GMapTypeControl()
If IsPostBack() = False Then
gMap.AddControl(gSmallMapControl)
gMap.AddControl(gMapTypeControl)
'initially centered on Atlanta
Dim gpOrigin As New GPoint(-84.0F, 34.0F)
gMap.CenterAndZoom(gpOrigin, 10)
getLocations()
End If
displayDirections()
End Sub
Private Sub LatLon_change()
Dim gpFrom As New GPoint
Dim gpTo As New GPoint
Dim gpOldFrom As New GPoint
Dim gpOldTo As New GPoint
Dim ioverlay As Integer
For ioverlay = 0 To gMap.Overlays.Count - 1
gMap.Overlays.RemoveAt(0)
Next
gpFrom = Point_plot("From Address", fromLat.Text, fromLon.Text)
gpTo = Point_plot("To Address", toLat.Text, toLon.Text)
oldFromLat.Value = fromLat.Text
oldFromLon.Value = fromLon.Text
oldToLat.Value = toLat.Text
oldToLon.Value = toLon.Text
zoomAndCenter(gpFrom, gpTo)
Dim distanceBetweenPoints As Double
distanceBetweenPoints = calcDistance(gpFrom, gpTo)
distance.Text = distanceBetweenPoints.ToString()
End Sub
Function calcDistance(ByVal pStart As GPoint, ByVal pEnd As GPoint) As
Double
Dim fRadiusOfEarth As New Double()
Dim fLonA As New Double()
Dim fLonB As New Double()
Dim fLatA As New Double()
Dim fLatB As New Double()
Dim a As New Double()
Dim c As New Double()
Dim d As New Double()
Dim fDistanceLon As New Double()
Dim fDistanceLat As New Double()
fRadiusOfEarth = 3959.871 ' radius of earth in miles
'fRadiusOfEarth = (double)6372.795477598; ' radius of earth in km
fLonA = pStart.X * Math.PI / 180
fLonB = pEnd.X * Math.PI / 180
fLatA = pStart.Y * Math.PI / 180
fLatB = pEnd.Y * Math.PI / 180
Dim dblFloat, dblFloat2 As Double
fDistanceLon = fLonB - fLonA
fDistanceLat = fLatB - fLatA
a = Math.Pow(Math.Sin(fDistanceLat / 2), 2)
dblFloat2 = Math.Pow(Math.Sin(fDistanceLon / 2), 2)
a = a + (Math.Cos(fLatA) * Math.Cos(fLatB) * dblFloat2)
dblFloat = Math.Sqrt(a)
dblFloat2 = Math.Sqrt(1 - a)
c = 2 * Math.Atan2(dblFloat, dblFloat2)
d = fRadiusOfEarth * c
calcDistance = d
End Function
Private Sub zoomAndCenter(ByVal gpFrom As GPoint, ByVal gpTo As GPoint)
Dim spanLat As Double
Dim spanLon As Double
Dim latMid As Double
Dim lonMid As Double
Dim gpMidpoint As New GPoint()
spanLat = Math.Abs(gpFrom.Y - gpTo.Y)
spanLon = Math.Abs(gpFrom.X - gpTo.X)
latMid = (gpFrom.Y + gpTo.Y) / 2
lonMid = (gpFrom.X + gpTo.X) / 2
gpMidpoint = New GPoint()
gpMidpoint.X = lonMid
gpMidpoint.Y = latMid
Dim mapWidth As Double = 250
Dim mapHeight As Double = 250
Dim zoomX As Double
zoomX = Math.Log(spanLon * 100000 * Math.Cos(latMid * Math.PI / 180)
/ mapWidth) / Math.Log(2)
Dim zoomY As Double
zoomY = Math.Log(spanLat * 100000 / mapHeight) / Math.Log(2)
Dim iZoom As Integer
iZoom = Math.Ceiling(Math.Max(zoomX, zoomY))
gMap.CenterAndZoom(gpMidpoint, iZoom + 1)
End Sub
Private Function Point_plot(ByVal strTag As String, ByVal strLat As
String, ByVal strLon As String) As GPoint
Dim gpPoint As New GPoint()
Dim fLat As New Double
Dim fLon As New Double
If strLat <> "" And strLon <> "" Then
fLat = Convert.ToDouble(strLat)
fLon = Convert.ToDouble(strLon)
gpPoint.Y = fLat
gpPoint.X = fLon
'gMap.CenterAndZoom(gpPoint, 5);
Dim gm As New GMarker(gpPoint, strTag)
gMap.Overlays.Add(gm)
End If
Point_plot = gpPoint
End Function
Private Sub Address_getLatLon()
Dim strGeneratedURL As New
String("
http://api.local.yahoo.com/MapsService/V1/geocode?")
'start address
strGeneratedURL = strGeneratedURL + "appid=" + YAHOOAPI_code
strGeneratedURL = strGeneratedURL + "&street=" + fromAddr.Text + "+"
strGeneratedURL = strGeneratedURL + "&city=" + fromCity.Text + "+"
strGeneratedURL = strGeneratedURL + "&state=" + fromState.Text + "+"
strGeneratedURL = strGeneratedURL + "&zip=" + fromZip.Text
HiddenFieldLatLonFrom.Value = strGeneratedURL
fromLat.Text = String_getFromXML(strGeneratedURL, "Latitude")
fromLon.Text = String_getFromXML(strGeneratedURL, "Longitude")
strGeneratedURL = "
http://api.local.yahoo.com/MapsService/V1/geocode?"
'destination address
strGeneratedURL = strGeneratedURL + "appid=" + YAHOOAPI_code
strGeneratedURL = strGeneratedURL + "&street=" + toAddr.Text + "+"
strGeneratedURL = strGeneratedURL + "&city=" + toCity.Text + "+"
strGeneratedURL = strGeneratedURL + "&state=" + toState.Text + "+"
strGeneratedURL = strGeneratedURL + "&zip=" + toZip.Text
HiddenFieldLatLonTo.Value = strGeneratedURL
toLat.Text = String_getFromXML(strGeneratedURL, "Latitude")
toLon.Text = String_getFromXML(strGeneratedURL, "Longitude")
End Sub
Private Function String_getFromXML(ByVal strGeneratedURL As String,
ByVal strTag As String) As String
Dim XMLDoc As New System.Xml.XmlDocument()
'XMLDoc.async = false
XMLDoc.Load(strGeneratedURL)
Dim nodeArr As XmlNodeList
nodeArr = XMLDoc.GetElementsByTagName(strTag)
String_getFromXML = nodeArr.Item(0).InnerText
End Function
Private Sub Directions_displayYahoo()
'Aiming to generate a url like the following one:
'
http://maps.yahoo.com/dd_result?new...country=us&tcsz=Marietta+GA+30067&tcountry=us
Dim strGeneratedURL As New
String("
http://maps.yahoo.com/dd_result?newaddr=")
'start address
strGeneratedURL = strGeneratedURL + fromAddr.Text + "+"
strGeneratedURL = strGeneratedURL + "&csz=" + fromCity.Text + "+"
strGeneratedURL = strGeneratedURL + fromState.Text + "+"
strGeneratedURL = strGeneratedURL + fromZip.Text
strGeneratedURL = strGeneratedURL + "&country=us"
'destination address
strGeneratedURL = strGeneratedURL + "&taddr=" + toAddr.Text + "+"
strGeneratedURL = strGeneratedURL + "&tcsz=" + toCity.Text + "+"
strGeneratedURL = strGeneratedURL + toState.Text + "+"
strGeneratedURL = strGeneratedURL + toZip.Text
strGeneratedURL = strGeneratedURL + "&tcountry=us"
HiddenField1.Value = strGeneratedURL
End Sub
Private Sub getDirections_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles getDirections.Click
displayDirections()
End Sub
Sub putLocationsInFields(ByVal dsLocations As DataSet)
Dim drStart As System.Data.DataRow
Dim drEnd As System.Data.DataRow
drStart = dsLocations.Tables.Item(0).Rows.Item(0)
fromAddr.Text = drStart.Item("Address").ToString()
fromCity.Text = drStart.Item("City").ToString()
fromState.Text = drStart.Item("State").ToString()
fromZip.Text = drStart.Item("Zip").ToString()
drEnd = dsLocations.Tables.Item(0).Rows.Item(1)
toAddr.Text = drEnd.Item("Address").ToString()
toCity.Text = drEnd.Item("City").ToString()
toState.Text = drEnd.Item("State").ToString()
toZip.Text = drEnd.Item("Zip").ToString()
End Sub
Private Sub getLocations()
Dim dsLocations As New DataSet
Dim drStart As DataRow
Dim drEnd As DataRow
dsLocations.Tables.Add("Location")
dsLocations.Tables(0).Columns.Add("Address", GetType(System.String))
dsLocations.Tables(0).Columns.Add("City", GetType(System.String))
dsLocations.Tables(0).Columns.Add("State", GetType(System.String))
dsLocations.Tables(0).Columns.Add("Zip", GetType(System.String))
dsLocations.Tables(0).Columns.Add("DistanceTo",
GetType(System.Decimal))
drStart = dsLocations.Tables(0).NewRow
drStart.Item("Address") = "1199 Main St"
drStart.Item("City") = "Atlanta"
drStart.Item("State") = "GA"
drStart.Item("Zip") = "30349"
drStart.Item("DistanceTo") = 0.0
dsLocations.Tables(0).Rows.Add(drStart)
drEnd = dsLocations.Tables(0).NewRow
drEnd.Item("Address") = "2035 Main St"
drEnd.Item("City") = "Atlanta"
drEnd.Item("State") = "GA"
drEnd.Item("Zip") = "30349"
drEnd.Item("DistanceTo") = 0.0
dsLocations.Tables(0).Rows.Add(drEnd)
putLocationsInFields(dsLocations)
End Sub
Private Sub displayDirections()
Directions_displayYahoo()
Address_getLatLon()
LatLon_change()
End Sub
End Class
Alvin Bruney - ASP.NET MVP said:
can you post the code that will not port?
--
Regards,
Alvin Bruney [MVP ASP.NET]
[Shameless Author plug]
The Microsoft Office Web Components Black Book with .NET
Now Available @
www.lulu.com/owc
Forth-coming VSTO.NET - Wrox/Wiley 2006
-------------------------------------------------------
mishj said:
I am having troubles converting vb code behind to vs2005 - I converted c#
code behind no problem at all, but I get compile errors with vb that I cant
work out what the cause is - for every one of my vb code behind files, the
same errors!!
InitializeCulture is not a member of ASP.[filename].aspx
CreateResourceBasedLiteralControl is not a member of ...
Context is not a member of [project name].[filename]
Help??!!
Fred Nelson said:
Hi Rob:
I had some problems with it also at first. Now I have converted two
major apps from VS.2003 and it seems to be fine for me.
Hang in there - it will get better!
Fred
Rob Dob wrote:
VS2005 is a PIECE of Garbage and is bug Ridden, I wonder how many others
feel the same, I am so sorry that I have moved away from VS2003,
VS2005 is unstable, and half the stuff doesn't work, Microsft has spent so
much time trying to make it simply that when you try to do something useful
with it it doesn't work...
Half the time it crashes, and menu items appear for things you cannot do.
For example, Go into component designer, or SQLDataAdapter component for
WebForms is junk, doesn't come installed, so you add it to the toolbar and
it doesn't work, it breaks webforms.
I guess this is now a good system for doing things the microsoft way, but
build anytihng decent and forget it..,
VS2005 is a WASTE of MONEY.. I advise all to NOT upgrade, grab yourself
the express additons the FREE versions, at least you won't feel so riped...
Anyway my two cents...