In FOCUS since 1986 | WebFOCUS Server 8.2.01M, thru 8.2.07 on Windows Svr 2008 R2 | ||
WebFOCUS App Studio 8.2.06 standalone on Windows 10 |
FILENAME=ZIPCODES, SUFFIX=DIREXCEL, DATASET=C:\ibi\apps\zipcodes\free-zip-code-database.xls, $ SEGMENT=ZIPCODES, SEGTYPE=S0, $ FIELDNAME=ZIPCODE, ALIAS=ZIPCode, USAGE=I8, ACTUAL=A11, MISSING=ON, $ FIELDNAME=STATE, ALIAS=State, USAGE=A2, ACTUAL=A2, MISSING=ON, $ FIELDNAME=CITY, ALIAS=City, USAGE=A37, ACTUAL=A37, MISSING=ON, $ FIELDNAME=COUNTY, ALIAS=County, USAGE=A31, ACTUAL=A31, MISSING=ON, $ FIELDNAME=LATITUDE, ALIAS=Latitude, USAGE=D8.2, ACTUAL=A64, MISSING=ON, $ FIELDNAME=LONGITUDE, ALIAS=Longitude, USAGE=D9.2, ACTUAL=A64, MISSING=ON, $
FILENAME=ZIP, SUFFIX=FOC , DATASET=zipcodes/zip.foc, $ SEGMENT=SEG01, SEGTYPE=S1, $ FIELDNAME=FOCLIST, ALIAS=E00, USAGE=I5, $ FIELDNAME=ZIPCODE, ALIAS=E01, USAGE=I8, MISSING=ON, $ FIELDNAME=STATE, ALIAS=E02, USAGE=A2, MISSING=ON, $ FIELDNAME=CITY, ALIAS=E03, USAGE=A37, MISSING=ON, $ FIELDNAME=COUNTY, ALIAS=E04, USAGE=A31, MISSING=ON, $ FIELDNAME=LATITUDE, ALIAS=E05, USAGE=D8.2, MISSING=ON, $ FIELDNAME=LONGITUDE, ALIAS=E06, USAGE=D9.2, MISSING=ON, $
-*dist.fex -DEFAULT &Pi = 3.141592 -DEFAULT &MYZIP=10001 -DEFAULT &LATITUDE=0, &LONGITUDE=0 DEFINE FUNCTION F_SINE(angle/I3) Rads/D33.12 = angle / 180 * &Pi ; F_SINE/D20.12 = Rads - ((Rads ** 3)/(1*2*3)) + ((Rads ** 5)/(1*2*3*4*5)) - ((Rads ** 7)/(1*2*3*4*5*6*7)) + ((Rads ** 9)/(1*2*3*4*5*6*7*8*9)); END -* DEFINE FUNCTION F_DIST(Lat1/D16.6, Long1/D16.6, Lat2/D16.6, Long2/D16.6) -* Earth's mean radius in km Earth_R/D8 = 6371; dLat/D20.6 = Lat2 - Lat1; dLong/D20.6 = Long2 - Long1; F_DIST/D20.4 = SQRT(dLat * dLat + dLong * dLong) * 1/(F_SINE(90 - dLat / 2)) / 360 * (2 * &Pi * Earth_R); END -RUN TABLE FILE ZIP IF ZIPCODE EQ &MYZIP PRINT LATITUDE LONGITUDE ON TABLE HOLD END -RUN -READFILE HOLD -CLOSE HOLD DEFINE FILE ZIP DIST/D7.2=F_DIST(&LATITUDE, &LONGITUDE, LATITUDE, LONGITUDE); END TABLE FILE ZIP PRINT ZIPCODE STATE CITY COUNTY LATITUDE LONGITUDE DIST WHERE DIST LE 10; END
F_DIST/D20.4 = SQRT(dLat * dLat + dLong * dLong) * 1/(F_SINE(90 - dLat / 2)) / 360 * (2 * &Pi * Earth_R);looks suspicious to me, in that the argument of SQRT() treats difference in longitude and latitude as contributing equally to the distance, which is clearly untrue except near the Equator.
-DEFAULT &Pi = 3.141592 DEFINE FUNCTION F_SIN(Degrees/D3) Rads/D6 = Degrees * &Pi / 180; F_SIN/D6 = Rads - ((Rads ** 3)/(1*2*3)) + ((Rads ** 5)/(1*2*3*4*5)) - ((Rads ** 7)/(1*2*3*4*5*6*7)) + ((Rads ** 9)/(1*2*3*4*5*6*7*8*9)); END DEFINE FUNCTION F_COS(Degrees/D3) Rads/D6 = Degrees * &Pi / 180; F_COS/D6 = 1 - ((Rads ** 2)/(1*2)) + ((Rads ** 4)/(1*2*3*4)) - ((Rads ** 6)/(1*2*3*4*5*6)) + ((Rads ** 8)/(1*2*3*4*5*6*7*8)); END DEFINE FUNCTION F_MILES(Lat1/D6, Long1/D6, Lat2/D6, Long2/D6) -* Earth's mean radius in miles Earth_R/D6 = 3963; X1/D6 = F_COS(Lat1)* F_COS(Long1); Y1/D6 = F_COS(Lat1)* F_SIN(Long1); Z1/D6 = F_SIN(Lat1); X2/D6 = F_COS(Lat2)* F_COS(Long2); Y2/D6 = F_COS(Lat2)* F_SIN(Long2); Z2/D6 = F_SIN(Lat2); F_MILES/D12.2 = SQRT( (X1-X2)**2 + (Y1-Y2)**2 + (Z1-Z2)**2 ) * Earth_R; END
quote:Originally posted by Danny-SRL:
Leo,
You can download a csv file containing zip codes lat. and long. from:
http://greatdata.com/free-zip-code-database
From then, it is Pythagoras...