The ASP Emporium
Free Active Server Applications and Examples by Bill Gearhart
Online since Friday January 7, 2000

 home > code > code library > Other Procedures > NYCAddress Object

enter a phrase to search: (advanced search)


 h o m e 

 w h a t 's  n e w 

 a l l   c o d e 
  .net:
    • Fundamentals
    • C# Classes
  classic asp:
    • Code Library
    • ASP Apps
  general:
    • Tutorials
    • SQL

 d o w n l o a d s 

 u s e r   f o r u m s 

 l i n k s 

 s e a r c h 

 s u p p o r t 


NYCAddress Object   v1.0   [VBScript]

< prev proc
IIf Function
next proc >
GetFreeFile

purpose:
Find a cross street within three blocks of any avenue address in Midtown 
Manhattan. Takes input in the form of an NYC avenue address like: 660 
Lexington Avenue and returns a cross street within ~3 short blocks of the 
address like: 55th street.
syntax:
set object = new NYCAddress
example usage:
dim myAddr


'Find cross street near 660 lexington avenue


 ' call class - NYCaddress
Set myAddr = New NYCaddress

 ' set property: destination number
myAddr.AddrNumber = 660 

 ' set property: destination avenue
myAddr.AddrAvenue = "Lexington Avenue"

 ' call method
strCross = myAddr.CrossStreet

 ' destroy instance and free memory
Set myAddr = Nothing
source code:
 ' Manhattan address finder class
 ' Uses a well known algorithm to determine a cross street for an avenue
 ' address in Midtown Manhattan NYC.

Class NYCaddress
	' declare class-wide variables
	Private bSpecial,strAddrNumber,strAddrAvenue,bNeg
	
	Private Sub Class_Initialize
		' initialize variables
		bSpecial = False
		bNeg = False
		strAddrNumber = ""
		strAddrAvenue = ""
	End Sub

	Public Property LET AddrNumber(strInput)
		' get address # input from user
		strAddrNumber = strInput
	End Property

	Public Property LET AddrAvenue(strInput)
		 ' get avenue name input from user
		strAddrAvenue = strInput
	End Property	

	Public Property GET AddrNumber
		if isnumeric(strAddrNumber) = False then MakeError( _
			"Need a number for the address to continue")
		AddrNumber = strAddrNumber
	End Property

	Private Function MakeError(strErr)
		' custom errors
		err.raise 1,"Billyboy's Midtown Manhattan NYC Address Finder Class",strErr
	End Function

	Public Property GET AddrAvenue
		AddrAvenue = strAddrAvenue
	End Property

	Public Function CrossStreet
		' default method that performs the algorithm
		dim temp1,temp2,temp3
		if len(AddrNumber) > 1 then _
		temp1 = DropLastDigit(AddrNumber)
		temp1 = temp1 / 2
		temp2 = AvenueMagicNumber(AddrAvenue,temp1)
		temp3 = CalcCrossStreet(temp2,temp1)
		CrossStreet = temp3
	End Function

	Private Function DropLastDigit(strAddressNumber)
		 ' dump the right-most digit of a number
		strAddressNumber = left(strAddressNumber, _
			int(len(strAddressNumber))-int(1))
		DropLastDigit = strAddressNumber
	End Function

	Private Function FormatStreetExtension(strAddressNumber)
		' add the rd to 3 to make 3rd, th to 4 to make 4th etc...
		' and then add street so the result looks like: 23rd Street
		dim temp,temp2,temp3
		temp = right(strAddressNumber,1)
		temp3 = right(strAddressNumber,2)
		select case temp
			case 1
				temp2 = "st"
			case 2
				temp2 = "nd"
			case 3
				if temp3 = 13 then
					temp2 = "th"
				else
					temp2 = "rd"	
				end if
			case 4,5,6,7,8,9,0
				temp2 = "th"
		end select
		FormatStreetExtension = strAddressNumber & temp2 & " Street" 
	End Function

	Private Function CalcCrossStreet(strMagicNumber,strAddressNumber)
		' second half of the algorithm
		dim strStreet,strStreetAll
		if bSpecial then 
			if len(strAddressNumber) > 1 then _
			strAddressNumber = DropLastDigit(strAddressNumber)
		end if
		if bNeg then
			strStreet = strAddressNumber - strMagicNumber
		else
			strStreet = strAddressNumber + strMagicNumber
		end if
		strStreet = formatnumber(strStreet,0)
		strStreetAll = formatstreetextension(strStreet)
		CalcCrossStreet = strStreetAll
	End Function

	Private Function AvenueMagicNumber(strAvenueName,strAddressNumber)
		' obtain the constant that will help the algorithm locate
		' a nearby cross street based on the entered avenue name.
		bSpecial = False
		bNeg = False
		Select Case UCASE(strAvenueName)
			Case "AVENUE A","AVENUE B","AVENUE C","AVENUE D", _
			     "FIRST AVENUE","SECOND AVENUE"
				AvenueMagicNumber = 3
			Case "THIRD AVENUE","EIGHTH AVENUE"
				AvenueMagicNumber = 10
			Case "FOURTH AVENUE"
				AvenueMagicNumber = 8
			Case "FIFTH AVENUE"
				if strAddressNumber > 0 and strAddressNumber <= 200 then
					AvenueMagicNumber = 13
				elseif strAddressNumber > 200 and strAddressNumber <= 400 then
					AvenueMagicNumber = 16
				elseif strAddressNumber > 400 and strAddressNumber <= 600 then
					AvenueMagicNumber = 18
				elseif strAddressNumber > 600 and strAddressNumber <= 774 then
					AvenueMagicNumber = 20
				elseif strAddressNumber > 775 and strAddressNumber <= 1286 then
					AvenueMagicNumber = 18
					bNeg = True
					bSpecial = True
				end if
			Case "SIXTH AVENUE","AVENUE OF THE AMERICAS"
				AvenueMagicNumber = 12
				bNeg = True
			Case "SEVENTH AVENUE","FASHION AVENUE"
				AvenueMagicNumber = 12
			Case "NINTH AVENUE"
				AvenueMagicNumber = 13
			Case "TENTH AVENUE"
				AvenueMagicNumber = 14
			Case "AMSTERDAM AVENUE","COLUMBUS AVENUE","WEST END AVENUE"
				AvenueMagicNumber = 60
			Case "BROADWAY"
				AvenueMagicNumber = 30
				bNeg = True
			Case "LENOX AVENUE"
				AvenueMagicNumber = 110
			Case "LEXINGTON AVENUE"
				AvenueMagicNumber = 22
			Case "MADISON AVENUE"
				AvenueMagicNumber = 26
			Case "PARK AVENUE"
				AvenueMagicNumber = 35
			Case "RIVERSIDE DRIVE"
				AvenueMagicNumber = 72
				bSpecial = True
			Case "CENTRAL PARK WEST"
				AvenueMagicNumber = 60
				bSpecial = True
			Case Else
				MakeError "The avenue you have entered is outside " & _
					"the vicinity of Midtown Manhattan"
		End Select
	End Function
End Class
< prev proc
IIf Function
next proc >
GetFreeFile