#!/usr/bin/python # Tiger road data to OSM conversion script # Creates Karlsruhe-style address ways beside the main way # based on the Massachusetts GIS script by christopher schmidt #BUGS: # On very tight curves, a loop may be generated in the address way. # It would be nice if the ends of the address ways were not pulled back from dead ends VERSION="0.3" # Version 0.3 is optimized for the tiger road conversion # Tag Source = iSource + _import_v + version + _ + date and time iSource="tiger" # Tag Attribution = iAttrib iAttrib="tiger" # Ways that include these mtfccs should not be uploaded # H1100 Connector # H3010 Stream/River # H3013 Braided Stream # H3020 Canal, Ditch or Aqueduct # L4130 Point-to-Point Line # L4140 Property/Parcel Line (Including PLSS) # P0001 Nonvisible Linear Legal/Statistical Boundary # P0002 Perennial Shoreline # P0003 Intermittent Shoreline # P0004 Other non-visible bounding Edge (e.g., Census water boundary, boundary of an areal feature) ignoremtfcc = [ "H1100", "H3010", "H3013", "H3020", "L4130", "L4140", "P0001", "P0002", "P0003", "P0004" ] #Files will be split when longer than this number of nodes maxNodes = 300000 # Set the maximum length of a way (in nodes) before it is split into # shorter ways Max_Waylength = 500 # Sets the distance that the address ways should be from the main way, in feet. address_distance = 30 # Sets the distance that the ends of the address ways should be pulled back from the ends of the main way, in feet address_pullback = 45 try: from osgeo import ogr from osgeo import osr except: import ogr import osr # ==================================== # Edit parse_shp_for_osm section to fit your data! # change poFeature.GetField(" ") to contain only the shape column names for the data you want # and tags[" "] to match the osm tag names you wish to use for that data. # some tags will require changing a number to a meaningful value like the Highway tag. See the metadata for the meaning of these tags. # For any measurements be sure to check the unit value of the original data, and convert if needed to the expected unit for osm. # ==================================== # Long name, short name, ISO-3166-1 alpha-2 # from http://www.census.gov/geo/www/ansi/statetables.html fipscodes = { '01' : ('Alabama', 'AL', 'US'), '02' : ('Alaska', 'AK', 'US'), '04' : ('Arizona', 'AZ', 'US'), '05' : ('Arkansas', 'AR', 'US'), '06' : ('California', 'CA', 'US'), '08' : ('Colorado', 'CO', 'US'), '09' : ('Connecticut', 'CT', 'US'), '10' : ('Delaware', 'DE', 'US'), '11' : ('District of Columbia', 'DC', 'US'), '12' : ('Florida', 'FL', 'US'), '13' : ('Georgia', 'GA', 'US'), '15' : ('Hawaii', 'HI', 'US'), '16' : ('Idaho', 'ID', 'US'), '17' : ('Illinois', 'IL', 'US'), '18' : ('Indiana', 'IN', 'US'), '19' : ('Iowa', 'IA', 'US'), '20' : ('Kansas', 'KS', 'US'), '21' : ('Kentucky', 'KY', 'US'), '22' : ('Louisiana', 'LA', 'US'), '23' : ('Maine', 'ME', 'US'), '24' : ('Maryland', 'MD', 'US'), '25' : ('Massachusetts', 'MA', 'US'), '26' : ('Michigan', 'MI', 'US'), '27' : ('Minnesota', 'MN', 'US'), '28' : ('Mississippi', 'MS', 'US'), '29' : ('Missouri', 'MO', 'US'), '30' : ('Montana', 'MT', 'US'), '31' : ('Nebraska', 'NE', 'US'), '32' : ('Nevada', 'NV', 'US'), '33' : ('New Hampshire', 'NH', 'US'), '34' : ('New Jersey', 'NJ', 'US'), '35' : ('New Mexico', 'NM', 'US'), '36' : ('New York', 'NY', 'US'), '37' : ('North Carolina', 'NC', 'US'), '38' : ('North Dakota', 'ND', 'US'), '39' : ('Ohio', 'OH', 'US'), '40' : ('Oklahoma', 'OK', 'US'), '41' : ('Oregon', 'OR', 'US'), '42' : ('Pennsylvania', 'PA', 'US'), '44' : ('Rhode Island', 'RI', 'US'), '45' : ('South Carolina', 'SC', 'US'), '46' : ('South Dakota', 'SD', 'US'), '47' : ('Tennessee', 'TN', 'US'), '48' : ('Texas', 'TX', 'US'), '49' : ('Utah', 'UT', 'US'), '50' : ('Vermont', 'VT', 'US'), '51' : ('Virginia', 'VA', 'US'), '53' : ('Washington', 'WA', 'US'), '54' : ('West Virginia', 'WV', 'US'), '55' : ('Wisconsin', 'WI', 'US'), '56' : ('Wyoming', 'WY', 'US'), # Outlying areas w/census data '60' : ('American Samoa', 'AS', 'AS'), '66' : ('Guam', 'GU', 'GU'), '69' : ('Commonwealth of the Northern Mariana Islands', 'MP', 'MP'), '72' : ('Puerto Rico', 'PR', 'PR'), '78' : ('U.S. Virgin Islands', 'VI', 'VI'), } # This was generated with the following: # wget http://www.census.gov/datamap/fipslist/AllSt.txt # cat AllSt.txt | grep '^ [0-9]' | awk "{printf \"'%s' : '%s' ,\\n\", \$1, substr(\$0, 31)}" | > countyfips.py county_fips = { '01000' : 'ALABAMA' , '01001' : 'Autauga, AL' , '01003' : 'Baldwin, AL' , '01005' : 'Barbour, AL' , '01007' : 'Bibb, AL' , '01009' : 'Blount, AL' , '01011' : 'Bullock, AL' , '01013' : 'Butler, AL' , '01015' : 'Calhoun, AL' , '01017' : 'Chambers, AL' , '01019' : 'Cherokee, AL' , '01021' : 'Chilton, AL' , '01023' : 'Choctaw, AL' , '01025' : 'Clarke, AL' , '01027' : 'Clay, AL' , '01029' : 'Cleburne, AL' , '01031' : 'Coffee, AL' , '01033' : 'Colbert, AL' , '01035' : 'Conecuh, AL' , '01037' : 'Coosa, AL' , '01039' : 'Covington, AL' , '01041' : 'Crenshaw, AL' , '01043' : 'Cullman, AL' , '01045' : 'Dale, AL' , '01047' : 'Dallas, AL' , '01049' : 'De Kalb, AL' , '01051' : 'Elmore, AL' , '01053' : 'Escambia, AL' , '01055' : 'Etowah, AL' , '01057' : 'Fayette, AL' , '01059' : 'Franklin, AL' , '01061' : 'Geneva, AL' , '01063' : 'Greene, AL' , '01065' : 'Hale, AL' , '01067' : 'Henry, AL' , '01069' : 'Houston, AL' , '01071' : 'Jackson, AL' , '01073' : 'Jefferson, AL' , '01075' : 'Lamar, AL' , '01077' : 'Lauderdale, AL' , '01079' : 'Lawrence, AL' , '01081' : 'Lee, AL' , '01083' : 'Limestone, AL' , '01085' : 'Lowndes, AL' , '01087' : 'Macon, AL' , '01089' : 'Madison, AL' , '01091' : 'Marengo, AL' , '01093' : 'Marion, AL' , '01095' : 'Marshall, AL' , '01097' : 'Mobile, AL' , '01099' : 'Monroe, AL' , '01101' : 'Montgomery, AL' , '01103' : 'Morgan, AL' , '01105' : 'Perry, AL' , '01107' : 'Pickens, AL' , '01109' : 'Pike, AL' , '01111' : 'Randolph, AL' , '01113' : 'Russell, AL' , '01115' : 'St. Clair, AL' , '01117' : 'Shelby, AL' , '01119' : 'Sumter, AL' , '01121' : 'Talladega, AL' , '01123' : 'Tallapoosa, AL' , '01125' : 'Tuscaloosa, AL' , '01127' : 'Walker, AL' , '01129' : 'Washington, AL' , '01131' : 'Wilcox, AL' , '01133' : 'Winston, AL' , '02000' : 'ALASKA' , '02013' : 'Aleutians East, AK' , '02016' : 'Aleutians West, AK' , '02020' : 'Anchorage, AK' , '02050' : 'Bethel, AK' , '02060' : 'Bristol Bay, AK' , '02068' : 'Denali, AK' , '02070' : 'Dillingham, AK' , '02090' : 'Fairbanks North Star, AK' , '02100' : 'Haines, AK' , '02105' : 'Hoonah-Angoon Census Area, AK' , '02110' : 'Juneau, AK' , '02122' : 'Kenai Peninsula, AK' , '02130' : 'Ketchikan Gateway, AK' , '02150' : 'Kodiak Island, AK' , '02158' : 'Kusilvak Census Area, AK' , '02164' : 'Lake and Peninsula, AK' , '02170' : 'Matanuska-Susitna, AK' , '02180' : 'Nome, AK' , '02185' : 'North Slope, AK' , '02188' : 'Northwest Arctic, AK' , '02195' : 'Petersburg, AK' , '02198' : 'Prince of Wales-Hyder Census Area, AK' , '02201' : 'Prince of Wales-Outer Ketchikan, AK' , '02220' : 'Sitka, AK' , '02230' : 'Skagway, AK' , '02232' : 'Skagway-Hoonah-Angoon, AK' , '02240' : 'Southeast Fairbanks, AK' , '02261' : 'Valdez-Cordova, AK' , '02270' : 'Wade Hampton, AK' , '02275' : 'Wrangell City and Borough, AK' , '02280' : 'Wrangell-Petersburg, AK' , '02282' : 'Yakutat, AK' , '02290' : 'Yukon-Koyukuk, AK' , '04001' : 'Apache, AZ' , '04003' : 'Cochise, AZ' , '04005' : 'Coconino, AZ' , '04007' : 'Gila, AZ' , '04009' : 'Graham, AZ' , '04011' : 'Greenlee, AZ' , '04012' : 'La Paz, AZ' , '04013' : 'Maricopa, AZ' , '04015' : 'Mohave, AZ' , '04017' : 'Navajo, AZ' , '04019' : 'Pima, AZ' , '04021' : 'Pinal, AZ' , '04023' : 'Santa Cruz, AZ' , '04025' : 'Yavapai, AZ' , '04027' : 'Yuma, AZ' , '05000' : 'ARKANSAS' , '05001' : 'Arkansas, AR' , '05003' : 'Ashley, AR' , '05005' : 'Baxter, AR' , '05007' : 'Benton, AR' , '05009' : 'Boone, AR' , '05011' : 'Bradley, AR' , '05013' : 'Calhoun, AR' , '05015' : 'Carroll, AR' , '05017' : 'Chicot, AR' , '05019' : 'Clark, AR' , '05021' : 'Clay, AR' , '05023' : 'Cleburne, AR' , '05025' : 'Cleveland, AR' , '05027' : 'Columbia, AR' , '05029' : 'Conway, AR' , '05031' : 'Craighead, AR' , '05033' : 'Crawford, AR' , '05035' : 'Crittenden, AR' , '05037' : 'Cross, AR' , '05039' : 'Dallas, AR' , '05041' : 'Desha, AR' , '05043' : 'Drew, AR' , '05045' : 'Faulkner, AR' , '05047' : 'Franklin, AR' , '05049' : 'Fulton, AR' , '05051' : 'Garland, AR' , '05053' : 'Grant, AR' , '05055' : 'Greene, AR' , '05057' : 'Hempstead, AR' , '05059' : 'Hot Spring, AR' , '05061' : 'Howard, AR' , '05063' : 'Independence, AR' , '05065' : 'Izard, AR' , '05067' : 'Jackson, AR' , '05069' : 'Jefferson, AR' , '05071' : 'Johnson, AR' , '05073' : 'Lafayette, AR' , '05075' : 'Lawrence, AR' , '05077' : 'Lee, AR' , '05079' : 'Lincoln, AR' , '05081' : 'Little River, AR' , '05083' : 'Logan, AR' , '05085' : 'Lonoke, AR' , '05087' : 'Madison, AR' , '05089' : 'Marion, AR' , '05091' : 'Miller, AR' , '05093' : 'Mississippi, AR' , '05095' : 'Monroe, AR' , '05097' : 'Montgomery, AR' , '05099' : 'Nevada, AR' , '05101' : 'Newton, AR' , '05103' : 'Ouachita, AR' , '05105' : 'Perry, AR' , '05107' : 'Phillips, AR' , '05109' : 'Pike, AR' , '05111' : 'Poinsett, AR' , '05113' : 'Polk, AR' , '05115' : 'Pope, AR' , '05117' : 'Prairie, AR' , '05119' : 'Pulaski, AR' , '05121' : 'Randolph, AR' , '05123' : 'St. Francis, AR' , '05125' : 'Saline, AR' , '05127' : 'Scott, AR' , '05129' : 'Searcy, AR' , '05131' : 'Sebastian, AR' , '05133' : 'Sevier, AR' , '05135' : 'Sharp, AR' , '05137' : 'Stone, AR' , '05139' : 'Union, AR' , '05141' : 'Van Buren, AR' , '05143' : 'Washington, AR' , '05145' : 'White, AR' , '05147' : 'Woodruff, AR' , '05149' : 'Yell, AR' , '06000' : 'CALIFORNIA' , '06001' : 'Alameda, CA' , '06003' : 'Alpine, CA' , '06005' : 'Amador, CA' , '06007' : 'Butte, CA' , '06009' : 'Calaveras, CA' , '06011' : 'Colusa, CA' , '06013' : 'Contra Costa, CA' , '06015' : 'Del Norte, CA' , '06017' : 'El Dorado, CA' , '06019' : 'Fresno, CA' , '06021' : 'Glenn, CA' , '06023' : 'Humboldt, CA' , '06025' : 'Imperial, CA' , '06027' : 'Inyo, CA' , '06029' : 'Kern, CA' , '06031' : 'Kings, CA' , '06033' : 'Lake, CA' , '06035' : 'Lassen, CA' , '06037' : 'Los Angeles, CA' , '06039' : 'Madera, CA' , '06041' : 'Marin, CA' , '06043' : 'Mariposa, CA' , '06045' : 'Mendocino, CA' , '06047' : 'Merced, CA' , '06049' : 'Modoc, CA' , '06051' : 'Mono, CA' , '06053' : 'Monterey, CA' , '06055' : 'Napa, CA' , '06057' : 'Nevada, CA' , '06059' : 'Orange, CA' , '06061' : 'Placer, CA' , '06063' : 'Plumas, CA' , '06065' : 'Riverside, CA' , '06067' : 'Sacramento, CA' , '06069' : 'San Benito, CA' , '06071' : 'San Bernardino, CA' , '06073' : 'San Diego, CA' , '06075' : 'San Francisco, CA' , '06077' : 'San Joaquin, CA' , '06079' : 'San Luis Obispo, CA' , '06081' : 'San Mateo, CA' , '06083' : 'Santa Barbara, CA' , '06085' : 'Santa Clara, CA' , '06087' : 'Santa Cruz, CA' , '06089' : 'Shasta, CA' , '06091' : 'Sierra, CA' , '06093' : 'Siskiyou, CA' , '06095' : 'Solano, CA' , '06097' : 'Sonoma, CA' , '06099' : 'Stanislaus, CA' , '06101' : 'Sutter, CA' , '06103' : 'Tehama, CA' , '06105' : 'Trinity, CA' , '06107' : 'Tulare, CA' , '06109' : 'Tuolumne, CA' , '06111' : 'Ventura, CA' , '06113' : 'Yolo, CA' , '06115' : 'Yuba, CA' , '08000' : 'COLORADO' , '08001' : 'Adams, CO' , '08003' : 'Alamosa, CO' , '08005' : 'Arapahoe, CO' , '08007' : 'Archuleta, CO' , '08009' : 'Baca, CO' , '08011' : 'Bent, CO' , '08013' : 'Boulder, CO' , '08015' : 'Chaffee, CO' , '08014' : 'Broomfield, CO', '08017' : 'Cheyenne, CO' , '08019' : 'Clear Creek, CO' , '08021' : 'Conejos, CO' , '08023' : 'Costilla, CO' , '08025' : 'Crowley, CO' , '08027' : 'Custer, CO' , '08029' : 'Delta, CO' , '08031' : 'Denver, CO' , '08033' : 'Dolores, CO' , '08035' : 'Douglas, CO' , '08037' : 'Eagle, CO' , '08039' : 'Elbert, CO' , '08041' : 'El Paso, CO' , '08043' : 'Fremont, CO' , '08045' : 'Garfield, CO' , '08047' : 'Gilpin, CO' , '08049' : 'Grand, CO' , '08051' : 'Gunnison, CO' , '08053' : 'Hinsdale, CO' , '08055' : 'Huerfano, CO' , '08057' : 'Jackson, CO' , '08059' : 'Jefferson, CO' , '08061' : 'Kiowa, CO' , '08063' : 'Kit Carson, CO' , '08065' : 'Lake, CO' , '08067' : 'La Plata, CO' , '08069' : 'Larimer, CO' , '08071' : 'Las Animas, CO' , '08073' : 'Lincoln, CO' , '08075' : 'Logan, CO' , '08077' : 'Mesa, CO' , '08079' : 'Mineral, CO' , '08081' : 'Moffat, CO' , '08083' : 'Montezuma, CO' , '08085' : 'Montrose, CO' , '08087' : 'Morgan, CO' , '08089' : 'Otero, CO' , '08091' : 'Ouray, CO' , '08093' : 'Park, CO' , '08095' : 'Phillips, CO' , '08097' : 'Pitkin, CO' , '08099' : 'Prowers, CO' , '08101' : 'Pueblo, CO' , '08103' : 'Rio Blanco, CO' , '08105' : 'Rio Grande, CO' , '08107' : 'Routt, CO' , '08109' : 'Saguache, CO' , '08111' : 'San Juan, CO' , '08113' : 'San Miguel, CO' , '08115' : 'Sedgwick, CO' , '08117' : 'Summit, CO' , '08119' : 'Teller, CO' , '08121' : 'Washington, CO' , '08123' : 'Weld, CO' , '08125' : 'Yuma, CO' , '09000' : 'CONNECTICUT' , '09001' : 'Fairfield, CT' , '09003' : 'Hartford, CT' , '09005' : 'Litchfield, CT' , '09007' : 'Middlesex, CT' , '09009' : 'New Haven, CT' , '09011' : 'New London, CT' , '09013' : 'Tolland, CT' , '09015' : 'Windham, CT' , '10000' : 'DELAWARE' , '10001' : 'Kent, DE' , '10003' : 'New Castle, DE' , '10005' : 'Sussex, DE' , '11000' : 'DISTRICT OF COLUMBIA' , '11001' : 'District of Columbia' , '12000' : 'FLORIDA' , '12001' : 'Alachua, FL' , '12003' : 'Baker, FL' , '12005' : 'Bay, FL' , '12007' : 'Bradford, FL' , '12009' : 'Brevard, FL' , '12011' : 'Broward, FL' , '12013' : 'Calhoun, FL' , '12015' : 'Charlotte, FL' , '12017' : 'Citrus, FL' , '12019' : 'Clay, FL' , '12021' : 'Collier, FL' , '12023' : 'Columbia, FL' , '12025' : 'Dade, FL' , '12027' : 'De Soto, FL' , '12029' : 'Dixie, FL' , '12031' : 'Duval, FL' , '12033' : 'Escambia, FL' , '12035' : 'Flagler, FL' , '12037' : 'Franklin, FL' , '12039' : 'Gadsden, FL' , '12041' : 'Gilchrist, FL' , '12043' : 'Glades, FL' , '12045' : 'Gulf, FL' , '12047' : 'Hamilton, FL' , '12049' : 'Hardee, FL' , '12051' : 'Hendry, FL' , '12053' : 'Hernando, FL' , '12055' : 'Highlands, FL' , '12057' : 'Hillsborough, FL' , '12059' : 'Holmes, FL' , '12061' : 'Indian River, FL' , '12063' : 'Jackson, FL' , '12065' : 'Jefferson, FL' , '12067' : 'Lafayette, FL' , '12069' : 'Lake, FL' , '12071' : 'Lee, FL' , '12073' : 'Leon, FL' , '12075' : 'Levy, FL' , '12077' : 'Liberty, FL' , '12079' : 'Madison, FL' , '12081' : 'Manatee, FL' , '12083' : 'Marion, FL' , '12085' : 'Martin, FL' , '12086' : 'Miami-Dade, FL' , '12087' : 'Monroe, FL' , '12089' : 'Nassau, FL' , '12091' : 'Okaloosa, FL' , '12093' : 'Okeechobee, FL' , '12095' : 'Orange, FL' , '12097' : 'Osceola, FL' , '12099' : 'Palm Beach, FL' , '12101' : 'Pasco, FL' , '12103' : 'Pinellas, FL' , '12105' : 'Polk, FL' , '12107' : 'Putnam, FL' , '12109' : 'St. Johns, FL' , '12111' : 'St. Lucie, FL' , '12113' : 'Santa Rosa, FL' , '12115' : 'Sarasota, FL' , '12117' : 'Seminole, FL' , '12119' : 'Sumter, FL' , '12121' : 'Suwannee, FL' , '12123' : 'Taylor, FL' , '12125' : 'Union, FL' , '12127' : 'Volusia, FL' , '12129' : 'Wakulla, FL' , '12131' : 'Walton, FL' , '12133' : 'Washington, FL' , '13000' : 'GEORGIA' , '13001' : 'Appling, GA' , '13003' : 'Atkinson, GA' , '13005' : 'Bacon, GA' , '13007' : 'Baker, GA' , '13009' : 'Baldwin, GA' , '13011' : 'Banks, GA' , '13013' : 'Barrow, GA' , '13015' : 'Bartow, GA' , '13017' : 'Ben Hill, GA' , '13019' : 'Berrien, GA' , '13021' : 'Bibb, GA' , '13023' : 'Bleckley, GA' , '13025' : 'Brantley, GA' , '13027' : 'Brooks, GA' , '13029' : 'Bryan, GA' , '13031' : 'Bulloch, GA' , '13033' : 'Burke, GA' , '13035' : 'Butts, GA' , '13037' : 'Calhoun, GA' , '13039' : 'Camden, GA' , '13043' : 'Candler, GA' , '13045' : 'Carroll, GA' , '13047' : 'Catoosa, GA' , '13049' : 'Charlton, GA' , '13051' : 'Chatham, GA' , '13053' : 'Chattahoochee, GA' , '13055' : 'Chattooga, GA' , '13057' : 'Cherokee, GA' , '13059' : 'Clarke, GA' , '13061' : 'Clay, GA' , '13063' : 'Clayton, GA' , '13065' : 'Clinch, GA' , '13067' : 'Cobb, GA' , '13069' : 'Coffee, GA' , '13071' : 'Colquitt, GA' , '13073' : 'Columbia, GA' , '13075' : 'Cook, GA' , '13077' : 'Coweta, GA' , '13079' : 'Crawford, GA' , '13081' : 'Crisp, GA' , '13083' : 'Dade, GA' , '13085' : 'Dawson, GA' , '13087' : 'Decatur, GA' , '13089' : 'De Kalb, GA' , '13091' : 'Dodge, GA' , '13093' : 'Dooly, GA' , '13095' : 'Dougherty, GA' , '13097' : 'Douglas, GA' , '13099' : 'Early, GA' , '13101' : 'Echols, GA' , '13103' : 'Effingham, GA' , '13105' : 'Elbert, GA' , '13107' : 'Emanuel, GA' , '13109' : 'Evans, GA' , '13111' : 'Fannin, GA' , '13113' : 'Fayette, GA' , '13115' : 'Floyd, GA' , '13117' : 'Forsyth, GA' , '13119' : 'Franklin, GA' , '13121' : 'Fulton, GA' , '13123' : 'Gilmer, GA' , '13125' : 'Glascock, GA' , '13127' : 'Glynn, GA' , '13129' : 'Gordon, GA' , '13131' : 'Grady, GA' , '13133' : 'Greene, GA' , '13135' : 'Gwinnett, GA' , '13137' : 'Habersham, GA' , '13139' : 'Hall, GA' , '13141' : 'Hancock, GA' , '13143' : 'Haralson, GA' , '13145' : 'Harris, GA' , '13147' : 'Hart, GA' , '13149' : 'Heard, GA' , '13151' : 'Henry, GA' , '13153' : 'Houston, GA' , '13155' : 'Irwin, GA' , '13157' : 'Jackson, GA' , '13159' : 'Jasper, GA' , '13161' : 'Jeff Davis, GA' , '13163' : 'Jefferson, GA' , '13165' : 'Jenkins, GA' , '13167' : 'Johnson, GA' , '13169' : 'Jones, GA' , '13171' : 'Lamar, GA' , '13173' : 'Lanier, GA' , '13175' : 'Laurens, GA' , '13177' : 'Lee, GA' , '13179' : 'Liberty, GA' , '13181' : 'Lincoln, GA' , '13183' : 'Long, GA' , '13185' : 'Lowndes, GA' , '13187' : 'Lumpkin, GA' , '13189' : 'McDuffie, GA' , '13191' : 'McIntosh, GA' , '13193' : 'Macon, GA' , '13195' : 'Madison, GA' , '13197' : 'Marion, GA' , '13199' : 'Meriwether, GA' , '13201' : 'Miller, GA' , '13205' : 'Mitchell, GA' , '13207' : 'Monroe, GA' , '13209' : 'Montgomery, GA' , '13211' : 'Morgan, GA' , '13213' : 'Murray, GA' , '13215' : 'Muscogee, GA' , '13217' : 'Newton, GA' , '13219' : 'Oconee, GA' , '13221' : 'Oglethorpe, GA' , '13223' : 'Paulding, GA' , '13225' : 'Peach, GA' , '13227' : 'Pickens, GA' , '13229' : 'Pierce, GA' , '13231' : 'Pike, GA' , '13233' : 'Polk, GA' , '13235' : 'Pulaski, GA' , '13237' : 'Putnam, GA' , '13239' : 'Quitman, GA' , '13241' : 'Rabun, GA' , '13243' : 'Randolph, GA' , '13245' : 'Richmond, GA' , '13247' : 'Rockdale, GA' , '13249' : 'Schley, GA' , '13251' : 'Screven, GA' , '13253' : 'Seminole, GA' , '13255' : 'Spalding, GA' , '13257' : 'Stephens, GA' , '13259' : 'Stewart, GA' , '13261' : 'Sumter, GA' , '13263' : 'Talbot, GA' , '13265' : 'Taliaferro, GA' , '13267' : 'Tattnall, GA' , '13269' : 'Taylor, GA' , '13271' : 'Telfair, GA' , '13273' : 'Terrell, GA' , '13275' : 'Thomas, GA' , '13277' : 'Tift, GA' , '13279' : 'Toombs, GA' , '13281' : 'Towns, GA' , '13283' : 'Treutlen, GA' , '13285' : 'Troup, GA' , '13287' : 'Turner, GA' , '13289' : 'Twiggs, GA' , '13291' : 'Union, GA' , '13293' : 'Upson, GA' , '13295' : 'Walker, GA' , '13297' : 'Walton, GA' , '13299' : 'Ware, GA' , '13301' : 'Warren, GA' , '13303' : 'Washington, GA' , '13305' : 'Wayne, GA' , '13307' : 'Webster, GA' , '13309' : 'Wheeler, GA' , '13311' : 'White, GA' , '13313' : 'Whitfield, GA' , '13315' : 'Wilcox, GA' , '13317' : 'Wilkes, GA' , '13319' : 'Wilkinson, GA' , '13321' : 'Worth, GA' , '15000' : 'HAWAII' , '15001' : 'Hawaii, HI' , '15003' : 'Honolulu, HI' , '15005' : 'Kalawao, HI' , '15007' : 'Kauai, HI' , '15009' : 'Maui, HI' , '16000' : 'IDAHO' , '16001' : 'Ada, ID' , '16003' : 'Adams, ID' , '16005' : 'Bannock, ID' , '16007' : 'Bear Lake, ID' , '16009' : 'Benewah, ID' , '16011' : 'Bingham, ID' , '16013' : 'Blaine, ID' , '16015' : 'Boise, ID' , '16017' : 'Bonner, ID' , '16019' : 'Bonneville, ID' , '16021' : 'Boundary, ID' , '16023' : 'Butte, ID' , '16025' : 'Camas, ID' , '16027' : 'Canyon, ID' , '16029' : 'Caribou, ID' , '16031' : 'Cassia, ID' , '16033' : 'Clark, ID' , '16035' : 'Clearwater, ID' , '16037' : 'Custer, ID' , '16039' : 'Elmore, ID' , '16041' : 'Franklin, ID' , '16043' : 'Fremont, ID' , '16045' : 'Gem, ID' , '16047' : 'Gooding, ID' , '16049' : 'Idaho, ID' , '16051' : 'Jefferson, ID' , '16053' : 'Jerome, ID' , '16055' : 'Kootenai, ID' , '16057' : 'Latah, ID' , '16059' : 'Lemhi, ID' , '16061' : 'Lewis, ID' , '16063' : 'Lincoln, ID' , '16065' : 'Madison, ID' , '16067' : 'Minidoka, ID' , '16069' : 'Nez Perce, ID' , '16071' : 'Oneida, ID' , '16073' : 'Owyhee, ID' , '16075' : 'Payette, ID' , '16077' : 'Power, ID' , '16079' : 'Shoshone, ID' , '16081' : 'Teton, ID' , '16083' : 'Twin Falls, ID' , '16085' : 'Valley, ID' , '16087' : 'Washington, ID' , '17000' : 'ILLINOIS' , '17001' : 'Adams, IL' , '17003' : 'Alexander, IL' , '17005' : 'Bond, IL' , '17007' : 'Boone, IL' , '17009' : 'Brown, IL' , '17011' : 'Bureau, IL' , '17013' : 'Calhoun, IL' , '17015' : 'Carroll, IL' , '17017' : 'Cass, IL' , '17019' : 'Champaign, IL' , '17021' : 'Christian, IL' , '17023' : 'Clark, IL' , '17025' : 'Clay, IL' , '17027' : 'Clinton, IL' , '17029' : 'Coles, IL' , '17031' : 'Cook, IL' , '17033' : 'Crawford, IL' , '17035' : 'Cumberland, IL' , '17037' : 'DeKalb, IL' , '17039' : 'De Witt, IL' , '17041' : 'Douglas, IL' , '17043' : 'DuPage, IL' , '17045' : 'Edgar, IL' , '17047' : 'Edwards, IL' , '17049' : 'Effingham, IL' , '17051' : 'Fayette, IL' , '17053' : 'Ford, IL' , '17055' : 'Franklin, IL' , '17057' : 'Fulton, IL' , '17059' : 'Gallatin, IL' , '17061' : 'Greene, IL' , '17063' : 'Grundy, IL' , '17065' : 'Hamilton, IL' , '17067' : 'Hancock, IL' , '17069' : 'Hardin, IL' , '17071' : 'Henderson, IL' , '17073' : 'Henry, IL' , '17075' : 'Iroquois, IL' , '17077' : 'Jackson, IL' , '17079' : 'Jasper, IL' , '17081' : 'Jefferson, IL' , '17083' : 'Jersey, IL' , '17085' : 'Jo Daviess, IL' , '17087' : 'Johnson, IL' , '17089' : 'Kane, IL' , '17091' : 'Kankakee, IL' , '17093' : 'Kendall, IL' , '17095' : 'Knox, IL' , '17097' : 'Lake, IL' , '17099' : 'LaSalle, IL' , '17101' : 'Lawrence, IL' , '17103' : 'Lee, IL' , '17105' : 'Livingston, IL' , '17107' : 'Logan, IL' , '17109' : 'McDonough, IL' , '17111' : 'McHenry, IL' , '17113' : 'McLean, IL' , '17115' : 'Macon, IL' , '17117' : 'Macoupin, IL' , '17119' : 'Madison, IL' , '17121' : 'Marion, IL' , '17123' : 'Marshall, IL' , '17125' : 'Mason, IL' , '17127' : 'Massac, IL' , '17129' : 'Menard, IL' , '17131' : 'Mercer, IL' , '17133' : 'Monroe, IL' , '17135' : 'Montgomery, IL' , '17137' : 'Morgan, IL' , '17139' : 'Moultrie, IL' , '17141' : 'Ogle, IL' , '17143' : 'Peoria, IL' , '17145' : 'Perry, IL' , '17147' : 'Piatt, IL' , '17149' : 'Pike, IL' , '17151' : 'Pope, IL' , '17153' : 'Pulaski, IL' , '17155' : 'Putnam, IL' , '17157' : 'Randolph, IL' , '17159' : 'Richland, IL' , '17161' : 'Rock Island, IL' , '17163' : 'St. Clair, IL' , '17165' : 'Saline, IL' , '17167' : 'Sangamon, IL' , '17169' : 'Schuyler, IL' , '17171' : 'Scott, IL' , '17173' : 'Shelby, IL' , '17175' : 'Stark, IL' , '17177' : 'Stephenson, IL' , '17179' : 'Tazewell, IL' , '17181' : 'Union, IL' , '17183' : 'Vermilion, IL' , '17185' : 'Wabash, IL' , '17187' : 'Warren, IL' , '17189' : 'Washington, IL' , '17191' : 'Wayne, IL' , '17193' : 'White, IL' , '17195' : 'Whiteside, IL' , '17197' : 'Will, IL' , '17199' : 'Williamson, IL' , '17201' : 'Winnebago, IL' , '17203' : 'Woodford, IL' , '18000' : 'INDIANA' , '18001' : 'Adams, IN' , '18003' : 'Allen, IN' , '18005' : 'Bartholomew, IN' , '18007' : 'Benton, IN' , '18009' : 'Blackford, IN' , '18011' : 'Boone, IN' , '18013' : 'Brown, IN' , '18015' : 'Carroll, IN' , '18017' : 'Cass, IN' , '18019' : 'Clark, IN' , '18021' : 'Clay, IN' , '18023' : 'Clinton, IN' , '18025' : 'Crawford, IN' , '18027' : 'Daviess, IN' , '18029' : 'Dearborn, IN' , '18031' : 'Decatur, IN' , '18033' : 'De Kalb, IN' , '18035' : 'Delaware, IN' , '18037' : 'Dubois, IN' , '18039' : 'Elkhart, IN' , '18041' : 'Fayette, IN' , '18043' : 'Floyd, IN' , '18045' : 'Fountain, IN' , '18047' : 'Franklin, IN' , '18049' : 'Fulton, IN' , '18051' : 'Gibson, IN' , '18053' : 'Grant, IN' , '18055' : 'Greene, IN' , '18057' : 'Hamilton, IN' , '18059' : 'Hancock, IN' , '18061' : 'Harrison, IN' , '18063' : 'Hendricks, IN' , '18065' : 'Henry, IN' , '18067' : 'Howard, IN' , '18069' : 'Huntington, IN' , '18071' : 'Jackson, IN' , '18073' : 'Jasper, IN' , '18075' : 'Jay, IN' , '18077' : 'Jefferson, IN' , '18079' : 'Jennings, IN' , '18081' : 'Johnson, IN' , '18083' : 'Knox, IN' , '18085' : 'Kosciusko, IN' , '18087' : 'Lagrange, IN' , '18089' : 'Lake, IN' , '18091' : 'La Porte, IN' , '18093' : 'Lawrence, IN' , '18095' : 'Madison, IN' , '18097' : 'Marion, IN' , '18099' : 'Marshall, IN' , '18101' : 'Martin, IN' , '18103' : 'Miami, IN' , '18105' : 'Monroe, IN' , '18107' : 'Montgomery, IN' , '18109' : 'Morgan, IN' , '18111' : 'Newton, IN' , '18113' : 'Noble, IN' , '18115' : 'Ohio, IN' , '18117' : 'Orange, IN' , '18119' : 'Owen, IN' , '18121' : 'Parke, IN' , '18123' : 'Perry, IN' , '18125' : 'Pike, IN' , '18127' : 'Porter, IN' , '18129' : 'Posey, IN' , '18131' : 'Pulaski, IN' , '18133' : 'Putnam, IN' , '18135' : 'Randolph, IN' , '18137' : 'Ripley, IN' , '18139' : 'Rush, IN' , '18141' : 'St. Joseph, IN' , '18143' : 'Scott, IN' , '18145' : 'Shelby, IN' , '18147' : 'Spencer, IN' , '18149' : 'Starke, IN' , '18151' : 'Steuben, IN' , '18153' : 'Sullivan, IN' , '18155' : 'Switzerland, IN' , '18157' : 'Tippecanoe, IN' , '18159' : 'Tipton, IN' , '18161' : 'Union, IN' , '18163' : 'Vanderburgh, IN' , '18165' : 'Vermillion, IN' , '18167' : 'Vigo, IN' , '18169' : 'Wabash, IN' , '18171' : 'Warren, IN' , '18173' : 'Warrick, IN' , '18175' : 'Washington, IN' , '18177' : 'Wayne, IN' , '18179' : 'Wells, IN' , '18181' : 'White, IN' , '18183' : 'Whitley, IN' , '19000' : 'IOWA' , '19001' : 'Adair, IA' , '19003' : 'Adams, IA' , '19005' : 'Allamakee, IA' , '19007' : 'Appanoose, IA' , '19009' : 'Audubon, IA' , '19011' : 'Benton, IA' , '19013' : 'Black Hawk, IA' , '19015' : 'Boone, IA' , '19017' : 'Bremer, IA' , '19019' : 'Buchanan, IA' , '19021' : 'Buena Vista, IA' , '19023' : 'Butler, IA' , '19025' : 'Calhoun, IA' , '19027' : 'Carroll, IA' , '19029' : 'Cass, IA' , '19031' : 'Cedar, IA' , '19033' : 'Cerro Gordo, IA' , '19035' : 'Cherokee, IA' , '19037' : 'Chickasaw, IA' , '19039' : 'Clarke, IA' , '19041' : 'Clay, IA' , '19043' : 'Clayton, IA' , '19045' : 'Clinton, IA' , '19047' : 'Crawford, IA' , '19049' : 'Dallas, IA' , '19051' : 'Davis, IA' , '19053' : 'Decatur, IA' , '19055' : 'Delaware, IA' , '19057' : 'Des Moines, IA' , '19059' : 'Dickinson, IA' , '19061' : 'Dubuque, IA' , '19063' : 'Emmet, IA' , '19065' : 'Fayette, IA' , '19067' : 'Floyd, IA' , '19069' : 'Franklin, IA' , '19071' : 'Fremont, IA' , '19073' : 'Greene, IA' , '19075' : 'Grundy, IA' , '19077' : 'Guthrie, IA' , '19079' : 'Hamilton, IA' , '19081' : 'Hancock, IA' , '19083' : 'Hardin, IA' , '19085' : 'Harrison, IA' , '19087' : 'Henry, IA' , '19089' : 'Howard, IA' , '19091' : 'Humboldt, IA' , '19093' : 'Ida, IA' , '19095' : 'Iowa, IA' , '19097' : 'Jackson, IA' , '19099' : 'Jasper, IA' , '19101' : 'Jefferson, IA' , '19103' : 'Johnson, IA' , '19105' : 'Jones, IA' , '19107' : 'Keokuk, IA' , '19109' : 'Kossuth, IA' , '19111' : 'Lee, IA' , '19113' : 'Linn, IA' , '19115' : 'Louisa, IA' , '19117' : 'Lucas, IA' , '19119' : 'Lyon, IA' , '19121' : 'Madison, IA' , '19123' : 'Mahaska, IA' , '19125' : 'Marion, IA' , '19127' : 'Marshall, IA' , '19129' : 'Mills, IA' , '19131' : 'Mitchell, IA' , '19133' : 'Monona, IA' , '19135' : 'Monroe, IA' , '19137' : 'Montgomery, IA' , '19139' : 'Muscatine, IA' , '19141' : 'O\'Brien, IA' , '19143' : 'Osceola, IA' , '19145' : 'Page, IA' , '19147' : 'Palo Alto, IA' , '19149' : 'Plymouth, IA' , '19151' : 'Pocahontas, IA' , '19153' : 'Polk, IA' , '19155' : 'Pottawattamie, IA' , '19157' : 'Poweshiek, IA' , '19159' : 'Ringgold, IA' , '19161' : 'Sac, IA' , '19163' : 'Scott, IA' , '19165' : 'Shelby, IA' , '19167' : 'Sioux, IA' , '19169' : 'Story, IA' , '19171' : 'Tama, IA' , '19173' : 'Taylor, IA' , '19175' : 'Union, IA' , '19177' : 'Van Buren, IA' , '19179' : 'Wapello, IA' , '19181' : 'Warren, IA' , '19183' : 'Washington, IA' , '19185' : 'Wayne, IA' , '19187' : 'Webster, IA' , '19189' : 'Winnebago, IA' , '19191' : 'Winneshiek, IA' , '19193' : 'Woodbury, IA' , '19195' : 'Worth, IA' , '19197' : 'Wright, IA' , '20000' : 'KANSAS' , '20001' : 'Allen, KS' , '20003' : 'Anderson, KS' , '20005' : 'Atchison, KS' , '20007' : 'Barber, KS' , '20009' : 'Barton, KS' , '20011' : 'Bourbon, KS' , '20013' : 'Brown, KS' , '20015' : 'Butler, KS' , '20017' : 'Chase, KS' , '20019' : 'Chautauqua, KS' , '20021' : 'Cherokee, KS' , '20023' : 'Cheyenne, KS' , '20025' : 'Clark, KS' , '20027' : 'Clay, KS' , '20029' : 'Cloud, KS' , '20031' : 'Coffey, KS' , '20033' : 'Comanche, KS' , '20035' : 'Cowley, KS' , '20037' : 'Crawford, KS' , '20039' : 'Decatur, KS' , '20041' : 'Dickinson, KS' , '20043' : 'Doniphan, KS' , '20045' : 'Douglas, KS' , '20047' : 'Edwards, KS' , '20049' : 'Elk, KS' , '20051' : 'Ellis, KS' , '20053' : 'Ellsworth, KS' , '20055' : 'Finney, KS' , '20057' : 'Ford, KS' , '20059' : 'Franklin, KS' , '20061' : 'Geary, KS' , '20063' : 'Gove, KS' , '20065' : 'Graham, KS' , '20067' : 'Grant, KS' , '20069' : 'Gray, KS' , '20071' : 'Greeley, KS' , '20073' : 'Greenwood, KS' , '20075' : 'Hamilton, KS' , '20077' : 'Harper, KS' , '20079' : 'Harvey, KS' , '20081' : 'Haskell, KS' , '20083' : 'Hodgeman, KS' , '20085' : 'Jackson, KS' , '20087' : 'Jefferson, KS' , '20089' : 'Jewell, KS' , '20091' : 'Johnson, KS' , '20093' : 'Kearny, KS' , '20095' : 'Kingman, KS' , '20097' : 'Kiowa, KS' , '20099' : 'Labette, KS' , '20101' : 'Lane, KS' , '20103' : 'Leavenworth, KS' , '20105' : 'Lincoln, KS' , '20107' : 'Linn, KS' , '20109' : 'Logan, KS' , '20111' : 'Lyon, KS' , '20113' : 'McPherson, KS' , '20115' : 'Marion, KS' , '20117' : 'Marshall, KS' , '20119' : 'Meade, KS' , '20121' : 'Miami, KS' , '20123' : 'Mitchell, KS' , '20125' : 'Montgomery, KS' , '20127' : 'Morris, KS' , '20129' : 'Morton, KS' , '20131' : 'Nemaha, KS' , '20133' : 'Neosho, KS' , '20135' : 'Ness, KS' , '20137' : 'Norton, KS' , '20139' : 'Osage, KS' , '20141' : 'Osborne, KS' , '20143' : 'Ottawa, KS' , '20145' : 'Pawnee, KS' , '20147' : 'Phillips, KS' , '20149' : 'Pottawatomie, KS' , '20151' : 'Pratt, KS' , '20153' : 'Rawlins, KS' , '20155' : 'Reno, KS' , '20157' : 'Republic, KS' , '20159' : 'Rice, KS' , '20161' : 'Riley, KS' , '20163' : 'Rooks, KS' , '20165' : 'Rush, KS' , '20167' : 'Russell, KS' , '20169' : 'Saline, KS' , '20171' : 'Scott, KS' , '20173' : 'Sedgwick, KS' , '20175' : 'Seward, KS' , '20177' : 'Shawnee, KS' , '20179' : 'Sheridan, KS' , '20181' : 'Sherman, KS' , '20183' : 'Smith, KS' , '20185' : 'Stafford, KS' , '20187' : 'Stanton, KS' , '20189' : 'Stevens, KS' , '20191' : 'Sumner, KS' , '20193' : 'Thomas, KS' , '20195' : 'Trego, KS' , '20197' : 'Wabaunsee, KS' , '20199' : 'Wallace, KS' , '20201' : 'Washington, KS' , '20203' : 'Wichita, KS' , '20205' : 'Wilson, KS' , '20207' : 'Woodson, KS' , '20209' : 'Wyandotte, KS' , '21000' : 'KENTUCKY' , '21001' : 'Adair, KY' , '21003' : 'Allen, KY' , '21005' : 'Anderson, KY' , '21007' : 'Ballard, KY' , '21009' : 'Barren, KY' , '21011' : 'Bath, KY' , '21013' : 'Bell, KY' , '21015' : 'Boone, KY' , '21017' : 'Bourbon, KY' , '21019' : 'Boyd, KY' , '21021' : 'Boyle, KY' , '21023' : 'Bracken, KY' , '21025' : 'Breathitt, KY' , '21027' : 'Breckinridge, KY' , '21029' : 'Bullitt, KY' , '21031' : 'Butler, KY' , '21033' : 'Caldwell, KY' , '21035' : 'Calloway, KY' , '21037' : 'Campbell, KY' , '21039' : 'Carlisle, KY' , '21041' : 'Carroll, KY' , '21043' : 'Carter, KY' , '21045' : 'Casey, KY' , '21047' : 'Christian, KY' , '21049' : 'Clark, KY' , '21051' : 'Clay, KY' , '21053' : 'Clinton, KY' , '21055' : 'Crittenden, KY' , '21057' : 'Cumberland, KY' , '21059' : 'Daviess, KY' , '21061' : 'Edmonson, KY' , '21063' : 'Elliott, KY' , '21065' : 'Estill, KY' , '21067' : 'Fayette, KY' , '21069' : 'Fleming, KY' , '21071' : 'Floyd, KY' , '21073' : 'Franklin, KY' , '21075' : 'Fulton, KY' , '21077' : 'Gallatin, KY' , '21079' : 'Garrard, KY' , '21081' : 'Grant, KY' , '21083' : 'Graves, KY' , '21085' : 'Grayson, KY' , '21087' : 'Green, KY' , '21089' : 'Greenup, KY' , '21091' : 'Hancock, KY' , '21093' : 'Hardin, KY' , '21095' : 'Harlan, KY' , '21097' : 'Harrison, KY' , '21099' : 'Hart, KY' , '21101' : 'Henderson, KY' , '21103' : 'Henry, KY' , '21105' : 'Hickman, KY' , '21107' : 'Hopkins, KY' , '21109' : 'Jackson, KY' , '21111' : 'Jefferson, KY' , '21113' : 'Jessamine, KY' , '21115' : 'Johnson, KY' , '21117' : 'Kenton, KY' , '21119' : 'Knott, KY' , '21121' : 'Knox, KY' , '21123' : 'Larue, KY' , '21125' : 'Laurel, KY' , '21127' : 'Lawrence, KY' , '21129' : 'Lee, KY' , '21131' : 'Leslie, KY' , '21133' : 'Letcher, KY' , '21135' : 'Lewis, KY' , '21137' : 'Lincoln, KY' , '21139' : 'Livingston, KY' , '21141' : 'Logan, KY' , '21143' : 'Lyon, KY' , '21145' : 'McCracken, KY' , '21147' : 'McCreary, KY' , '21149' : 'McLean, KY' , '21151' : 'Madison, KY' , '21153' : 'Magoffin, KY' , '21155' : 'Marion, KY' , '21157' : 'Marshall, KY' , '21159' : 'Martin, KY' , '21161' : 'Mason, KY' , '21163' : 'Meade, KY' , '21165' : 'Menifee, KY' , '21167' : 'Mercer, KY' , '21169' : 'Metcalfe, KY' , '21171' : 'Monroe, KY' , '21173' : 'Montgomery, KY' , '21175' : 'Morgan, KY' , '21177' : 'Muhlenberg, KY' , '21179' : 'Nelson, KY' , '21181' : 'Nicholas, KY' , '21183' : 'Ohio, KY' , '21185' : 'Oldham, KY' , '21187' : 'Owen, KY' , '21189' : 'Owsley, KY' , '21191' : 'Pendleton, KY' , '21193' : 'Perry, KY' , '21195' : 'Pike, KY' , '21197' : 'Powell, KY' , '21199' : 'Pulaski, KY' , '21201' : 'Robertson, KY' , '21203' : 'Rockcastle, KY' , '21205' : 'Rowan, KY' , '21207' : 'Russell, KY' , '21209' : 'Scott, KY' , '21211' : 'Shelby, KY' , '21213' : 'Simpson, KY' , '21215' : 'Spencer, KY' , '21217' : 'Taylor, KY' , '21219' : 'Todd, KY' , '21221' : 'Trigg, KY' , '21223' : 'Trimble, KY' , '21225' : 'Union, KY' , '21227' : 'Warren, KY' , '21229' : 'Washington, KY' , '21231' : 'Wayne, KY' , '21233' : 'Webster, KY' , '21235' : 'Whitley, KY' , '21237' : 'Wolfe, KY' , '21239' : 'Woodford, KY' , '22000' : 'LOUISIANA' , '22001' : 'Acadia, LA' , '22003' : 'Allen, LA' , '22005' : 'Ascension, LA' , '22007' : 'Assumption, LA' , '22009' : 'Avoyelles, LA' , '22011' : 'Beauregard, LA' , '22013' : 'Bienville, LA' , '22015' : 'Bossier, LA' , '22017' : 'Caddo, LA' , '22019' : 'Calcasieu, LA' , '22021' : 'Caldwell, LA' , '22023' : 'Cameron, LA' , '22025' : 'Catahoula, LA' , '22027' : 'Claiborne, LA' , '22029' : 'Concordia, LA' , '22031' : 'De Soto, LA' , '22033' : 'East Baton Rouge, LA' , '22035' : 'East Carroll, LA' , '22037' : 'East Feliciana, LA' , '22039' : 'Evangeline, LA' , '22041' : 'Franklin, LA' , '22043' : 'Grant, LA' , '22045' : 'Iberia, LA' , '22047' : 'Iberville, LA' , '22049' : 'Jackson, LA' , '22051' : 'Jefferson, LA' , '22053' : 'Jefferson Davis, LA' , '22055' : 'Lafayette, LA' , '22057' : 'Lafourche, LA' , '22059' : 'LaSalle, LA' , '22061' : 'Lincoln, LA' , '22063' : 'Livingston, LA' , '22065' : 'Madison, LA' , '22067' : 'Morehouse, LA' , '22069' : 'Natchitoches, LA' , '22071' : 'Orleans, LA' , '22073' : 'Ouachita, LA' , '22075' : 'Plaquemines, LA' , '22077' : 'Pointe Coupee, LA' , '22079' : 'Rapides, LA' , '22081' : 'Red River, LA' , '22083' : 'Richland, LA' , '22085' : 'Sabine, LA' , '22087' : 'St. Bernard, LA' , '22089' : 'St. Charles, LA' , '22091' : 'St. Helena, LA' , '22093' : 'St. James, LA' , '22095' : 'St. John the Baptist, LA' , '22097' : 'St. Landry, LA' , '22099' : 'St. Martin, LA' , '22101' : 'St. Mary, LA' , '22103' : 'St. Tammany, LA' , '22105' : 'Tangipahoa, LA' , '22107' : 'Tensas, LA' , '22109' : 'Terrebonne, LA' , '22111' : 'Union, LA' , '22113' : 'Vermilion, LA' , '22115' : 'Vernon, LA' , '22117' : 'Washington, LA' , '22119' : 'Webster, LA' , '22121' : 'West Baton Rouge, LA' , '22123' : 'West Carroll, LA' , '22125' : 'West Feliciana, LA' , '22127' : 'Winn, LA' , '23000' : 'MAINE' , '23001' : 'Androscoggin, ME' , '23003' : 'Aroostook, ME' , '23005' : 'Cumberland, ME' , '23007' : 'Franklin, ME' , '23009' : 'Hancock, ME' , '23011' : 'Kennebec, ME' , '23013' : 'Knox, ME' , '23015' : 'Lincoln, ME' , '23017' : 'Oxford, ME' , '23019' : 'Penobscot, ME' , '23021' : 'Piscataquis, ME' , '23023' : 'Sagadahoc, ME' , '23025' : 'Somerset, ME' , '23027' : 'Waldo, ME' , '23029' : 'Washington, ME' , '23031' : 'York, ME' , '24000' : 'MARYLAND' , '24001' : 'Allegany, MD' , '24003' : 'Anne Arundel, MD' , '24005' : 'Baltimore, MD' , '24009' : 'Calvert, MD' , '24011' : 'Caroline, MD' , '24013' : 'Carroll, MD' , '24015' : 'Cecil, MD' , '24017' : 'Charles, MD' , '24019' : 'Dorchester, MD' , '24021' : 'Frederick, MD' , '24023' : 'Garrett, MD' , '24025' : 'Harford, MD' , '24027' : 'Howard, MD' , '24029' : 'Kent, MD' , '24031' : 'Montgomery, MD' , '24033' : 'Prince George\'s, MD' , '24035' : 'Queen Anne\'s, MD' , '24037' : 'St. Mary\'s, MD' , '24039' : 'Somerset, MD' , '24041' : 'Talbot, MD' , '24043' : 'Washington, MD' , '24045' : 'Wicomico, MD' , '24047' : 'Worcester, MD' , '24510' : 'Baltimore City, MD' , '25000' : 'MASSACHUSETTS' , '25001' : 'Barnstable, MA' , '25003' : 'Berkshire, MA' , '25005' : 'Bristol, MA' , '25007' : 'Dukes, MA' , '25009' : 'Essex, MA' , '25011' : 'Franklin, MA' , '25013' : 'Hampden, MA' , '25015' : 'Hampshire, MA' , '25017' : 'Middlesex, MA' , '25019' : 'Nantucket, MA' , '25021' : 'Norfolk, MA' , '25023' : 'Plymouth, MA' , '25025' : 'Suffolk, MA' , '25027' : 'Worcester, MA' , '26000' : 'MICHIGAN' , '26001' : 'Alcona, MI' , '26003' : 'Alger, MI' , '26005' : 'Allegan, MI' , '26007' : 'Alpena, MI' , '26009' : 'Antrim, MI' , '26011' : 'Arenac, MI' , '26013' : 'Baraga, MI' , '26015' : 'Barry, MI' , '26017' : 'Bay, MI' , '26019' : 'Benzie, MI' , '26021' : 'Berrien, MI' , '26023' : 'Branch, MI' , '26025' : 'Calhoun, MI' , '26027' : 'Cass, MI' , '26029' : 'Charlevoix, MI' , '26031' : 'Cheboygan, MI' , '26033' : 'Chippewa, MI' , '26035' : 'Clare, MI' , '26037' : 'Clinton, MI' , '26039' : 'Crawford, MI' , '26041' : 'Delta, MI' , '26043' : 'Dickinson, MI' , '26045' : 'Eaton, MI' , '26047' : 'Emmet, MI' , '26049' : 'Genesee, MI' , '26051' : 'Gladwin, MI' , '26053' : 'Gogebic, MI' , '26055' : 'Grand Traverse, MI' , '26057' : 'Gratiot, MI' , '26059' : 'Hillsdale, MI' , '26061' : 'Houghton, MI' , '26063' : 'Huron, MI' , '26065' : 'Ingham, MI' , '26067' : 'Ionia, MI' , '26069' : 'Iosco, MI' , '26071' : 'Iron, MI' , '26073' : 'Isabella, MI' , '26075' : 'Jackson, MI' , '26077' : 'Kalamazoo, MI' , '26079' : 'Kalkaska, MI' , '26081' : 'Kent, MI' , '26083' : 'Keweenaw, MI' , '26085' : 'Lake, MI' , '26087' : 'Lapeer, MI' , '26089' : 'Leelanau, MI' , '26091' : 'Lenawee, MI' , '26093' : 'Livingston, MI' , '26095' : 'Luce, MI' , '26097' : 'Mackinac, MI' , '26099' : 'Macomb, MI' , '26101' : 'Manistee, MI' , '26103' : 'Marquette, MI' , '26105' : 'Mason, MI' , '26107' : 'Mecosta, MI' , '26109' : 'Menominee, MI' , '26111' : 'Midland, MI' , '26113' : 'Missaukee, MI' , '26115' : 'Monroe, MI' , '26117' : 'Montcalm, MI' , '26119' : 'Montmorency, MI' , '26121' : 'Muskegon, MI' , '26123' : 'Newaygo, MI' , '26125' : 'Oakland, MI' , '26127' : 'Oceana, MI' , '26129' : 'Ogemaw, MI' , '26131' : 'Ontonagon, MI' , '26133' : 'Osceola, MI' , '26135' : 'Oscoda, MI' , '26137' : 'Otsego, MI' , '26139' : 'Ottawa, MI' , '26141' : 'Presque Isle, MI' , '26143' : 'Roscommon, MI' , '26145' : 'Saginaw, MI' , '26147' : 'St. Clair, MI' , '26149' : 'St. Joseph, MI' , '26151' : 'Sanilac, MI' , '26153' : 'Schoolcraft, MI' , '26155' : 'Shiawassee, MI' , '26157' : 'Tuscola, MI' , '26159' : 'Van Buren, MI' , '26161' : 'Washtenaw, MI' , '26163' : 'Wayne, MI' , '26165' : 'Wexford, MI' , '27000' : 'MINNESOTA' , '27001' : 'Aitkin, MN' , '27003' : 'Anoka, MN' , '27005' : 'Becker, MN' , '27007' : 'Beltrami, MN' , '27009' : 'Benton, MN' , '27011' : 'Big Stone, MN' , '27013' : 'Blue Earth, MN' , '27015' : 'Brown, MN' , '27017' : 'Carlton, MN' , '27019' : 'Carver, MN' , '27021' : 'Cass, MN' , '27023' : 'Chippewa, MN' , '27025' : 'Chisago, MN' , '27027' : 'Clay, MN' , '27029' : 'Clearwater, MN' , '27031' : 'Cook, MN' , '27033' : 'Cottonwood, MN' , '27035' : 'Crow Wing, MN' , '27037' : 'Dakota, MN' , '27039' : 'Dodge, MN' , '27041' : 'Douglas, MN' , '27043' : 'Faribault, MN' , '27045' : 'Fillmore, MN' , '27047' : 'Freeborn, MN' , '27049' : 'Goodhue, MN' , '27051' : 'Grant, MN' , '27053' : 'Hennepin, MN' , '27055' : 'Houston, MN' , '27057' : 'Hubbard, MN' , '27059' : 'Isanti, MN' , '27061' : 'Itasca, MN' , '27063' : 'Jackson, MN' , '27065' : 'Kanabec, MN' , '27067' : 'Kandiyohi, MN' , '27069' : 'Kittson, MN' , '27071' : 'Koochiching, MN' , '27073' : 'Lac qui Parle, MN' , '27075' : 'Lake, MN' , '27077' : 'Lake of the Woods, MN' , '27079' : 'Le Sueur, MN' , '27081' : 'Lincoln, MN' , '27083' : 'Lyon, MN' , '27085' : 'McLeod, MN' , '27087' : 'Mahnomen, MN' , '27089' : 'Marshall, MN' , '27091' : 'Martin, MN' , '27093' : 'Meeker, MN' , '27095' : 'Mille Lacs, MN' , '27097' : 'Morrison, MN' , '27099' : 'Mower, MN' , '27101' : 'Murray, MN' , '27103' : 'Nicollet, MN' , '27105' : 'Nobles, MN' , '27107' : 'Norman, MN' , '27109' : 'Olmsted, MN' , '27111' : 'Otter Tail, MN' , '27113' : 'Pennington, MN' , '27115' : 'Pine, MN' , '27117' : 'Pipestone, MN' , '27119' : 'Polk, MN' , '27121' : 'Pope, MN' , '27123' : 'Ramsey, MN' , '27125' : 'Red Lake, MN' , '27127' : 'Redwood, MN' , '27129' : 'Renville, MN' , '27131' : 'Rice, MN' , '27133' : 'Rock, MN' , '27135' : 'Roseau, MN' , '27137' : 'St. Louis, MN' , '27139' : 'Scott, MN' , '27141' : 'Sherburne, MN' , '27143' : 'Sibley, MN' , '27145' : 'Stearns, MN' , '27147' : 'Steele, MN' , '27149' : 'Stevens, MN' , '27151' : 'Swift, MN' , '27153' : 'Todd, MN' , '27155' : 'Traverse, MN' , '27157' : 'Wabasha, MN' , '27159' : 'Wadena, MN' , '27161' : 'Waseca, MN' , '27163' : 'Washington, MN' , '27165' : 'Watonwan, MN' , '27167' : 'Wilkin, MN' , '27169' : 'Winona, MN' , '27171' : 'Wright, MN' , '27173' : 'Yellow Medicine, MN' , '28000' : 'MISSISSIPPI' , '28001' : 'Adams, MS' , '28003' : 'Alcorn, MS' , '28005' : 'Amite, MS' , '28007' : 'Attala, MS' , '28009' : 'Benton, MS' , '28011' : 'Bolivar, MS' , '28013' : 'Calhoun, MS' , '28015' : 'Carroll, MS' , '28017' : 'Chickasaw, MS' , '28019' : 'Choctaw, MS' , '28021' : 'Claiborne, MS' , '28023' : 'Clarke, MS' , '28025' : 'Clay, MS' , '28027' : 'Coahoma, MS' , '28029' : 'Copiah, MS' , '28031' : 'Covington, MS' , '28033' : 'DeSoto, MS' , '28035' : 'Forrest, MS' , '28037' : 'Franklin, MS' , '28039' : 'George, MS' , '28041' : 'Greene, MS' , '28043' : 'Grenada, MS' , '28045' : 'Hancock, MS' , '28047' : 'Harrison, MS' , '28049' : 'Hinds, MS' , '28051' : 'Holmes, MS' , '28053' : 'Humphreys, MS' , '28055' : 'Issaquena, MS' , '28057' : 'Itawamba, MS' , '28059' : 'Jackson, MS' , '28061' : 'Jasper, MS' , '28063' : 'Jefferson, MS' , '28065' : 'Jefferson Davis, MS' , '28067' : 'Jones, MS' , '28069' : 'Kemper, MS' , '28071' : 'Lafayette, MS' , '28073' : 'Lamar, MS' , '28075' : 'Lauderdale, MS' , '28077' : 'Lawrence, MS' , '28079' : 'Leake, MS' , '28081' : 'Lee, MS' , '28083' : 'Leflore, MS' , '28085' : 'Lincoln, MS' , '28087' : 'Lowndes, MS' , '28089' : 'Madison, MS' , '28091' : 'Marion, MS' , '28093' : 'Marshall, MS' , '28095' : 'Monroe, MS' , '28097' : 'Montgomery, MS' , '28099' : 'Neshoba, MS' , '28101' : 'Newton, MS' , '28103' : 'Noxubee, MS' , '28105' : 'Oktibbeha, MS' , '28107' : 'Panola, MS' , '28109' : 'Pearl River, MS' , '28111' : 'Perry, MS' , '28113' : 'Pike, MS' , '28115' : 'Pontotoc, MS' , '28117' : 'Prentiss, MS' , '28119' : 'Quitman, MS' , '28121' : 'Rankin, MS' , '28123' : 'Scott, MS' , '28125' : 'Sharkey, MS' , '28127' : 'Simpson, MS' , '28129' : 'Smith, MS' , '28131' : 'Stone, MS' , '28133' : 'Sunflower, MS' , '28135' : 'Tallahatchie, MS' , '28137' : 'Tate, MS' , '28139' : 'Tippah, MS' , '28141' : 'Tishomingo, MS' , '28143' : 'Tunica, MS' , '28145' : 'Union, MS' , '28147' : 'Walthall, MS' , '28149' : 'Warren, MS' , '28151' : 'Washington, MS' , '28153' : 'Wayne, MS' , '28155' : 'Webster, MS' , '28157' : 'Wilkinson, MS' , '28159' : 'Winston, MS' , '28161' : 'Yalobusha, MS' , '28163' : 'Yazoo, MS' , '29000' : 'MISSOURI' , '29001' : 'Adair, MO' , '29003' : 'Andrew, MO' , '29005' : 'Atchison, MO' , '29007' : 'Audrain, MO' , '29009' : 'Barry, MO' , '29011' : 'Barton, MO' , '29013' : 'Bates, MO' , '29015' : 'Benton, MO' , '29017' : 'Bollinger, MO' , '29019' : 'Boone, MO' , '29021' : 'Buchanan, MO' , '29023' : 'Butler, MO' , '29025' : 'Caldwell, MO' , '29027' : 'Callaway, MO' , '29029' : 'Camden, MO' , '29031' : 'Cape Girardeau, MO' , '29033' : 'Carroll, MO' , '29035' : 'Carter, MO' , '29037' : 'Cass, MO' , '29039' : 'Cedar, MO' , '29041' : 'Chariton, MO' , '29043' : 'Christian, MO' , '29045' : 'Clark, MO' , '29047' : 'Clay, MO' , '29049' : 'Clinton, MO' , '29051' : 'Cole, MO' , '29053' : 'Cooper, MO' , '29055' : 'Crawford, MO' , '29057' : 'Dade, MO' , '29059' : 'Dallas, MO' , '29061' : 'Daviess, MO' , '29063' : 'De Kalb, MO' , '29065' : 'Dent, MO' , '29067' : 'Douglas, MO' , '29069' : 'Dunklin, MO' , '29071' : 'Franklin, MO' , '29073' : 'Gasconade, MO' , '29075' : 'Gentry, MO' , '29077' : 'Greene, MO' , '29079' : 'Grundy, MO' , '29081' : 'Harrison, MO' , '29083' : 'Henry, MO' , '29085' : 'Hickory, MO' , '29087' : 'Holt, MO' , '29089' : 'Howard, MO' , '29091' : 'Howell, MO' , '29093' : 'Iron, MO' , '29095' : 'Jackson, MO' , '29097' : 'Jasper, MO' , '29099' : 'Jefferson, MO' , '29101' : 'Johnson, MO' , '29103' : 'Knox, MO' , '29105' : 'Laclede, MO' , '29107' : 'Lafayette, MO' , '29109' : 'Lawrence, MO' , '29111' : 'Lewis, MO' , '29113' : 'Lincoln, MO' , '29115' : 'Linn, MO' , '29117' : 'Livingston, MO' , '29119' : 'McDonald, MO' , '29121' : 'Macon, MO' , '29123' : 'Madison, MO' , '29125' : 'Maries, MO' , '29127' : 'Marion, MO' , '29129' : 'Mercer, MO' , '29131' : 'Miller, MO' , '29133' : 'Mississippi, MO' , '29135' : 'Moniteau, MO' , '29137' : 'Monroe, MO' , '29139' : 'Montgomery, MO' , '29141' : 'Morgan, MO' , '29143' : 'New Madrid, MO' , '29145' : 'Newton, MO' , '29147' : 'Nodaway, MO' , '29149' : 'Oregon, MO' , '29151' : 'Osage, MO' , '29153' : 'Ozark, MO' , '29155' : 'Pemiscot, MO' , '29157' : 'Perry, MO' , '29159' : 'Pettis, MO' , '29161' : 'Phelps, MO' , '29163' : 'Pike, MO' , '29165' : 'Platte, MO' , '29167' : 'Polk, MO' , '29169' : 'Pulaski, MO' , '29171' : 'Putnam, MO' , '29173' : 'Ralls, MO' , '29175' : 'Randolph, MO' , '29177' : 'Ray, MO' , '29179' : 'Reynolds, MO' , '29181' : 'Ripley, MO' , '29183' : 'St. Charles, MO' , '29185' : 'St. Clair, MO' , '29186' : 'Ste. Genevieve, MO' , '29187' : 'St. Francois, MO' , '29189' : 'St. Louis, MO' , '29195' : 'Saline, MO' , '29197' : 'Schuyler, MO' , '29199' : 'Scotland, MO' , '29201' : 'Scott, MO' , '29203' : 'Shannon, MO' , '29205' : 'Shelby, MO' , '29207' : 'Stoddard, MO' , '29209' : 'Stone, MO' , '29211' : 'Sullivan, MO' , '29213' : 'Taney, MO' , '29215' : 'Texas, MO' , '29217' : 'Vernon, MO' , '29219' : 'Warren, MO' , '29221' : 'Washington, MO' , '29223' : 'Wayne, MO' , '29225' : 'Webster, MO' , '29227' : 'Worth, MO' , '29229' : 'Wright, MO' , '29510' : 'St. Louis City, MO' , '30000' : 'MONTANA' , '30001' : 'Beaverhead, MT' , '30003' : 'Big Horn, MT' , '30005' : 'Blaine, MT' , '30007' : 'Broadwater, MT' , '30009' : 'Carbon, MT' , '30011' : 'Carter, MT' , '30013' : 'Cascade, MT' , '30015' : 'Chouteau, MT' , '30017' : 'Custer, MT' , '30019' : 'Daniels, MT' , '30021' : 'Dawson, MT' , '30023' : 'Deer Lodge, MT' , '30025' : 'Fallon, MT' , '30027' : 'Fergus, MT' , '30029' : 'Flathead, MT' , '30031' : 'Gallatin, MT' , '30033' : 'Garfield, MT' , '30035' : 'Glacier, MT' , '30037' : 'Golden Valley, MT' , '30039' : 'Granite, MT' , '30041' : 'Hill, MT' , '30043' : 'Jefferson, MT' , '30045' : 'Judith Basin, MT' , '30047' : 'Lake, MT' , '30049' : 'Lewis and Clark, MT' , '30051' : 'Liberty, MT' , '30053' : 'Lincoln, MT' , '30055' : 'McCone, MT' , '30057' : 'Madison, MT' , '30059' : 'Meagher, MT' , '30061' : 'Mineral, MT' , '30063' : 'Missoula, MT' , '30065' : 'Musselshell, MT' , '30067' : 'Park, MT' , '30069' : 'Petroleum, MT' , '30071' : 'Phillips, MT' , '30073' : 'Pondera, MT' , '30075' : 'Powder River, MT' , '30077' : 'Powell, MT' , '30079' : 'Prairie, MT' , '30081' : 'Ravalli, MT' , '30083' : 'Richland, MT' , '30085' : 'Roosevelt, MT' , '30087' : 'Rosebud, MT' , '30089' : 'Sanders, MT' , '30091' : 'Sheridan, MT' , '30093' : 'Silver Bow, MT' , '30095' : 'Stillwater, MT' , '30097' : 'Sweet Grass, MT' , '30099' : 'Teton, MT' , '30101' : 'Toole, MT' , '30103' : 'Treasure, MT' , '30105' : 'Valley, MT' , '30107' : 'Wheatland, MT' , '30109' : 'Wibaux, MT' , '30111' : 'Yellowstone, MT' , '30113' : 'Yellowstone National Park, MT' , '31000' : 'NEBRASKA' , '31001' : 'Adams, NE' , '31003' : 'Antelope, NE' , '31005' : 'Arthur, NE' , '31007' : 'Banner, NE' , '31009' : 'Blaine, NE' , '31011' : 'Boone, NE' , '31013' : 'Box Butte, NE' , '31015' : 'Boyd, NE' , '31017' : 'Brown, NE' , '31019' : 'Buffalo, NE' , '31021' : 'Burt, NE' , '31023' : 'Butler, NE' , '31025' : 'Cass, NE' , '31027' : 'Cedar, NE' , '31029' : 'Chase, NE' , '31031' : 'Cherry, NE' , '31033' : 'Cheyenne, NE' , '31035' : 'Clay, NE' , '31037' : 'Colfax, NE' , '31039' : 'Cuming, NE' , '31041' : 'Custer, NE' , '31043' : 'Dakota, NE' , '31045' : 'Dawes, NE' , '31047' : 'Dawson, NE' , '31049' : 'Deuel, NE' , '31051' : 'Dixon, NE' , '31053' : 'Dodge, NE' , '31055' : 'Douglas, NE' , '31057' : 'Dundy, NE' , '31059' : 'Fillmore, NE' , '31061' : 'Franklin, NE' , '31063' : 'Frontier, NE' , '31065' : 'Furnas, NE' , '31067' : 'Gage, NE' , '31069' : 'Garden, NE' , '31071' : 'Garfield, NE' , '31073' : 'Gosper, NE' , '31075' : 'Grant, NE' , '31077' : 'Greeley, NE' , '31079' : 'Hall, NE' , '31081' : 'Hamilton, NE' , '31083' : 'Harlan, NE' , '31085' : 'Hayes, NE' , '31087' : 'Hitchcock, NE' , '31089' : 'Holt, NE' , '31091' : 'Hooker, NE' , '31093' : 'Howard, NE' , '31095' : 'Jefferson, NE' , '31097' : 'Johnson, NE' , '31099' : 'Kearney, NE' , '31101' : 'Keith, NE' , '31103' : 'Keya Paha, NE' , '31105' : 'Kimball, NE' , '31107' : 'Knox, NE' , '31109' : 'Lancaster, NE' , '31111' : 'Lincoln, NE' , '31113' : 'Logan, NE' , '31115' : 'Loup, NE' , '31117' : 'McPherson, NE' , '31119' : 'Madison, NE' , '31121' : 'Merrick, NE' , '31123' : 'Morrill, NE' , '31125' : 'Nance, NE' , '31127' : 'Nemaha, NE' , '31129' : 'Nuckolls, NE' , '31131' : 'Otoe, NE' , '31133' : 'Pawnee, NE' , '31135' : 'Perkins, NE' , '31137' : 'Phelps, NE' , '31139' : 'Pierce, NE' , '31141' : 'Platte, NE' , '31143' : 'Polk, NE' , '31145' : 'Red Willow, NE' , '31147' : 'Richardson, NE' , '31149' : 'Rock, NE' , '31151' : 'Saline, NE' , '31153' : 'Sarpy, NE' , '31155' : 'Saunders, NE' , '31157' : 'Scotts Bluff, NE' , '31159' : 'Seward, NE' , '31161' : 'Sheridan, NE' , '31163' : 'Sherman, NE' , '31165' : 'Sioux, NE' , '31167' : 'Stanton, NE' , '31169' : 'Thayer, NE' , '31171' : 'Thomas, NE' , '31173' : 'Thurston, NE' , '31175' : 'Valley, NE' , '31177' : 'Washington, NE' , '31179' : 'Wayne, NE' , '31181' : 'Webster, NE' , '31183' : 'Wheeler, NE' , '31185' : 'York, NE' , '32000' : 'NEVADA' , '32001' : 'Churchill, NV' , '32003' : 'Clark, NV' , '32005' : 'Douglas, NV' , '32007' : 'Elko, NV' , '32009' : 'Esmeralda, NV' , '32011' : 'Eureka, NV' , '32013' : 'Humboldt, NV' , '32015' : 'Lander, NV' , '32017' : 'Lincoln, NV' , '32019' : 'Lyon, NV' , '32021' : 'Mineral, NV' , '32023' : 'Nye, NV' , '32027' : 'Pershing, NV' , '32029' : 'Storey, NV' , '32031' : 'Washoe, NV' , '32033' : 'White Pine, NV' , '32510' : 'Carson City, NV' , '33000' : 'NEW HAMPSHIRE' , '33001' : 'Belknap, NH' , '33003' : 'Carroll, NH' , '33005' : 'Cheshire, NH' , '33007' : 'Coos, NH' , '33009' : 'Grafton, NH' , '33011' : 'Hillsborough, NH' , '33013' : 'Merrimack, NH' , '33015' : 'Rockingham, NH' , '33017' : 'Strafford, NH' , '33019' : 'Sullivan, NH' , '34000' : 'NEW JERSEY' , '34001' : 'Atlantic, NJ' , '34003' : 'Bergen, NJ' , '34005' : 'Burlington, NJ' , '34007' : 'Camden, NJ' , '34009' : 'Cape May, NJ' , '34011' : 'Cumberland, NJ' , '34013' : 'Essex, NJ' , '34015' : 'Gloucester, NJ' , '34017' : 'Hudson, NJ' , '34019' : 'Hunterdon, NJ' , '34021' : 'Mercer, NJ' , '34023' : 'Middlesex, NJ' , '34025' : 'Monmouth, NJ' , '34027' : 'Morris, NJ' , '34029' : 'Ocean, NJ' , '34031' : 'Passaic, NJ' , '34033' : 'Salem, NJ' , '34035' : 'Somerset, NJ' , '34037' : 'Sussex, NJ' , '34039' : 'Union, NJ' , '34041' : 'Warren, NJ' , '35000' : 'NEW MEXICO' , '35001' : 'Bernalillo, NM' , '35003' : 'Catron, NM' , '35005' : 'Chaves, NM' , '35006' : 'Cibola, NM' , '35007' : 'Colfax, NM' , '35009' : 'Curry, NM' , '35011' : 'De Baca, NM' , '35013' : 'Dona Ana, NM' , '35015' : 'Eddy, NM' , '35017' : 'Grant, NM' , '35019' : 'Guadalupe, NM' , '35021' : 'Harding, NM' , '35023' : 'Hidalgo, NM' , '35025' : 'Lea, NM' , '35027' : 'Lincoln, NM' , '35028' : 'Los Alamos, NM' , '35029' : 'Luna, NM' , '35031' : 'McKinley, NM' , '35033' : 'Mora, NM' , '35035' : 'Otero, NM' , '35037' : 'Quay, NM' , '35039' : 'Rio Arriba, NM' , '35041' : 'Roosevelt, NM' , '35043' : 'Sandoval, NM' , '35045' : 'San Juan, NM' , '35047' : 'San Miguel, NM' , '35049' : 'Santa Fe, NM' , '35051' : 'Sierra, NM' , '35053' : 'Socorro, NM' , '35055' : 'Taos, NM' , '35057' : 'Torrance, NM' , '35059' : 'Union, NM' , '35061' : 'Valencia, NM' , '36000' : 'NEW YORK' , '36001' : 'Albany, NY' , '36003' : 'Allegany, NY' , '36005' : 'Bronx, NY' , '36007' : 'Broome, NY' , '36009' : 'Cattaraugus, NY' , '36011' : 'Cayuga, NY' , '36013' : 'Chautauqua, NY' , '36015' : 'Chemung, NY' , '36017' : 'Chenango, NY' , '36019' : 'Clinton, NY' , '36021' : 'Columbia, NY' , '36023' : 'Cortland, NY' , '36025' : 'Delaware, NY' , '36027' : 'Dutchess, NY' , '36029' : 'Erie, NY' , '36031' : 'Essex, NY' , '36033' : 'Franklin, NY' , '36035' : 'Fulton, NY' , '36037' : 'Genesee, NY' , '36039' : 'Greene, NY' , '36041' : 'Hamilton, NY' , '36043' : 'Herkimer, NY' , '36045' : 'Jefferson, NY' , '36047' : 'Kings, NY' , '36049' : 'Lewis, NY' , '36051' : 'Livingston, NY' , '36053' : 'Madison, NY' , '36055' : 'Monroe, NY' , '36057' : 'Montgomery, NY' , '36059' : 'Nassau, NY' , '36061' : 'New York, NY' , '36063' : 'Niagara, NY' , '36065' : 'Oneida, NY' , '36067' : 'Onondaga, NY' , '36069' : 'Ontario, NY' , '36071' : 'Orange, NY' , '36073' : 'Orleans, NY' , '36075' : 'Oswego, NY' , '36077' : 'Otsego, NY' , '36079' : 'Putnam, NY' , '36081' : 'Queens, NY' , '36083' : 'Rensselaer, NY' , '36085' : 'Richmond, NY' , '36087' : 'Rockland, NY' , '36089' : 'St. Lawrence, NY' , '36091' : 'Saratoga, NY' , '36093' : 'Schenectady, NY' , '36095' : 'Schoharie, NY' , '36097' : 'Schuyler, NY' , '36099' : 'Seneca, NY' , '36101' : 'Steuben, NY' , '36103' : 'Suffolk, NY' , '36105' : 'Sullivan, NY' , '36107' : 'Tioga, NY' , '36109' : 'Tompkins, NY' , '36111' : 'Ulster, NY' , '36113' : 'Warren, NY' , '36115' : 'Washington, NY' , '36117' : 'Wayne, NY' , '36119' : 'Westchester, NY' , '36121' : 'Wyoming, NY' , '36123' : 'Yates, NY' , '37000' : 'NORTH CAROLINA' , '37001' : 'Alamance, NC' , '37003' : 'Alexander, NC' , '37005' : 'Alleghany, NC' , '37007' : 'Anson, NC' , '37009' : 'Ashe, NC' , '37011' : 'Avery, NC' , '37013' : 'Beaufort, NC' , '37015' : 'Bertie, NC' , '37017' : 'Bladen, NC' , '37019' : 'Brunswick, NC' , '37021' : 'Buncombe, NC' , '37023' : 'Burke, NC' , '37025' : 'Cabarrus, NC' , '37027' : 'Caldwell, NC' , '37029' : 'Camden, NC' , '37031' : 'Carteret, NC' , '37033' : 'Caswell, NC' , '37035' : 'Catawba, NC' , '37037' : 'Chatham, NC' , '37039' : 'Cherokee, NC' , '37041' : 'Chowan, NC' , '37043' : 'Clay, NC' , '37045' : 'Cleveland, NC' , '37047' : 'Columbus, NC' , '37049' : 'Craven, NC' , '37051' : 'Cumberland, NC' , '37053' : 'Currituck, NC' , '37055' : 'Dare, NC' , '37057' : 'Davidson, NC' , '37059' : 'Davie, NC' , '37061' : 'Duplin, NC' , '37063' : 'Durham, NC' , '37065' : 'Edgecombe, NC' , '37067' : 'Forsyth, NC' , '37069' : 'Franklin, NC' , '37071' : 'Gaston, NC' , '37073' : 'Gates, NC' , '37075' : 'Graham, NC' , '37077' : 'Granville, NC' , '37079' : 'Greene, NC' , '37081' : 'Guilford, NC' , '37083' : 'Halifax, NC' , '37085' : 'Harnett, NC' , '37087' : 'Haywood, NC' , '37089' : 'Henderson, NC' , '37091' : 'Hertford, NC' , '37093' : 'Hoke, NC' , '37095' : 'Hyde, NC' , '37097' : 'Iredell, NC' , '37099' : 'Jackson, NC' , '37101' : 'Johnston, NC' , '37103' : 'Jones, NC' , '37105' : 'Lee, NC' , '37107' : 'Lenoir, NC' , '37109' : 'Lincoln, NC' , '37111' : 'McDowell, NC' , '37113' : 'Macon, NC' , '37115' : 'Madison, NC' , '37117' : 'Martin, NC' , '37119' : 'Mecklenburg, NC' , '37121' : 'Mitchell, NC' , '37123' : 'Montgomery, NC' , '37125' : 'Moore, NC' , '37127' : 'Nash, NC' , '37129' : 'New Hanover, NC' , '37131' : 'Northampton, NC' , '37133' : 'Onslow, NC' , '37135' : 'Orange, NC' , '37137' : 'Pamlico, NC' , '37139' : 'Pasquotank, NC' , '37141' : 'Pender, NC' , '37143' : 'Perquimans, NC' , '37145' : 'Person, NC' , '37147' : 'Pitt, NC' , '37149' : 'Polk, NC' , '37151' : 'Randolph, NC' , '37153' : 'Richmond, NC' , '37155' : 'Robeson, NC' , '37157' : 'Rockingham, NC' , '37159' : 'Rowan, NC' , '37161' : 'Rutherford, NC' , '37163' : 'Sampson, NC' , '37165' : 'Scotland, NC' , '37167' : 'Stanly, NC' , '37169' : 'Stokes, NC' , '37171' : 'Surry, NC' , '37173' : 'Swain, NC' , '37175' : 'Transylvania, NC' , '37177' : 'Tyrrell, NC' , '37179' : 'Union, NC' , '37181' : 'Vance, NC' , '37183' : 'Wake, NC' , '37185' : 'Warren, NC' , '37187' : 'Washington, NC' , '37189' : 'Watauga, NC' , '37191' : 'Wayne, NC' , '37193' : 'Wilkes, NC' , '37195' : 'Wilson, NC' , '37197' : 'Yadkin, NC' , '37199' : 'Yancey, NC' , '38000' : 'NORTH DAKOTA' , '38001' : 'Adams, ND' , '38003' : 'Barnes, ND' , '38005' : 'Benson, ND' , '38007' : 'Billings, ND' , '38009' : 'Bottineau, ND' , '38011' : 'Bowman, ND' , '38013' : 'Burke, ND' , '38015' : 'Burleigh, ND' , '38017' : 'Cass, ND' , '38019' : 'Cavalier, ND' , '38021' : 'Dickey, ND' , '38023' : 'Divide, ND' , '38025' : 'Dunn, ND' , '38027' : 'Eddy, ND' , '38029' : 'Emmons, ND' , '38031' : 'Foster, ND' , '38033' : 'Golden Valley, ND' , '38035' : 'Grand Forks, ND' , '38037' : 'Grant, ND' , '38039' : 'Griggs, ND' , '38041' : 'Hettinger, ND' , '38043' : 'Kidder, ND' , '38045' : 'La Moure, ND' , '38047' : 'Logan, ND' , '38049' : 'McHenry, ND' , '38051' : 'McIntosh, ND' , '38053' : 'McKenzie, ND' , '38055' : 'McLean, ND' , '38057' : 'Mercer, ND' , '38059' : 'Morton, ND' , '38061' : 'Mountrail, ND' , '38063' : 'Nelson, ND' , '38065' : 'Oliver, ND' , '38067' : 'Pembina, ND' , '38069' : 'Pierce, ND' , '38071' : 'Ramsey, ND' , '38073' : 'Ransom, ND' , '38075' : 'Renville, ND' , '38077' : 'Richland, ND' , '38079' : 'Rolette, ND' , '38081' : 'Sargent, ND' , '38083' : 'Sheridan, ND' , '38085' : 'Sioux, ND' , '38087' : 'Slope, ND' , '38089' : 'Stark, ND' , '38091' : 'Steele, ND' , '38093' : 'Stutsman, ND' , '38095' : 'Towner, ND' , '38097' : 'Traill, ND' , '38099' : 'Walsh, ND' , '38101' : 'Ward, ND' , '38103' : 'Wells, ND' , '38105' : 'Williams, ND' , '39000' : 'OHIO' , '39001' : 'Adams, OH' , '39003' : 'Allen, OH' , '39005' : 'Ashland, OH' , '39007' : 'Ashtabula, OH' , '39009' : 'Athens, OH' , '39011' : 'Auglaize, OH' , '39013' : 'Belmont, OH' , '39015' : 'Brown, OH' , '39017' : 'Butler, OH' , '39019' : 'Carroll, OH' , '39021' : 'Champaign, OH' , '39023' : 'Clark, OH' , '39025' : 'Clermont, OH' , '39027' : 'Clinton, OH' , '39029' : 'Columbiana, OH' , '39031' : 'Coshocton, OH' , '39033' : 'Crawford, OH' , '39035' : 'Cuyahoga, OH' , '39037' : 'Darke, OH' , '39039' : 'Defiance, OH' , '39041' : 'Delaware, OH' , '39043' : 'Erie, OH' , '39045' : 'Fairfield, OH' , '39047' : 'Fayette, OH' , '39049' : 'Franklin, OH' , '39051' : 'Fulton, OH' , '39053' : 'Gallia, OH' , '39055' : 'Geauga, OH' , '39057' : 'Greene, OH' , '39059' : 'Guernsey, OH' , '39061' : 'Hamilton, OH' , '39063' : 'Hancock, OH' , '39065' : 'Hardin, OH' , '39067' : 'Harrison, OH' , '39069' : 'Henry, OH' , '39071' : 'Highland, OH' , '39073' : 'Hocking, OH' , '39075' : 'Holmes, OH' , '39077' : 'Huron, OH' , '39079' : 'Jackson, OH' , '39081' : 'Jefferson, OH' , '39083' : 'Knox, OH' , '39085' : 'Lake, OH' , '39087' : 'Lawrence, OH' , '39089' : 'Licking, OH' , '39091' : 'Logan, OH' , '39093' : 'Lorain, OH' , '39095' : 'Lucas, OH' , '39097' : 'Madison, OH' , '39099' : 'Mahoning, OH' , '39101' : 'Marion, OH' , '39103' : 'Medina, OH' , '39105' : 'Meigs, OH' , '39107' : 'Mercer, OH' , '39109' : 'Miami, OH' , '39111' : 'Monroe, OH' , '39113' : 'Montgomery, OH' , '39115' : 'Morgan, OH' , '39117' : 'Morrow, OH' , '39119' : 'Muskingum, OH' , '39121' : 'Noble, OH' , '39123' : 'Ottawa, OH' , '39125' : 'Paulding, OH' , '39127' : 'Perry, OH' , '39129' : 'Pickaway, OH' , '39131' : 'Pike, OH' , '39133' : 'Portage, OH' , '39135' : 'Preble, OH' , '39137' : 'Putnam, OH' , '39139' : 'Richland, OH' , '39141' : 'Ross, OH' , '39143' : 'Sandusky, OH' , '39145' : 'Scioto, OH' , '39147' : 'Seneca, OH' , '39149' : 'Shelby, OH' , '39151' : 'Stark, OH' , '39153' : 'Summit, OH' , '39155' : 'Trumbull, OH' , '39157' : 'Tuscarawas, OH' , '39159' : 'Union, OH' , '39161' : 'Van Wert, OH' , '39163' : 'Vinton, OH' , '39165' : 'Warren, OH' , '39167' : 'Washington, OH' , '39169' : 'Wayne, OH' , '39171' : 'Williams, OH' , '39173' : 'Wood, OH' , '39175' : 'Wyandot, OH' , '40000' : 'OKLAHOMA' , '40001' : 'Adair, OK' , '40003' : 'Alfalfa, OK' , '40005' : 'Atoka, OK' , '40007' : 'Beaver, OK' , '40009' : 'Beckham, OK' , '40011' : 'Blaine, OK' , '40013' : 'Bryan, OK' , '40015' : 'Caddo, OK' , '40017' : 'Canadian, OK' , '40019' : 'Carter, OK' , '40021' : 'Cherokee, OK' , '40023' : 'Choctaw, OK' , '40025' : 'Cimarron, OK' , '40027' : 'Cleveland, OK' , '40029' : 'Coal, OK' , '40031' : 'Comanche, OK' , '40033' : 'Cotton, OK' , '40035' : 'Craig, OK' , '40037' : 'Creek, OK' , '40039' : 'Custer, OK' , '40041' : 'Delaware, OK' , '40043' : 'Dewey, OK' , '40045' : 'Ellis, OK' , '40047' : 'Garfield, OK' , '40049' : 'Garvin, OK' , '40051' : 'Grady, OK' , '40053' : 'Grant, OK' , '40055' : 'Greer, OK' , '40057' : 'Harmon, OK' , '40059' : 'Harper, OK' , '40061' : 'Haskell, OK' , '40063' : 'Hughes, OK' , '40065' : 'Jackson, OK' , '40067' : 'Jefferson, OK' , '40069' : 'Johnston, OK' , '40071' : 'Kay, OK' , '40073' : 'Kingfisher, OK' , '40075' : 'Kiowa, OK' , '40077' : 'Latimer, OK' , '40079' : 'Le Flore, OK' , '40081' : 'Lincoln, OK' , '40083' : 'Logan, OK' , '40085' : 'Love, OK' , '40087' : 'McClain, OK' , '40089' : 'McCurtain, OK' , '40091' : 'McIntosh, OK' , '40093' : 'Major, OK' , '40095' : 'Marshall, OK' , '40097' : 'Mayes, OK' , '40099' : 'Murray, OK' , '40101' : 'Muskogee, OK' , '40103' : 'Noble, OK' , '40105' : 'Nowata, OK' , '40107' : 'Okfuskee, OK' , '40109' : 'Oklahoma, OK' , '40111' : 'Okmulgee, OK' , '40113' : 'Osage, OK' , '40115' : 'Ottawa, OK' , '40117' : 'Pawnee, OK' , '40119' : 'Payne, OK' , '40121' : 'Pittsburg, OK' , '40123' : 'Pontotoc, OK' , '40125' : 'Pottawatomie, OK' , '40127' : 'Pushmataha, OK' , '40129' : 'Roger Mills, OK' , '40131' : 'Rogers, OK' , '40133' : 'Seminole, OK' , '40135' : 'Sequoyah, OK' , '40137' : 'Stephens, OK' , '40139' : 'Texas, OK' , '40141' : 'Tillman, OK' , '40143' : 'Tulsa, OK' , '40145' : 'Wagoner, OK' , '40147' : 'Washington, OK' , '40149' : 'Washita, OK' , '40151' : 'Woods, OK' , '40153' : 'Woodward, OK' , '41000' : 'OREGON' , '41001' : 'Baker, OR' , '41003' : 'Benton, OR' , '41005' : 'Clackamas, OR' , '41007' : 'Clatsop, OR' , '41009' : 'Columbia, OR' , '41011' : 'Coos, OR' , '41013' : 'Crook, OR' , '41015' : 'Curry, OR' , '41017' : 'Deschutes, OR' , '41019' : 'Douglas, OR' , '41021' : 'Gilliam, OR' , '41023' : 'Grant, OR' , '41025' : 'Harney, OR' , '41027' : 'Hood River, OR' , '41029' : 'Jackson, OR' , '41031' : 'Jefferson, OR' , '41033' : 'Josephine, OR' , '41035' : 'Klamath, OR' , '41037' : 'Lake, OR' , '41039' : 'Lane, OR' , '41041' : 'Lincoln, OR' , '41043' : 'Linn, OR' , '41045' : 'Malheur, OR' , '41047' : 'Marion, OR' , '41049' : 'Morrow, OR' , '41051' : 'Multnomah, OR' , '41053' : 'Polk, OR' , '41055' : 'Sherman, OR' , '41057' : 'Tillamook, OR' , '41059' : 'Umatilla, OR' , '41061' : 'Union, OR' , '41063' : 'Wallowa, OR' , '41065' : 'Wasco, OR' , '41067' : 'Washington, OR' , '41069' : 'Wheeler, OR' , '41071' : 'Yamhill, OR' , '42000' : 'PENNSYLVANIA' , '42001' : 'Adams, PA' , '42003' : 'Allegheny, PA' , '42005' : 'Armstrong, PA' , '42007' : 'Beaver, PA' , '42009' : 'Bedford, PA' , '42011' : 'Berks, PA' , '42013' : 'Blair, PA' , '42015' : 'Bradford, PA' , '42017' : 'Bucks, PA' , '42019' : 'Butler, PA' , '42021' : 'Cambria, PA' , '42023' : 'Cameron, PA' , '42025' : 'Carbon, PA' , '42027' : 'Centre, PA' , '42029' : 'Chester, PA' , '42031' : 'Clarion, PA' , '42033' : 'Clearfield, PA' , '42035' : 'Clinton, PA' , '42037' : 'Columbia, PA' , '42039' : 'Crawford, PA' , '42041' : 'Cumberland, PA' , '42043' : 'Dauphin, PA' , '42045' : 'Delaware, PA' , '42047' : 'Elk, PA' , '42049' : 'Erie, PA' , '42051' : 'Fayette, PA' , '42053' : 'Forest, PA' , '42055' : 'Franklin, PA' , '42057' : 'Fulton, PA' , '42059' : 'Greene, PA' , '42061' : 'Huntingdon, PA' , '42063' : 'Indiana, PA' , '42065' : 'Jefferson, PA' , '42067' : 'Juniata, PA' , '42069' : 'Lackawanna, PA' , '42071' : 'Lancaster, PA' , '42073' : 'Lawrence, PA' , '42075' : 'Lebanon, PA' , '42077' : 'Lehigh, PA' , '42079' : 'Luzerne, PA' , '42081' : 'Lycoming, PA' , '42083' : 'McKean, PA' , '42085' : 'Mercer, PA' , '42087' : 'Mifflin, PA' , '42089' : 'Monroe, PA' , '42091' : 'Montgomery, PA' , '42093' : 'Montour, PA' , '42095' : 'Northampton, PA' , '42097' : 'Northumberland, PA' , '42099' : 'Perry, PA' , '42101' : 'Philadelphia, PA' , '42103' : 'Pike, PA' , '42105' : 'Potter, PA' , '42107' : 'Schuylkill, PA' , '42109' : 'Snyder, PA' , '42111' : 'Somerset, PA' , '42113' : 'Sullivan, PA' , '42115' : 'Susquehanna, PA' , '42117' : 'Tioga, PA' , '42119' : 'Union, PA' , '42121' : 'Venango, PA' , '42123' : 'Warren, PA' , '42125' : 'Washington, PA' , '42127' : 'Wayne, PA' , '42129' : 'Westmoreland, PA' , '42131' : 'Wyoming, PA' , '42133' : 'York, PA' , '44000' : 'RHODE ISLAND' , '44001' : 'Bristol, RI' , '44003' : 'Kent, RI' , '44005' : 'Newport, RI' , '44007' : 'Providence, RI' , '44009' : 'Washington, RI' , '45000' : 'SOUTH CAROLINA' , '45001' : 'Abbeville, SC' , '45003' : 'Aiken, SC' , '45005' : 'Allendale, SC' , '45007' : 'Anderson, SC' , '45009' : 'Bamberg, SC' , '45011' : 'Barnwell, SC' , '45013' : 'Beaufort, SC' , '45015' : 'Berkeley, SC' , '45017' : 'Calhoun, SC' , '45019' : 'Charleston, SC' , '45021' : 'Cherokee, SC' , '45023' : 'Chester, SC' , '45025' : 'Chesterfield, SC' , '45027' : 'Clarendon, SC' , '45029' : 'Colleton, SC' , '45031' : 'Darlington, SC' , '45033' : 'Dillon, SC' , '45035' : 'Dorchester, SC' , '45037' : 'Edgefield, SC' , '45039' : 'Fairfield, SC' , '45041' : 'Florence, SC' , '45043' : 'Georgetown, SC' , '45045' : 'Greenville, SC' , '45047' : 'Greenwood, SC' , '45049' : 'Hampton, SC' , '45051' : 'Horry, SC' , '45053' : 'Jasper, SC' , '45055' : 'Kershaw, SC' , '45057' : 'Lancaster, SC' , '45059' : 'Laurens, SC' , '45061' : 'Lee, SC' , '45063' : 'Lexington, SC' , '45065' : 'McCormick, SC' , '45067' : 'Marion, SC' , '45069' : 'Marlboro, SC' , '45071' : 'Newberry, SC' , '45073' : 'Oconee, SC' , '45075' : 'Orangeburg, SC' , '45077' : 'Pickens, SC' , '45079' : 'Richland, SC' , '45081' : 'Saluda, SC' , '45083' : 'Spartanburg, SC' , '45085' : 'Sumter, SC' , '45087' : 'Union, SC' , '45089' : 'Williamsburg, SC' , '45091' : 'York, SC' , '46000' : 'SOUTH DAKOTA' , '46003' : 'Aurora, SD' , '46005' : 'Beadle, SD' , '46007' : 'Bennett, SD' , '46009' : 'Bon Homme, SD' , '46011' : 'Brookings, SD' , '46013' : 'Brown, SD' , '46015' : 'Brule, SD' , '46017' : 'Buffalo, SD' , '46019' : 'Butte, SD' , '46021' : 'Campbell, SD' , '46023' : 'Charles Mix, SD' , '46025' : 'Clark, SD' , '46027' : 'Clay, SD' , '46029' : 'Codington, SD' , '46031' : 'Corson, SD' , '46033' : 'Custer, SD' , '46035' : 'Davison, SD' , '46037' : 'Day, SD' , '46039' : 'Deuel, SD' , '46041' : 'Dewey, SD' , '46043' : 'Douglas, SD' , '46045' : 'Edmunds, SD' , '46047' : 'Fall River, SD' , '46049' : 'Faulk, SD' , '46051' : 'Grant, SD' , '46053' : 'Gregory, SD' , '46055' : 'Haakon, SD' , '46057' : 'Hamlin, SD' , '46059' : 'Hand, SD' , '46061' : 'Hanson, SD' , '46063' : 'Harding, SD' , '46065' : 'Hughes, SD' , '46067' : 'Hutchinson, SD' , '46069' : 'Hyde, SD' , '46071' : 'Jackson, SD' , '46073' : 'Jerauld, SD' , '46075' : 'Jones, SD' , '46077' : 'Kingsbury, SD' , '46079' : 'Lake, SD' , '46081' : 'Lawrence, SD' , '46083' : 'Lincoln, SD' , '46085' : 'Lyman, SD' , '46087' : 'McCook, SD' , '46089' : 'McPherson, SD' , '46091' : 'Marshall, SD' , '46093' : 'Meade, SD' , '46095' : 'Mellette, SD' , '46097' : 'Miner, SD' , '46099' : 'Minnehaha, SD' , '46101' : 'Moody, SD' , '46102' : 'Oglala Lakota, SD' , '46103' : 'Pennington, SD' , '46105' : 'Perkins, SD' , '46107' : 'Potter, SD' , '46109' : 'Roberts, SD' , '46111' : 'Sanborn, SD' , '46113' : 'Shannon, SD' , '46115' : 'Spink, SD' , '46117' : 'Stanley, SD' , '46119' : 'Sully, SD' , '46121' : 'Todd, SD' , '46123' : 'Tripp, SD' , '46125' : 'Turner, SD' , '46127' : 'Union, SD' , '46129' : 'Walworth, SD' , '46135' : 'Yankton, SD' , '46137' : 'Ziebach, SD' , '47000' : 'TENNESSEE' , '47001' : 'Anderson, TN' , '47003' : 'Bedford, TN' , '47005' : 'Benton, TN' , '47007' : 'Bledsoe, TN' , '47009' : 'Blount, TN' , '47011' : 'Bradley, TN' , '47013' : 'Campbell, TN' , '47015' : 'Cannon, TN' , '47017' : 'Carroll, TN' , '47019' : 'Carter, TN' , '47021' : 'Cheatham, TN' , '47023' : 'Chester, TN' , '47025' : 'Claiborne, TN' , '47027' : 'Clay, TN' , '47029' : 'Cocke, TN' , '47031' : 'Coffee, TN' , '47033' : 'Crockett, TN' , '47035' : 'Cumberland, TN' , '47037' : 'Davidson, TN' , '47039' : 'Decatur, TN' , '47041' : 'DeKalb, TN' , '47043' : 'Dickson, TN' , '47045' : 'Dyer, TN' , '47047' : 'Fayette, TN' , '47049' : 'Fentress, TN' , '47051' : 'Franklin, TN' , '47053' : 'Gibson, TN' , '47055' : 'Giles, TN' , '47057' : 'Grainger, TN' , '47059' : 'Greene, TN' , '47061' : 'Grundy, TN' , '47063' : 'Hamblen, TN' , '47065' : 'Hamilton, TN' , '47067' : 'Hancock, TN' , '47069' : 'Hardeman, TN' , '47071' : 'Hardin, TN' , '47073' : 'Hawkins, TN' , '47075' : 'Haywood, TN' , '47077' : 'Henderson, TN' , '47079' : 'Henry, TN' , '47081' : 'Hickman, TN' , '47083' : 'Houston, TN' , '47085' : 'Humphreys, TN' , '47087' : 'Jackson, TN' , '47089' : 'Jefferson, TN' , '47091' : 'Johnson, TN' , '47093' : 'Knox, TN' , '47095' : 'Lake, TN' , '47097' : 'Lauderdale, TN' , '47099' : 'Lawrence, TN' , '47101' : 'Lewis, TN' , '47103' : 'Lincoln, TN' , '47105' : 'Loudon, TN' , '47107' : 'McMinn, TN' , '47109' : 'McNairy, TN' , '47111' : 'Macon, TN' , '47113' : 'Madison, TN' , '47115' : 'Marion, TN' , '47117' : 'Marshall, TN' , '47119' : 'Maury, TN' , '47121' : 'Meigs, TN' , '47123' : 'Monroe, TN' , '47125' : 'Montgomery, TN' , '47127' : 'Moore, TN' , '47129' : 'Morgan, TN' , '47131' : 'Obion, TN' , '47133' : 'Overton, TN' , '47135' : 'Perry, TN' , '47137' : 'Pickett, TN' , '47139' : 'Polk, TN' , '47141' : 'Putnam, TN' , '47143' : 'Rhea, TN' , '47145' : 'Roane, TN' , '47147' : 'Robertson, TN' , '47149' : 'Rutherford, TN' , '47151' : 'Scott, TN' , '47153' : 'Sequatchie, TN' , '47155' : 'Sevier, TN' , '47157' : 'Shelby, TN' , '47159' : 'Smith, TN' , '47161' : 'Stewart, TN' , '47163' : 'Sullivan, TN' , '47165' : 'Sumner, TN' , '47167' : 'Tipton, TN' , '47169' : 'Trousdale, TN' , '47171' : 'Unicoi, TN' , '47173' : 'Union, TN' , '47175' : 'Van Buren, TN' , '47177' : 'Warren, TN' , '47179' : 'Washington, TN' , '47181' : 'Wayne, TN' , '47183' : 'Weakley, TN' , '47185' : 'White, TN' , '47187' : 'Williamson, TN' , '47189' : 'Wilson, TN' , '48000' : 'TEXAS' , '48001' : 'Anderson, TX' , '48003' : 'Andrews, TX' , '48005' : 'Angelina, TX' , '48007' : 'Aransas, TX' , '48009' : 'Archer, TX' , '48011' : 'Armstrong, TX' , '48013' : 'Atascosa, TX' , '48015' : 'Austin, TX' , '48017' : 'Bailey, TX' , '48019' : 'Bandera, TX' , '48021' : 'Bastrop, TX' , '48023' : 'Baylor, TX' , '48025' : 'Bee, TX' , '48027' : 'Bell, TX' , '48029' : 'Bexar, TX' , '48031' : 'Blanco, TX' , '48033' : 'Borden, TX' , '48035' : 'Bosque, TX' , '48037' : 'Bowie, TX' , '48039' : 'Brazoria, TX' , '48041' : 'Brazos, TX' , '48043' : 'Brewster, TX' , '48045' : 'Briscoe, TX' , '48047' : 'Brooks, TX' , '48049' : 'Brown, TX' , '48051' : 'Burleson, TX' , '48053' : 'Burnet, TX' , '48055' : 'Caldwell, TX' , '48057' : 'Calhoun, TX' , '48059' : 'Callahan, TX' , '48061' : 'Cameron, TX' , '48063' : 'Camp, TX' , '48065' : 'Carson, TX' , '48067' : 'Cass, TX' , '48069' : 'Castro, TX' , '48071' : 'Chambers, TX' , '48073' : 'Cherokee, TX' , '48075' : 'Childress, TX' , '48077' : 'Clay, TX' , '48079' : 'Cochran, TX' , '48081' : 'Coke, TX' , '48083' : 'Coleman, TX' , '48085' : 'Collin, TX' , '48087' : 'Collingsworth, TX' , '48089' : 'Colorado, TX' , '48091' : 'Comal, TX' , '48093' : 'Comanche, TX' , '48095' : 'Concho, TX' , '48097' : 'Cooke, TX' , '48099' : 'Coryell, TX' , '48101' : 'Cottle, TX' , '48103' : 'Crane, TX' , '48105' : 'Crockett, TX' , '48107' : 'Crosby, TX' , '48109' : 'Culberson, TX' , '48111' : 'Dallam, TX' , '48113' : 'Dallas, TX' , '48115' : 'Dawson, TX' , '48117' : 'Deaf Smith, TX' , '48119' : 'Delta, TX' , '48121' : 'Denton, TX' , '48123' : 'De Witt, TX' , '48125' : 'Dickens, TX' , '48127' : 'Dimmit, TX' , '48129' : 'Donley, TX' , '48131' : 'Duval, TX' , '48133' : 'Eastland, TX' , '48135' : 'Ector, TX' , '48137' : 'Edwards, TX' , '48139' : 'Ellis, TX' , '48141' : 'El Paso, TX' , '48143' : 'Erath, TX' , '48145' : 'Falls, TX' , '48147' : 'Fannin, TX' , '48149' : 'Fayette, TX' , '48151' : 'Fisher, TX' , '48153' : 'Floyd, TX' , '48155' : 'Foard, TX' , '48157' : 'Fort Bend, TX' , '48159' : 'Franklin, TX' , '48161' : 'Freestone, TX' , '48163' : 'Frio, TX' , '48165' : 'Gaines, TX' , '48167' : 'Galveston, TX' , '48169' : 'Garza, TX' , '48171' : 'Gillespie, TX' , '48173' : 'Glasscock, TX' , '48175' : 'Goliad, TX' , '48177' : 'Gonzales, TX' , '48179' : 'Gray, TX' , '48181' : 'Grayson, TX' , '48183' : 'Gregg, TX' , '48185' : 'Grimes, TX' , '48187' : 'Guadalupe, TX' , '48189' : 'Hale, TX' , '48191' : 'Hall, TX' , '48193' : 'Hamilton, TX' , '48195' : 'Hansford, TX' , '48197' : 'Hardeman, TX' , '48199' : 'Hardin, TX' , '48201' : 'Harris, TX' , '48203' : 'Harrison, TX' , '48205' : 'Hartley, TX' , '48207' : 'Haskell, TX' , '48209' : 'Hays, TX' , '48211' : 'Hemphill, TX' , '48213' : 'Henderson, TX' , '48215' : 'Hidalgo, TX' , '48217' : 'Hill, TX' , '48219' : 'Hockley, TX' , '48221' : 'Hood, TX' , '48223' : 'Hopkins, TX' , '48225' : 'Houston, TX' , '48227' : 'Howard, TX' , '48229' : 'Hudspeth, TX' , '48231' : 'Hunt, TX' , '48233' : 'Hutchinson, TX' , '48235' : 'Irion, TX' , '48237' : 'Jack, TX' , '48239' : 'Jackson, TX' , '48241' : 'Jasper, TX' , '48243' : 'Jeff Davis, TX' , '48245' : 'Jefferson, TX' , '48247' : 'Jim Hogg, TX' , '48249' : 'Jim Wells, TX' , '48251' : 'Johnson, TX' , '48253' : 'Jones, TX' , '48255' : 'Karnes, TX' , '48257' : 'Kaufman, TX' , '48259' : 'Kendall, TX' , '48261' : 'Kenedy, TX' , '48263' : 'Kent, TX' , '48265' : 'Kerr, TX' , '48267' : 'Kimble, TX' , '48269' : 'King, TX' , '48271' : 'Kinney, TX' , '48273' : 'Kleberg, TX' , '48275' : 'Knox, TX' , '48277' : 'Lamar, TX' , '48279' : 'Lamb, TX' , '48281' : 'Lampasas, TX' , '48283' : 'La Salle, TX' , '48285' : 'Lavaca, TX' , '48287' : 'Lee, TX' , '48289' : 'Leon, TX' , '48291' : 'Liberty, TX' , '48293' : 'Limestone, TX' , '48295' : 'Lipscomb, TX' , '48297' : 'Live Oak, TX' , '48299' : 'Llano, TX' , '48301' : 'Loving, TX' , '48303' : 'Lubbock, TX' , '48305' : 'Lynn, TX' , '48307' : 'McCulloch, TX' , '48309' : 'McLennan, TX' , '48311' : 'McMullen, TX' , '48313' : 'Madison, TX' , '48315' : 'Marion, TX' , '48317' : 'Martin, TX' , '48319' : 'Mason, TX' , '48321' : 'Matagorda, TX' , '48323' : 'Maverick, TX' , '48325' : 'Medina, TX' , '48327' : 'Menard, TX' , '48329' : 'Midland, TX' , '48331' : 'Milam, TX' , '48333' : 'Mills, TX' , '48335' : 'Mitchell, TX' , '48337' : 'Montague, TX' , '48339' : 'Montgomery, TX' , '48341' : 'Moore, TX' , '48343' : 'Morris, TX' , '48345' : 'Motley, TX' , '48347' : 'Nacogdoches, TX' , '48349' : 'Navarro, TX' , '48351' : 'Newton, TX' , '48353' : 'Nolan, TX' , '48355' : 'Nueces, TX' , '48357' : 'Ochiltree, TX' , '48359' : 'Oldham, TX' , '48361' : 'Orange, TX' , '48363' : 'Palo Pinto, TX' , '48365' : 'Panola, TX' , '48367' : 'Parker, TX' , '48369' : 'Parmer, TX' , '48371' : 'Pecos, TX' , '48373' : 'Polk, TX' , '48375' : 'Potter, TX' , '48377' : 'Presidio, TX' , '48379' : 'Rains, TX' , '48381' : 'Randall, TX' , '48383' : 'Reagan, TX' , '48385' : 'Real, TX' , '48387' : 'Red River, TX' , '48389' : 'Reeves, TX' , '48391' : 'Refugio, TX' , '48393' : 'Roberts, TX' , '48395' : 'Robertson, TX' , '48397' : 'Rockwall, TX' , '48399' : 'Runnels, TX' , '48401' : 'Rusk, TX' , '48403' : 'Sabine, TX' , '48405' : 'San Augustine, TX' , '48407' : 'San Jacinto, TX' , '48409' : 'San Patricio, TX' , '48411' : 'San Saba, TX' , '48413' : 'Schleicher, TX' , '48415' : 'Scurry, TX' , '48417' : 'Shackelford, TX' , '48419' : 'Shelby, TX' , '48421' : 'Sherman, TX' , '48423' : 'Smith, TX' , '48425' : 'Somervell, TX' , '48427' : 'Starr, TX' , '48429' : 'Stephens, TX' , '48431' : 'Sterling, TX' , '48433' : 'Stonewall, TX' , '48435' : 'Sutton, TX' , '48437' : 'Swisher, TX' , '48439' : 'Tarrant, TX' , '48441' : 'Taylor, TX' , '48443' : 'Terrell, TX' , '48445' : 'Terry, TX' , '48447' : 'Throckmorton, TX' , '48449' : 'Titus, TX' , '48451' : 'Tom Green, TX' , '48453' : 'Travis, TX' , '48455' : 'Trinity, TX' , '48457' : 'Tyler, TX' , '48459' : 'Upshur, TX' , '48461' : 'Upton, TX' , '48463' : 'Uvalde, TX' , '48465' : 'Val Verde, TX' , '48467' : 'Van Zandt, TX' , '48469' : 'Victoria, TX' , '48471' : 'Walker, TX' , '48473' : 'Waller, TX' , '48475' : 'Ward, TX' , '48477' : 'Washington, TX' , '48479' : 'Webb, TX' , '48481' : 'Wharton, TX' , '48483' : 'Wheeler, TX' , '48485' : 'Wichita, TX' , '48487' : 'Wilbarger, TX' , '48489' : 'Willacy, TX' , '48491' : 'Williamson, TX' , '48493' : 'Wilson, TX' , '48495' : 'Winkler, TX' , '48497' : 'Wise, TX' , '48499' : 'Wood, TX' , '48501' : 'Yoakum, TX' , '48503' : 'Young, TX' , '48505' : 'Zapata, TX' , '48507' : 'Zavala, TX' , '49000' : 'UTAH' , '49001' : 'Beaver, UT' , '49003' : 'Box Elder, UT' , '49005' : 'Cache, UT' , '49007' : 'Carbon, UT' , '49009' : 'Daggett, UT' , '49011' : 'Davis, UT' , '49013' : 'Duchesne, UT' , '49015' : 'Emery, UT' , '49017' : 'Garfield, UT' , '49019' : 'Grand, UT' , '49021' : 'Iron, UT' , '49023' : 'Juab, UT' , '49025' : 'Kane, UT' , '49027' : 'Millard, UT' , '49029' : 'Morgan, UT' , '49031' : 'Piute, UT' , '49033' : 'Rich, UT' , '49035' : 'Salt Lake, UT' , '49037' : 'San Juan, UT' , '49039' : 'Sanpete, UT' , '49041' : 'Sevier, UT' , '49043' : 'Summit, UT' , '49045' : 'Tooele, UT' , '49047' : 'Uintah, UT' , '49049' : 'Utah, UT' , '49051' : 'Wasatch, UT' , '49053' : 'Washington, UT' , '49055' : 'Wayne, UT' , '49057' : 'Weber, UT' , '50000' : 'VERMONT' , '50001' : 'Addison, VT' , '50003' : 'Bennington, VT' , '50005' : 'Caledonia, VT' , '50007' : 'Chittenden, VT' , '50009' : 'Essex, VT' , '50011' : 'Franklin, VT' , '50013' : 'Grand Isle, VT' , '50015' : 'Lamoille, VT' , '50017' : 'Orange, VT' , '50019' : 'Orleans, VT' , '50021' : 'Rutland, VT' , '50023' : 'Washington, VT' , '50025' : 'Windham, VT' , '50027' : 'Windsor, VT' , '51000' : 'VIRGINIA' , '51001' : 'Accomack, VA' , '51003' : 'Albemarle, VA' , '51005' : 'Alleghany, VA' , '51007' : 'Amelia, VA' , '51009' : 'Amherst, VA' , '51011' : 'Appomattox, VA' , '51013' : 'Arlington, VA' , '51015' : 'Augusta, VA' , '51017' : 'Bath, VA' , '51019' : 'Bedford, VA' , '51021' : 'Bland, VA' , '51023' : 'Botetourt, VA' , '51025' : 'Brunswick, VA' , '51027' : 'Buchanan, VA' , '51029' : 'Buckingham, VA' , '51031' : 'Campbell, VA' , '51033' : 'Caroline, VA' , '51035' : 'Carroll, VA' , '51036' : 'Charles City, VA' , '51037' : 'Charlotte, VA' , '51041' : 'Chesterfield, VA' , '51043' : 'Clarke, VA' , '51045' : 'Craig, VA' , '51047' : 'Culpeper, VA' , '51049' : 'Cumberland, VA' , '51051' : 'Dickenson, VA' , '51053' : 'Dinwiddie, VA' , '51057' : 'Essex, VA' , '51059' : 'Fairfax, VA' , '51061' : 'Fauquier, VA' , '51063' : 'Floyd, VA' , '51065' : 'Fluvanna, VA' , '51067' : 'Franklin, VA' , '51069' : 'Frederick, VA' , '51071' : 'Giles, VA' , '51073' : 'Gloucester, VA' , '51075' : 'Goochland, VA' , '51077' : 'Grayson, VA' , '51079' : 'Greene, VA' , '51081' : 'Greensville, VA' , '51083' : 'Halifax, VA' , '51085' : 'Hanover, VA' , '51087' : 'Henrico, VA' , '51089' : 'Henry, VA' , '51091' : 'Highland, VA' , '51093' : 'Isle of Wight, VA' , '51095' : 'James City, VA' , '51097' : 'King and Queen, VA' , '51099' : 'King George, VA' , '51101' : 'King William, VA' , '51103' : 'Lancaster, VA' , '51105' : 'Lee, VA' , '51107' : 'Loudoun, VA' , '51109' : 'Louisa, VA' , '51111' : 'Lunenburg, VA' , '51113' : 'Madison, VA' , '51115' : 'Mathews, VA' , '51117' : 'Mecklenburg, VA' , '51119' : 'Middlesex, VA' , '51121' : 'Montgomery, VA' , '51125' : 'Nelson, VA' , '51127' : 'New Kent, VA' , '51131' : 'Northampton, VA' , '51133' : 'Northumberland, VA' , '51135' : 'Nottoway, VA' , '51137' : 'Orange, VA' , '51139' : 'Page, VA' , '51141' : 'Patrick, VA' , '51143' : 'Pittsylvania, VA' , '51145' : 'Powhatan, VA' , '51147' : 'Prince Edward, VA' , '51149' : 'Prince George, VA' , '51153' : 'Prince William, VA' , '51155' : 'Pulaski, VA' , '51157' : 'Rappahannock, VA' , '51159' : 'Richmond, VA' , '51161' : 'Roanoke, VA' , '51163' : 'Rockbridge, VA' , '51165' : 'Rockingham, VA' , '51167' : 'Russell, VA' , '51169' : 'Scott, VA' , '51171' : 'Shenandoah, VA' , '51173' : 'Smyth, VA' , '51175' : 'Southampton, VA' , '51177' : 'Spotsylvania, VA' , '51179' : 'Stafford, VA' , '51181' : 'Surry, VA' , '51183' : 'Sussex, VA' , '51185' : 'Tazewell, VA' , '51187' : 'Warren, VA' , '51191' : 'Washington, VA' , '51193' : 'Westmoreland, VA' , '51195' : 'Wise, VA' , '51197' : 'Wythe, VA' , '51199' : 'York, VA' , '51510' : 'Alexandria, VA' , '51515' : 'Bedford, VA' , '51520' : 'Bristol, VA' , '51530' : 'Buena Vista, VA' , '51540' : 'Charlottesville, VA' , '51550' : 'Chesapeake, VA' , '51560' : 'Clifton Forge, VA' , '51570' : 'Colonial Heights, VA' , '51580' : 'Covington, VA' , '51590' : 'Danville, VA' , '51595' : 'Emporia, VA' , '51600' : 'Fairfax, VA' , '51610' : 'Falls Church, VA' , '51620' : 'Franklin, VA' , '51630' : 'Fredericksburg, VA' , '51640' : 'Galax, VA' , '51650' : 'Hampton, VA' , '51660' : 'Harrisonburg, VA' , '51670' : 'Hopewell, VA' , '51678' : 'Lexington, VA' , '51680' : 'Lynchburg, VA' , '51683' : 'Manassas, VA' , '51685' : 'Manassas Park, VA' , '51690' : 'Martinsville, VA' , '51700' : 'Newport News, VA' , '51710' : 'Norfolk, VA' , '51720' : 'Norton, VA' , '51730' : 'Petersburg, VA' , '51735' : 'Poquoson, VA' , '51740' : 'Portsmouth, VA' , '51750' : 'Radford, VA' , '51760' : 'Richmond, VA' , '51770' : 'Roanoke, VA' , '51775' : 'Salem, VA' , '51780' : 'South Boston, VA' , '51790' : 'Staunton, VA' , '51800' : 'Suffolk, VA' , '51810' : 'Virginia Beach, VA' , '51820' : 'Waynesboro, VA' , '51830' : 'Williamsburg, VA' , '51840' : 'Winchester, VA' , '53000' : 'WASHINGTON' , '53001' : 'Adams, WA' , '53003' : 'Asotin, WA' , '53005' : 'Benton, WA' , '53007' : 'Chelan, WA' , '53009' : 'Clallam, WA' , '53011' : 'Clark, WA' , '53013' : 'Columbia, WA' , '53015' : 'Cowlitz, WA' , '53017' : 'Douglas, WA' , '53019' : 'Ferry, WA' , '53021' : 'Franklin, WA' , '53023' : 'Garfield, WA' , '53025' : 'Grant, WA' , '53027' : 'Grays Harbor, WA' , '53029' : 'Island, WA' , '53031' : 'Jefferson, WA' , '53033' : 'King, WA' , '53035' : 'Kitsap, WA' , '53037' : 'Kittitas, WA' , '53039' : 'Klickitat, WA' , '53041' : 'Lewis, WA' , '53043' : 'Lincoln, WA' , '53045' : 'Mason, WA' , '53047' : 'Okanogan, WA' , '53049' : 'Pacific, WA' , '53051' : 'Pend Oreille, WA' , '53053' : 'Pierce, WA' , '53055' : 'San Juan, WA' , '53057' : 'Skagit, WA' , '53059' : 'Skamania, WA' , '53061' : 'Snohomish, WA' , '53063' : 'Spokane, WA' , '53065' : 'Stevens, WA' , '53067' : 'Thurston, WA' , '53069' : 'Wahkiakum, WA' , '53071' : 'Walla Walla, WA' , '53073' : 'Whatcom, WA' , '53075' : 'Whitman, WA' , '53077' : 'Yakima, WA' , '54000' : 'WEST VIRGINIA' , '54001' : 'Barbour, WV' , '54003' : 'Berkeley, WV' , '54005' : 'Boone, WV' , '54007' : 'Braxton, WV' , '54009' : 'Brooke, WV' , '54011' : 'Cabell, WV' , '54013' : 'Calhoun, WV' , '54015' : 'Clay, WV' , '54017' : 'Doddridge, WV' , '54019' : 'Fayette, WV' , '54021' : 'Gilmer, WV' , '54023' : 'Grant, WV' , '54025' : 'Greenbrier, WV' , '54027' : 'Hampshire, WV' , '54029' : 'Hancock, WV' , '54031' : 'Hardy, WV' , '54033' : 'Harrison, WV' , '54035' : 'Jackson, WV' , '54037' : 'Jefferson, WV' , '54039' : 'Kanawha, WV' , '54041' : 'Lewis, WV' , '54043' : 'Lincoln, WV' , '54045' : 'Logan, WV' , '54047' : 'McDowell, WV' , '54049' : 'Marion, WV' , '54051' : 'Marshall, WV' , '54053' : 'Mason, WV' , '54055' : 'Mercer, WV' , '54057' : 'Mineral, WV' , '54059' : 'Mingo, WV' , '54061' : 'Monongalia, WV' , '54063' : 'Monroe, WV' , '54065' : 'Morgan, WV' , '54067' : 'Nicholas, WV' , '54069' : 'Ohio, WV' , '54071' : 'Pendleton, WV' , '54073' : 'Pleasants, WV' , '54075' : 'Pocahontas, WV' , '54077' : 'Preston, WV' , '54079' : 'Putnam, WV' , '54081' : 'Raleigh, WV' , '54083' : 'Randolph, WV' , '54085' : 'Ritchie, WV' , '54087' : 'Roane, WV' , '54089' : 'Summers, WV' , '54091' : 'Taylor, WV' , '54093' : 'Tucker, WV' , '54095' : 'Tyler, WV' , '54097' : 'Upshur, WV' , '54099' : 'Wayne, WV' , '54101' : 'Webster, WV' , '54103' : 'Wetzel, WV' , '54105' : 'Wirt, WV' , '54107' : 'Wood, WV' , '54109' : 'Wyoming, WV' , '55000' : 'WISCONSIN' , '55001' : 'Adams, WI' , '55003' : 'Ashland, WI' , '55005' : 'Barron, WI' , '55007' : 'Bayfield, WI' , '55009' : 'Brown, WI' , '55011' : 'Buffalo, WI' , '55013' : 'Burnett, WI' , '55015' : 'Calumet, WI' , '55017' : 'Chippewa, WI' , '55019' : 'Clark, WI' , '55021' : 'Columbia, WI' , '55023' : 'Crawford, WI' , '55025' : 'Dane, WI' , '55027' : 'Dodge, WI' , '55029' : 'Door, WI' , '55031' : 'Douglas, WI' , '55033' : 'Dunn, WI' , '55035' : 'Eau Claire, WI' , '55037' : 'Florence, WI' , '55039' : 'Fond du Lac, WI' , '55041' : 'Forest, WI' , '55043' : 'Grant, WI' , '55045' : 'Green, WI' , '55047' : 'Green Lake, WI' , '55049' : 'Iowa, WI' , '55051' : 'Iron, WI' , '55053' : 'Jackson, WI' , '55055' : 'Jefferson, WI' , '55057' : 'Juneau, WI' , '55059' : 'Kenosha, WI' , '55061' : 'Kewaunee, WI' , '55063' : 'La Crosse, WI' , '55065' : 'Lafayette, WI' , '55067' : 'Langlade, WI' , '55069' : 'Lincoln, WI' , '55071' : 'Manitowoc, WI' , '55073' : 'Marathon, WI' , '55075' : 'Marinette, WI' , '55077' : 'Marquette, WI' , '55078' : 'Menominee, WI' , '55079' : 'Milwaukee, WI' , '55081' : 'Monroe, WI' , '55083' : 'Oconto, WI' , '55085' : 'Oneida, WI' , '55087' : 'Outagamie, WI' , '55089' : 'Ozaukee, WI' , '55091' : 'Pepin, WI' , '55093' : 'Pierce, WI' , '55095' : 'Polk, WI' , '55097' : 'Portage, WI' , '55099' : 'Price, WI' , '55101' : 'Racine, WI' , '55103' : 'Richland, WI' , '55105' : 'Rock, WI' , '55107' : 'Rusk, WI' , '55109' : 'St. Croix, WI' , '55111' : 'Sauk, WI' , '55113' : 'Sawyer, WI' , '55115' : 'Shawano, WI' , '55117' : 'Sheboygan, WI' , '55119' : 'Taylor, WI' , '55121' : 'Trempealeau, WI' , '55123' : 'Vernon, WI' , '55125' : 'Vilas, WI' , '55127' : 'Walworth, WI' , '55129' : 'Washburn, WI' , '55131' : 'Washington, WI' , '55133' : 'Waukesha, WI' , '55135' : 'Waupaca, WI' , '55137' : 'Waushara, WI' , '55139' : 'Winnebago, WI' , '55141' : 'Wood, WI' , '56000' : 'WYOMING' , '56001' : 'Albany, WY' , '56003' : 'Big Horn, WY' , '56005' : 'Campbell, WY' , '56007' : 'Carbon, WY' , '56009' : 'Converse, WY' , '56011' : 'Crook, WY' , '56013' : 'Fremont, WY' , '56015' : 'Goshen, WY' , '56017' : 'Hot Springs, WY' , '56019' : 'Johnson, WY' , '56021' : 'Laramie, WY' , '56023' : 'Lincoln, WY' , '56025' : 'Natrona, WY' , '56027' : 'Niobrara, WY' , '56029' : 'Park, WY' , '56031' : 'Platte, WY' , '56033' : 'Sheridan, WY' , '56035' : 'Sublette, WY' , '56037' : 'Sweetwater, WY' , '56039' : 'Teton, WY' , '56041' : 'Uinta, WY' , '56043' : 'Washakie, WY' , '56045' : 'Weston, WY' , '60000' : 'AMERICAN SAMOA', '60010' : 'Eastern District, AS' , '60020' : 'Manu\'a District, AS' , '60030' : 'Rose Island, AS' , '60040' : 'Swains Island, AS' , '60050' : 'Western District, AS' , '66000' : 'GUAM' , '66010' : 'Guam, GU' , '69000' : 'COMMONWEALTH OF THE NORTHERN MARIANA ISLANDS' , '69085' : 'Northern Islands, MP' , '69100' : 'Rota, MP' , '69110' : 'Saipan, MP' , '69120' : 'Tinian, MP' , '72000' : 'PUERTO RICO' , '72001' : 'Adjuntas, PR' , '72003' : 'Aguada, PR' , '72005' : 'Aguadilla, PR' , '72007' : 'Aguas Buenas, PR' , '72009' : 'Aibonito, PR' , '72011' : 'Anasco, PR' , '72013' : 'Arecibo, PR' , '72015' : 'Arroyo, PR' , '72017' : 'Barceloneta, PR' , '72019' : 'Barranquitas, PR' , '72021' : 'Bayamon, PR' , '72023' : 'Cabo Rojo, PR' , '72025' : 'Caguas, PR' , '72027' : 'Camuy, PR' , '72029' : 'Canovanas, PR' , '72031' : 'Carolina, PR' , '72033' : 'Catano, PR' , '72035' : 'Cayey, PR' , '72037' : 'Ceiba, PR' , '72039' : 'Ciales, PR' , '72041' : 'Cidra, PR' , '72043' : 'Coamo, PR' , '72045' : 'Comerio, PR' , '72047' : 'Corozal, PR' , '72049' : 'Culebra, PR' , '72051' : 'Dorado, PR' , '72053' : 'Fajardo, PR' , '72054' : 'Florida, PR' , '72055' : 'Guanica, PR' , '72057' : 'Guayama, PR' , '72059' : 'Guayanilla, PR' , '72061' : 'Guaynabo, PR' , '72063' : 'Gurabo, PR' , '72065' : 'Hatillo, PR' , '72067' : 'Hormigueros, PR' , '72069' : 'Humacao, PR' , '72071' : 'Isabela, PR' , '72073' : 'Jayuya, PR' , '72075' : 'Juana Diaz, PR' , '72077' : 'Juncos, PR' , '72079' : 'Lajas, PR' , '72081' : 'Lares, PR' , '72083' : 'Las Marias, PR' , '72085' : 'Las Piedras, PR' , '72087' : 'Loiza, PR' , '72089' : 'Luquillo, PR' , '72091' : 'Manati, PR' , '72093' : 'Maricao, PR' , '72095' : 'Maunabo, PR' , '72097' : 'Mayaguez, PR' , '72099' : 'Moca, PR' , '72101' : 'Morovis, PR' , '72103' : 'Naguabo, PR' , '72105' : 'Naranjito, PR' , '72107' : 'Orocovis, PR' , '72109' : 'Patillas, PR' , '72111' : 'Penuelas, PR' , '72113' : 'Ponce, PR' , '72115' : 'Quebradillas, PR' , '72117' : 'Rincon, PR' , '72119' : 'Rio Grande, PR' , '72121' : 'Sabana Grande, PR' , '72123' : 'Salinas, PR' , '72125' : 'San German, PR' , '72127' : 'San Juan, PR' , '72129' : 'San Lorenzo, PR' , '72131' : 'San Sebastian, PR' , '72133' : 'Santa Isabel, PR' , '72135' : 'Toa Alta, PR' , '72137' : 'Toa Baja, PR' , '72139' : 'Trujillo Alto, PR' , '72141' : 'Utuado, PR' , '72143' : 'Vega Alta, PR' , '72145' : 'Vega Baja, PR' , '72147' : 'Vieques, PR' , '72149' : 'Villalba, PR' , '72151' : 'Yabucoa, PR' , '72153' : 'Yauco, PR' , '78000' : 'VIRGIN ISLANDS' , '78010' : 'St. Croix, VI' , '78020' : 'St. John, VI' , '78030' : 'St. Thomas, VI' , } def fipsstate(fips,countyfp): tags = {} if not fips: tags['is_in'] = 'USA' tags['is_in:country'] = 'USA' tags['is_in:country_code'] = 'US' return tags if fips not in fipscodes: raise KeyError('missing FIPS code', fips) state, statecode, isocode = fipscodes[fips] county_fips_code = fips + "" + countyfp county = county_fips[county_fips_code] tags["tiger:county"] = county tags["is_in:county"] = county tags["is_in"] = 'USA, '+state tags["is_in:state"] = state tags["is_in:state_code"] = statecode tags["is_in:country_code"] = isocode if isocode == 'US': tags["is_in:iso_3166_2"] = isocode+':'+statecode tags["is_in:country"] = "USA" else: # Reasonable to specify both here tags["is_in:country"] = 'USA;'+state return tags def parse_shp_for_osm( filename ): #ogr.RegisterAll() dr = ogr.GetDriverByName("ESRI Shapefile") poDS = dr.Open( filename ) if poDS == None: raise "Open failed." poLayer = poDS.GetLayer( 0 ) poLayer.ResetReading() ret = [] poFeature = poLayer.GetNextFeature() while poFeature: tags = {} # WAY ID tags[iSource + ":way_id"] = int( poFeature.GetField("TLID") ) # FEATURE IDENTIFICATION mtfcc = poFeature.GetField("MTFCC"); if mtfcc != None: if mtfcc == "L4010": #Pipeline tags["man_made"] = "pipeline" if mtfcc == "L4020": #Powerline tags["power"] = "line" if mtfcc == "L4031": #Aerial Tramway/Ski Lift tags["aerialway"] = "cable_car" if mtfcc == "L4110": #Fence Line tags["barrier"] = "fence" if mtfcc == "L4125": #Cliff/Escarpment tags["natural"] = "cliff" if mtfcc == "L4165": #Ferry Crossing tags["route"] = "ferry" if mtfcc == "R1011": #Railroad Feature (Main, Spur, or Yard) tags["railway"] = "rail" ttyp = poFeature.GetField("TTYP") if ttyp != None: if ttyp == "S": tags["service"] = "spur" if ttyp == "Y": tags["service"] = "yard" tags["tiger:ttyp"] = ttyp if mtfcc == "R1051": #Carline, Streetcar Track, Monorail, Other Mass Transit Rail) tags["railway"] = "light_rail" if mtfcc == "R1052": #Cog Rail Line, Incline Rail Line, Tram tags["railway"] = "incline" if mtfcc == "S1100": tags["highway"] = "primary" if mtfcc == "S1200": tags["highway"] = "secondary" if mtfcc == "S1400": tags["highway"] = "residential" if mtfcc == "S1500": tags["highway"] = "track" if mtfcc == "S1630": #Ramp tags["highway"] = "motorway_link" if mtfcc == "S1640": #Service Drive usually along a limited access highway tags["highway"] = "service" if mtfcc == "S1710": #Walkway/Pedestrian Trail tags["highway"] = "path" if mtfcc == "S1720": tags["highway"] = "steps" if mtfcc == "S1730": #Alley tags["highway"] = "service" tags["service"] = "alley" if mtfcc == "S1740": #Private Road for service vehicles (logging, oil, fields, ranches, etc.) tags["highway"] = "service" tags["access"] = "private" if mtfcc == "S1750": #Private Driveway tags["highway"] = "service" tags["access"] = "private" tags["service"] = "driveway" if mtfcc == "S1780": #Parking Lot Road tags["highway"] = "service" tags["service"] = "parking_aisle" if mtfcc == "S1820": #Bike Path or Trail tags["highway"] = "cycleway" if mtfcc == "S1830": #Bridle Path tags["highway"] = "bridleway" tags["tiger:mtfcc"] = mtfcc # FEATURE NAME if poFeature.GetField("FULLNAME"): #capitalizes the first letter of each word name = poFeature.GetField( "FULLNAME" ) tags["name"] = name #Attempt to guess highway grade if name[0:2] == "I-": tags["highway"] = "motorway" if name[0:3] == "US ": tags["highway"] = "primary" if name[0:3] == "US-": tags["highway"] = "primary" if name[0:3] == "Hwy": if tags["highway"] != "primary": tags["highway"] = "secondary" divroad = poFeature.GetField("DIVROAD") if divroad != None: if divroad == "Y" and "highway" in tags and tags["highway"] == "residential": tags["highway"] = "tertiary" tags["tiger:separated"] = divroad statefp = poFeature.GetField("STATEFP") countyfp = poFeature.GetField("COUNTYFP") if (statefp != None) and (countyfp != None): tags.update( fipsstate(statefp, countyfp) ) tlid = poFeature.GetField("TLID") if tlid != None: tags["tiger:tlid"] = tlid lfromadd = poFeature.GetField("LFROMADD") if lfromadd != None: tags["tiger:lfromadd"] = lfromadd rfromadd = poFeature.GetField("RFROMADD") if rfromadd != None: tags["tiger:rfromadd"] = rfromadd ltoadd = poFeature.GetField("LTOADD") if ltoadd != None: tags["tiger:ltoadd"] = ltoadd rtoadd = poFeature.GetField("RTOADD") if rtoadd != None: tags["tiger:rtoadd"] = rtoadd zipl = poFeature.GetField("ZIPL") if zipl != None: tags["tiger:zip_left"] = zipl zipr = poFeature.GetField("ZIPR") if zipr != None: tags["tiger:zip_right"] = zipr if mtfcc not in ignoremtfcc: # COPY DOWN THE GEOMETRY geom = [] rawgeom = poFeature.GetGeometryRef() for i in range( rawgeom.GetPointCount() ): geom.append( (rawgeom.GetX(i), rawgeom.GetY(i)) ) ret.append( (geom, tags) ) poFeature = poLayer.GetNextFeature() return ret # ==================================== # to do read .prj file for this data # Change the Projcs_wkt to match your datas prj file. # ==================================== projcs_wkt = \ """GEOGCS["GCS_North_American_1983", DATUM["D_North_American_1983", SPHEROID["GRS_1980",6378137,298.257222101]], PRIMEM["Greenwich",0], UNIT["Degree",0.017453292519943295]]""" from_proj = osr.SpatialReference() from_proj.ImportFromWkt( projcs_wkt ) # output to WGS84 to_proj = osr.SpatialReference() to_proj.SetWellKnownGeogCS( "EPSG:4326" ) tr = osr.CoordinateTransformation( from_proj, to_proj ) import math def length(segment, nodelist): '''Returns the length (in feet) of a segment''' first = True distance = 0 lat_feet = 364613 #The approximate number of feet in one degree of latitude for point in segment: pointid, (lat, lon) = nodelist[ round_point( point ) ] if first: first = False else: #The approximate number of feet in one degree of longitute lrad = math.radians(lat) lon_feet = 365527.822 * math.cos(lrad) - 306.75853 * math.cos(3 * lrad) + 0.3937 * math.cos(5 * lrad) distance += math.sqrt(((lat - previous[0])*lat_feet)**2 + ((lon - previous[1])*lon_feet)**2) previous = (lat, lon) return distance def addressways(waylist, nodelist, first_id): id = first_id awaylist = {} lat_feet = 364613 #The approximate number of feet in one degree of latitude distance = float(address_distance) ret = [] for waykey, segments in waylist.items(): waykey = dict(waykey) rsegments = [] lsegments = [] for segment in segments: lsegment = [] rsegment = [] lastpoint = None #Don't pull back the ends of very short ways too much seglength = length(segment, nodelist) if seglength < float(address_pullback) * 3.0: pullback = seglength / 3.0 else: pullback = float(address_pullback) if "tiger:lfromadd" in waykey: lfromadd = waykey["tiger:lfromadd"] else: lfromadd = None if "tiger:ltoadd" in waykey: ltoadd = waykey["tiger:ltoadd"] else: ltoadd = None if "tiger:rfromadd" in waykey: rfromadd = waykey["tiger:rfromadd"] else: rfromadd = None if "tiger:rtoadd" in waykey: rtoadd = waykey["tiger:rtoadd"] else: rtoadd = None if rfromadd != None and rtoadd != None: right = True else: right = False if lfromadd != None and ltoadd != None: left = True else: left = False if left or right: first = True firstpointid, firstpoint = nodelist[ round_point( segment[0] ) ] finalpointid, finalpoint = nodelist[ round_point( segment[len(segment) - 1] ) ] for point in segment: pointid, (lat, lon) = nodelist[ round_point( point ) ] #The approximate number of feet in one degree of longitute lrad = math.radians(lat) lon_feet = 365527.822 * math.cos(lrad) - 306.75853 * math.cos(3 * lrad) + 0.3937 * math.cos(5 * lrad) #Calculate the points of the offset ways if lastpoint != None: #Skip points too close to start if math.sqrt((lat * lat_feet - firstpoint[0] * lat_feet)**2 + (lon * lon_feet - firstpoint[1] * lon_feet)**2) < pullback: #Preserve very short ways (but will be rendered backwards) if pointid != finalpointid: continue #Skip points too close to end if math.sqrt((lat * lat_feet - finalpoint[0] * lat_feet)**2 + (lon * lon_feet - finalpoint[1] * lon_feet)**2) < pullback: #Preserve very short ways (but will be rendered backwards) if (pointid != firstpointid) and (pointid != finalpointid): continue X = (lon - lastpoint[1]) * lon_feet Y = (lat - lastpoint[0]) * lat_feet if Y != 0: theta = math.pi/2 - math.atan( X / Y) Xp = math.sin(theta) * distance Yp = math.cos(theta) * distance else: Xp = 0 if X > 0: Yp = -distance else: Yp = distance if Y > 0: Xp = -Xp else: Yp = -Yp if first: first = False dX = - (Yp * (pullback / distance)) / lon_feet #Pull back the first point dY = (Xp * (pullback / distance)) / lat_feet if left: lpoint = (lastpoint[0] + (Yp / lat_feet) - dY, lastpoint[1] + (Xp / lon_feet) - dX) lsegment.append( (id, lpoint) ) id += 1 if right: rpoint = (lastpoint[0] - (Yp / lat_feet) - dY, lastpoint[1] - (Xp / lon_feet) - dX) rsegment.append( (id, rpoint) ) id += 1 else: #round the curves if delta[1] != 0: theta = abs(math.atan(delta[0] / delta[1])) else: theta = math.pi / 2 if Xp != 0: theta = theta - abs(math.atan(Yp / Xp)) else: theta = theta - math.pi / 2 r = 1 + abs(math.tan(theta/2)) if left: lpoint = (lastpoint[0] + (Yp + delta[0]) * r / (lat_feet * 2), lastpoint[1] + (Xp + delta[1]) * r / (lon_feet * 2)) lsegment.append( (id, lpoint) ) id += 1 if right: rpoint = (lastpoint[0] - (Yp + delta[0]) * r / (lat_feet * 2), lastpoint[1] - (Xp + delta[1]) * r / (lon_feet * 2)) rsegment.append( (id, rpoint) ) id += 1 delta = (Yp, Xp) lastpoint = (lat, lon) #Add in the last node dX = - (Yp * (pullback / distance)) / lon_feet dY = (Xp * (pullback / distance)) / lat_feet if left: lpoint = (lastpoint[0] + (Yp + delta[0]) / (lat_feet * 2) + dY, lastpoint[1] + (Xp + delta[1]) / (lon_feet * 2) + dX ) lsegment.append( (id, lpoint) ) id += 1 if right: rpoint = (lastpoint[0] - Yp / lat_feet + dY, lastpoint[1] - Xp / lon_feet + dX) rsegment.append( (id, rpoint) ) id += 1 #Generate the tags for ways and nodes rtags = [] ltags = [] tags = [] zipr = '' zipl = '' name = '' county = '' if "tiger:zip_right" in waykey: zipr = waykey["tiger:zip_right"] rtags.append( "" % zipr ) if "tiger:zip_left" in waykey: zipl = waykey["tiger:zip_left"] ltags.append( "" % zipl ) if "name" in waykey: name = waykey["name"] tags.append( "" % name ) if "is_in:state" in waykey: state = waykey["is_in:state"] tags.append( "" % state ) if "tiger:county" in waykey: county = waykey["tiger:county"] tags.append( "" % county ) if "is_in:country_code" in waykey: country = waykey["is_in:country_code"] tags.append( "" % country ) if "tiger:separated" in waykey: separated = waykey["tiger:separated"] else: separated = "N" ltags.extend(tags) rtags.extend(tags) #Write the nodes of the offset ways if right: rlinestring = []; for i, point in rsegment: rlinestring.append( "%f %f" % (point[1], point[0]) ) if left: llinestring = []; for i, point in lsegment: llinestring.append( "%f %f" % (point[1], point[0]) ) if right: rsegments.append( rsegment ) if left: lsegments.append( lsegment ) rtofromint = right #Do the addresses convert to integers? ltofromint = left #Do the addresses convert to integers? if right: try: rfromint = int(rfromadd) except: print("Non integer address: %s" % rfromadd) rtofromint = False try: rtoint = int(rtoadd) except: print("Non integer address: %s" % rtoadd) rtofromint = False if left: try: lfromint = int(lfromadd) except: print("Non integer address: %s" % lfromadd) ltofromint = False try: ltoint = int(ltoadd) except: print("Non integer address: %s" % ltoadd) ltofromint = False import_guid = time.strftime( '%Y%m%d%H%M%S' ) if right: id += 1 interpolationtype = ""; if rtofromint: if (rfromint % 2) == 0 and (rtoint % 2) == 0: if separated == "Y": #Doesn't matter if there is another side # ret.append( "" ) interpolationtype = "even"; elif ltofromint and (lfromint % 2) == 1 and (ltoint % 2) == 1: interpolationtype = "even"; # ret.append( "" ) else: interpolationtype = "all"; # ret.append( "" ) elif (rfromint % 2) == 1 and (rtoint % 2) == 1: if separated == "Y": #Doesn't matter if there is another side interpolationtype = "odd"; # ret.append( "" ) elif ltofromint and (lfromint % 2) == 0 and (ltoint % 2) == 0: interpolationtype = "odd"; # ret.append( "" ) else: interpolationtype = "all"; # ret.append( "" ) else: interpolationtype = "all"; # ret.append( "" ) else: interpolationtype = "all"; # ret.append( "" ) # ret.extend(rtags) # ret.append( "" % (iSource, VERSION, import_guid) ) # ret.append( "" % (iAttrib) ) # ret.append( "" ) # call new tiger_line_import function to save the lines in the DB. ret.append( "select tiger_line_import(ST_GeomFromText('LINESTRING(%s)',4326), '%s', '%s', '%s', '%s', '%s', '%s');" % ( ",".join(rlinestring), rfromadd.replace("'", "''"), rtoadd.replace("'", "''"), interpolationtype.replace("'", "''"), name.replace("'", "''"), county.replace("'", "''"), zipr.replace("'", "''") ) ) if left: id += 1 if ltofromint: if (lfromint % 2) == 0 and (ltoint % 2) == 0: if separated == "Y": interpolationtype = "even"; elif rtofromint and (rfromint % 2) == 1 and (rtoint % 2) == 1: interpolationtype = "even"; else: interpolationtype = "all"; elif (lfromint % 2) == 1 and (ltoint % 2) == 1: if separated == "Y": interpolationtype = "odd"; elif rtofromint and (rfromint %2 ) == 0 and (rtoint % 2) == 0: interpolationtype = "odd"; else: interpolationtype = "all"; else: interpolationtype = "all"; else: interpolationtype = "all"; ret.append( "select tiger_line_import(ST_GeomFromText('LINESTRING(%s)',4326), '%s', '%s', '%s', '%s', '%s', '%s');" % ( ",".join(llinestring), lfromadd.replace("'", "''"), ltoadd.replace("'", "''"), interpolationtype.replace("'", "''"), name.replace("'", "''"), county.replace("'", "''"), zipl.replace("'", "''") ) ) return ret def unproject( point ): pt = tr.TransformPoint( point[0], point[1] ) return (pt[1], pt[0]) def round_point( point, accuracy=8 ): return tuple( [ round(x,accuracy) for x in point ] ) def compile_nodelist( parsed_gisdata, first_id=1 ): nodelist = {} i = first_id for geom, tags in parsed_gisdata: if len( geom )==0: continue for point in geom: r_point = round_point( point ) if r_point not in nodelist: nodelist[ r_point ] = (i, unproject( point )) i += 1 return (i, nodelist) def adjacent( left, right ): left_left = round_point(left[0]) left_right = round_point(left[-1]) right_left = round_point(right[0]) right_right = round_point(right[-1]) return ( left_left == right_left or left_left == right_right or left_right == right_left or left_right == right_right ) def glom( left, right ): left = list( left ) right = list( right ) left_left = round_point(left[0]) left_right = round_point(left[-1]) right_left = round_point(right[0]) right_right = round_point(right[-1]) if left_left == right_left: left.reverse() return left[0:-1] + right if left_left == right_right: return right[0:-1] + left if left_right == right_left: return left[0:-1] + right if left_right == right_right: right.reverse() return left[0:-1] + right raise 'segments are not adjacent' def glom_once( segments ): if len(segments)==0: return segments unsorted = list( segments ) x = unsorted.pop(0) while len( unsorted ) > 0: n = len( unsorted ) for i in range(0, n): y = unsorted[i] if adjacent( x, y ): y = unsorted.pop(i) x = glom( x, y ) break # Sorted and unsorted lists have no adjacent segments if len( unsorted ) == n: break return x, unsorted def glom_all( segments ): unsorted = segments chunks = [] while unsorted != []: chunk, unsorted = glom_once( unsorted ) chunks.append( chunk ) return chunks def compile_waylist( parsed_gisdata, blank_way_id ): waylist = {} #Group by iSource:way_id for geom, tags in parsed_gisdata: way_key = tags.copy() way_key = ( way_key[iSource + ':way_id'], tuple( [(k,v) for k,v in way_key.items()] ) ) if way_key not in waylist: waylist[way_key] = [] waylist[way_key].append( geom ) ret = {} for (way_id, way_key), segments in waylist.items(): if way_id != blank_way_id: ret[way_key] = glom_all( segments ) else: ret[way_key] = segments return ret import time from xml.sax.saxutils import escape def shape_to_osm( shp_filename, base_filename, blank_way_id ): import_guid = time.strftime( '%Y%m%d%H%M%S' ) print("parsing shpfile") parsed_features = parse_shp_for_osm( shp_filename ) print("compiling nodelist") i, nodelist = compile_nodelist( parsed_features ) print("compiling waylist") waylist = compile_waylist( parsed_features, blank_way_id ) filenumber = 1 objectcount = 0 seen = {} print("preparing address ways") ret = addressways(waylist, nodelist, i) osm_filename = "%s%d.osm" % (base_filename, filenumber) print("writing %s" %osm_filename) fp = open( osm_filename, "w" ) fp.write( "\n".join( ret ) ) fp.close() filenumber += 1 print("constructing osm xml file") ret = [] ret.append( "" ) ret.append( "" ) for waykey, segments in waylist.items(): for segment in segments: #write the nodes for point in segment: id, (lat, lon) = nodelist[ round_point( point ) ] if id not in seen: seen[id] = True #write node ret.append( " " % (id, lat, lon) ) ret.append( " " ) objectcount += 1 else: pass #print "Skipping node %d" %id #write the way ret.append( " " % i ) ids = [ nodelist[ round_point( point ) ][0] for point in segment ] count = 0 for id in ids: count += 1 ret.append( " " % id ) if (count % Max_Waylength == 0) and (count != len(ids)): #Split the way for k, v in waykey: ret.append( " " % (k, escape(str(v))) ) ret.append( " " % (iSource, VERSION, import_guid) ) ret.append( " " % (iAttrib) ) ret.append( " " ) objectcount += 1 i += 1 ret.append( " " % i ) ret.append( " " % id ) for k, v in waykey: ret.append( " " % (k, escape(str(v))) ) ret.append( " " % (iSource, VERSION, import_guid) ) ret.append( " " % (iAttrib) ) ret.append( " " ) objectcount += 1 i += 1 if objectcount > maxNodes: #Write a file ret.append( "" ) osm_filename = "%s%d.osm" % (base_filename, filenumber) print("writing %s" %osm_filename) fp = open( osm_filename, "w" ) fp.write( "\n".join( ret ) ) fp.close() objectcount = 0 filenumber += 1 seen = {} ret = [] ret.append( "" ) ret.append( "" ) ret.append( "" ) osm_filename = "%s%d.osm" % (base_filename, filenumber) print("writing %s" %osm_filename) fp = open( osm_filename, "w" ) fp.write( "\n".join( ret ) ) fp.close() if __name__ == '__main__': import sys, os.path if len(sys.argv) < 2: print("%s filename.shp [filename.osm]" % sys.argv[0]) sys.exit() shape = sys.argv[1] if len(sys.argv) > 2: osm = sys.argv[2] else: osm = shape[0:-4] + ".osm" id = "1.shp" # Left over from massGIS unknown usage, but works fine hardcoded to "1.shp" which was the valu on a test of the actual mass data, #id = os.path.basename(shape).split("_")[-1] shape_to_osm( shape, osm, id )