Wikipedia talk:WikiProject U.S. Roads/Lengths/Illinois

From Wikipedia, the free encyclopedia

The following program can be used to extract data from the downloadable DBF files available here: T2 GIS Data

 # extractRoads.py
 
 from __future__ import with_statement
 from struct import *
 
 import sys
 
 def main(argv):
   if len(argv) != 2:
     raise Exception, "Not enough arguments!"
   inputFilename = argv[1]
   outputFilename = ("illinois_state_highways.txt")
   with open(inputFilename, "rb") as inputFile:
     try:
       outFile = open(outputFilename, "w")  
       print "Opened %s" % inputFilename
       while inputFile.closed == False:
         myByte = inputFile.read(1)
         if '\r' in unpack('c', myByte):
           break
         else:
           pass
       line = "test"
       while len(line) > 0:
         line = inputFile.read(231)
         if len(line.strip()) > 10:
           inventory_number = line[0:19]
           beg_sta = line[18:33]
           end_sta = line[33:48]
           aadt = line[48:54]
           aadt_year = line[54:58]
           county_hwy = line[58:63]
           district = line[63]
           functional_class = line[64:66]
           hcv = line[66:71]
           hcv_year = line[71:75]
           county = line[75:78]
           lanes = line[78:80]
           marked_route_1 = line[80:84]
           marked_route_2 = line[85:89]
           marked_route_3 = line[90:94]
           marked_route_4 = line[95:99]
           municipal_volume = line[100:105]
           municipal_number = line[105:109]
           route_name = line[109:140]
           segment_length = line[140:144]
           township = line[144:146]
           municipal_name = line[146:166]
           township_name = line[166:185]
           county_name = line[185:196]
           functional_name = line[196:231]
           outFile.write("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s" % (inventory_number, beg_sta, end_sta, aadt, aadt_year, county_hwy, district, functional_class, hcv, hcv_year, county, lanes, marked_route_1, marked_route_2, marked_route_3, marked_route_4, municipal_volume, municipal_number, route_name, segment_length, township, municipal_name, township_name, county_name, functional_name) + "\n")
     finally:
       outFile.close()
   return 1
 
 if __name__ == "__main__":
   main(sys.argv)

This can be imported into a database (I used MySQL) which is defined as the following:

 CREATE TABLE `illinois_state_highways` (
 `inventory_number` varchar(32) NOT NULL,
 `beg_sta` float NOT NULL,
 `end_sta` float NOT NULL,
 `aadt` int(10) unsigned NOT NULL,
 `aadt_year` int(10) unsigned NOT NULL,
 `county_highway` varchar(16) NOT NULL,
 `district` int(1) unsigned NOT NULL,
 `functional_class` smallint(5) unsigned NOT NULL,
 `hcv` int(10) unsigned NOT NULL,
 `hcv_year` int(10) unsigned NOT NULL,
 `county` int(10) unsigned NOT NULL,
 `lanes` int(10) unsigned NOT NULL,
 `marked_route_1` varchar(8) NOT NULL,
 `marked_route_2` varchar(8) NOT NULL,
 `marked_route_3` varchar(8) NOT NULL,
 `marked_route_4` varchar(8) NOT NULL,
 `municipal_volume` int(10) unsigned NOT NULL,
 `municipal_number` int(10) unsigned NOT NULL,
 `route_name` varchar(64) NOT NULL,
 `segment_length` float NOT NULL,
 `township` varchar(10) default NULL,
 `municipal_name` varchar(64) NOT NULL,
 `township_name` varchar(64) NOT NULL,
 `county_name` varchar(64) NOT NULL,
 `functional_name` varchar(64) NOT NULL
 )

YMMV. But this is most of the hard part. —Rob (talk) 20:41, 8 November 2007 (UTC)