Jeg bruger en postnummerliste, og jeg er nysgerrig efter at vide, hvor mange (eller hvilke) postnumre, der kortlægges til mere end en amerikansk stat eller USA by?
For eksempel ved jeg, at postnummer 42223
løser den amerikanske hær, Fort Campbell, der strækker sig over KY-TN-statslinjen. Mærkeligt nok er det kun google API returnerer TN
for den tilstand, der svarer til den zip.
Kommentarer
- Hvordan definerer du ” by ” og ” postnummer “?
Svar
Der er 13 multi-state US Census “ZIP Code Tabulation Areas (ZCTAer): 02861, 42223, 59221, 63673, 71749, 73949, 81137, 84536, 86044, 86515, 88063, 89439 & 97635.
Som andre har nævnt, der er et par forskellige måder at finde ud af det område, der er dækket af et postnummer, men ZCTAer er de nemmeste, og o kun officiel version, som jeg kender til.
Så dit eksempel på 42223 spænder over en statsgrænse, , men det ser ud til, at det faktisk er mellem Maryland og Virginia. det mellem Kentucky og Tennessee.
Her er den fulde liste med tilstande:
02861 Massachusetts 02861 Rhode Island 42223 Kentucky 42223 Tennessee 59221 Montana 59221 North Dakota 63673 Illinois 63673 Missouri 71749 Arkansas 71749 Louisiana 73949 Oklahoma 73949 Texas 81137 Colorado 81137 New Mexico 84536 Arizona 84536 Utah 86044 Arizona 86044 Utah 86515 Arizona 86515 New Mexico 88063 New Mexico 88063 Texas 89439 California 89439 Nevada 97635 California 97635 Oregon
Her er hvordan jeg genererede det (med pandaer i Python):
import pandas as pd zcta_to_place_url = "http://www2.census.gov/geo/docs/maps-data/data/rel/zcta_place_rel_10.txt" # load relevant data df = pd.read_csv( zcta_to_place_url, dtype={"ZCTA5": str}, usecols=["ZCTA5", "STATE"]) # the data often repeats the same (ZCTA, state) pair. Remove these df = df.drop_duplicates() # get number of times each ZCTA appears (most are only 1) counts = df["ZCTA5"].value_counts() # get those listed more than once multi_state_zips = df[df.ZCTA5.isin(counts[counts > 1].index)] # the census uses numeric state codes # replace these with state names census_codes_to_names_url = "http://www2.census.gov/geo/docs/reference/state.txt" states = pd.read_csv(census_codes_to_names_url, sep="|") merged = pd.merge( multi_state_zips, states, on="STATE" )[["ZCTA5", "STATE_NAME"]] print merged.sort(["ZCTA5", "STATE_NAME"]).to_string(index=False)
Rediger : Det ser ud til, at folketællingen har to forskellige tocifrede kodninger for stater. Begge er numre tildelt baseret på statens alfabetiske rækkefølge, men man ser ud til at anvende tallene direkte fra 1-51 (50 stater + DC), mens den anden springer nogle numre over . Jeg brugte det første, mens jeg skulle have brugt det andet, så de statslige navne, jeg nævnte, var forkerte. Jeg har opdateret kode og resultater med den korrekte liste.
Rediger : ny tilstandsmapping bekræftet af OpenCongress API: https://gist.github.com/gabrielgrant/89f883d093e2abf129ad
Kommentarer
- Mange tak for at fange dette @JesseCrocker – Det synes folketællingen (forvirrende) har to forskellige tocifrede kodninger for stater. Begge er numre tildelt baseret på tilstanden ‘ s alfabetisk rækkefølge, men man ser ud til at anvende tallene direkte fra 1-51 (50 stater + DC), mens den anden springer nogle tal over . Jeg brugte den første, men jeg skulle have brugt den anden, så de statsnavne, jeg nævnte, var forkerte (selvom ZCTAerne var gode). Jeg ‘ har rettet koden og resultaterne med den korrekte liste.
- Med hensyn til hullerne i FIPS-koder blev de springede tal reserveret i 1970erne til fjerntliggende områder (Amerikansk Samoa, Canal Zone, Guam, Puerto Rico og Jomfruøerne), men derefter blev ‘ ikke brugt til dem. da.wikipedia.org/wiki/…
- Don ‘ glem ikke postnummer 57717, der spænder over tre stater seks, amter og flere byer: 57717 Aurora, SD 57717 Butte, SD 57717 Carter, MT 57717 Crook, WY 57717 Harding, SD 57717 Lawrence, SD
- Denne fortegnelse er ikke ‘ t næsten færdig. Tjek mit svar for en langt bedre tilnærmelse. gis.stackexchange.com/a/223445/6052
- At ‘ er ulige. Google Maps viser
02861
som bogstaveligt talt en del af grænsen mellem MA og RI, og hele postnummeret i RI google.com/ maps / place / Pawtucket, + RI + 02861 / …
Svar
Der er virkelig ikke en måde at fortælle dette på, da der ikke er en ZipCode-grænseform, der er defineret af USPS. ZipCodes defineres af en afgrænsningsboks med leverede gader til af luftfartsselskaber fra et bestemt distributionscenter.
Så du bliver nødt til at tage USPS AIS-data og udpakke ved ZipCodes de gader, der leveres af et givent posthus, og slut derefter til disse et gadenet. Dette er hvad alle de kommercielle leverandører gør (Nokia / TomTom) for at skabe den Psuedo-form, som de bruger til at vise postgrænser.
Denne unøjagtige proces er grunden til, at USPS ikke leverer geodata.
Kommentarer
- Er noget korrekt? Hvad er sandhed? Masser af zip grænselag er blevet oprettet, hvilket måske eller måske ikke tjener formålet med denne særlige analyse i betragtning af dens ukendte krav. Esri gratis zip-grænser – arcgis.com/home/item.html?id=8d2012a2016e484dafaac0451f9aea24 Se også gis .stackexchange.com / spørgsmål / 2682 / …
- Givet, men du skal også forstå, hvad du laver, implikationerne af de data, du bruger.
Svar
US Census Bureau afleder omtrentlige grænser for postnumre baseret på adresserne indeholdt i dem, kaldet ZIP Kodetabuleringsområder (ZCTAer).
De offentliggør relationsfiler , der beskriver, hvordan deres ZCTAer kortlægges til forskellige andre geografiske områder. Hvis du undersøger forholdet ZCTA til sted , kan du se, hvordan de kortlægges til byer. Du kan udlede, hvordan de kortlægges til stater fra forholdet ZCTA til amter .
Forholdsfilerne bruger Census-geografi-ider, så du ” Jeg vil få fat i en gazetteer-fil for at hjælpe dig med at konvertere de numeriske ider til de sted- eller amtsnavne, du forventer.
Som andre svar har angivet, enhver kortlægning af postnumre til steder er sandsynligvis omtrentlig, men jeg har held og lykke med folketællingsdatafilerne.
Svar
2016 TIGER-data med PostGIS
Som en særlig advarsel er ZCTA-data ikke USPS-postnumre. Det er en tilnærmelse af det. USPS-postnumre er virkelig forfærdelige og ikke nyttige undtagen at tilnærme sig. Alle, inklusive enhver anden regeringsenhed end USPS, og (folketællingen for at lave ZCTA) ignorerer dem fuldstændigt. lidt, de ville bare konvertere til den nyeste ZCTA og give autoritative GIS-polygoner.
- 2016 TIGER ZCTA 877 MB tabeldata.
- 33.144 ZCTAer
- 52.669.641 point i alt,
- TIGER-stater 2016 15 MB tabeldata.
- 56 “Stat” s
- 912.464 point i alt
Derefter … Her spørger vi om skæringspunkter mellem TIGER State og TIGER ZCTA datasæt. Bemærk, vi kvalificerer stater med 1% af det samlede ZCTA-område. Hvis 1% af ZCTA-området ikke er i tilstanden, antager vi, at det er en afrundingsfejl, eller hvis nogen er fede, der fingrer på noget ved folketællingen. Tjek 56168
eller endda 83832
for et postnummer, som vi beskærer med denne ekstra selektivitet.
SELECT zcta5ce10, array_agg(state.name ORDER BY state.name) AS states FROM census.state AS state JOIN census.zcta AS zcta ON ( ST_Intersects(state.geog::geometry, zcta.geog::geometry) AND NOT ST_Touches(state.geog::geometry, zcta.geog::geometry) AND ST_Area(ST_Intersection(state.geog, zcta.geog)) > (ST_Area(zcta.geog)*0.01) ) GROUP BY zcta.zcta5ce10 HAVING count(*) > 1 ORDER BY zcta5ce10;
Her er resultatsættet
zcta5ce10 | states -----------+--------------------------------- 03579 | {Maine,"New Hampshire"} 20135 | {Virginia,"West Virginia"} 24604 | {Virginia,"West Virginia"} 31905 | {Alabama,Georgia} 38079 | {Kentucky,Tennessee} 38769 | {Arkansas,Mississippi} 38852 | {Alabama,Mississippi} 42223 | {Kentucky,Tennessee} 51001 | {Iowa,"South Dakota"} 51023 | {Iowa,"South Dakota"} 51360 | {Iowa,Minnesota} 51557 | {Iowa,Nebraska} 51640 | {Iowa,Missouri} 52542 | {Iowa,Missouri} 52573 | {Iowa,Missouri} 52626 | {Iowa,Missouri} 54554 | {Michigan,Wisconsin} 56027 | {Iowa,Minnesota} 56144 | {Minnesota,"South Dakota"} 56164 | {Minnesota,"South Dakota"} 56219 | {Minnesota,"South Dakota"} 56744 | {Minnesota,"North Dakota"} 57026 | {Minnesota,"South Dakota"} 57030 | {Minnesota,"South Dakota"} 57068 | {Minnesota,"South Dakota"} 57078 | {Nebraska,"South Dakota"} 57638 | {"North Dakota","South Dakota"} 57641 | {"North Dakota","South Dakota"} 57642 | {"North Dakota","South Dakota"} 57645 | {"North Dakota","South Dakota"} 57648 | {"North Dakota","South Dakota"} 57660 | {"North Dakota","South Dakota"} 57717 | {"South Dakota",Wyoming} 57724 | {Montana,"South Dakota"} 58225 | {Minnesota,"North Dakota"} 58439 | {"North Dakota","South Dakota"} 58623 | {"North Dakota","South Dakota"} 58649 | {"North Dakota","South Dakota"} 58653 | {"North Dakota","South Dakota"} 59221 | {Montana,"North Dakota"} 59270 | {Montana,"North Dakota"} 59275 | {Montana,"North Dakota"} 59847 | {Idaho,Montana} 63673 | {Illinois,Missouri} 65729 | {Arkansas,Missouri} 65733 | {Arkansas,Missouri} 65761 | {Arkansas,Missouri} 66541 | {Kansas,Nebraska} 67950 | {Kansas,Oklahoma} 68325 | {Kansas,Nebraska} 68719 | {Nebraska,"South Dakota"} 68978 | {Kansas,Nebraska} 69201 | {Nebraska,"South Dakota"} 69212 | {Nebraska,"South Dakota"} 69216 | {Nebraska,"South Dakota"} 71749 | {Arkansas,Louisiana} 72338 | {Arkansas,Tennessee} 72644 | {Arkansas,Missouri} 73949 | {Oklahoma,Texas} 75556 | {Arkansas,Texas} 79837 | {"New Mexico",Texas} 80758 | {Colorado,Nebraska} 81137 | {Colorado,"New Mexico"} 81324 | {Colorado,Utah} 82063 | {Colorado,Wyoming} 82082 | {Nebraska,Wyoming} 82701 | {"South Dakota",Wyoming} 82801 | {Montana,Wyoming} 82930 | {Utah,Wyoming} 83111 | {Idaho,Wyoming} 83120 | {Idaho,Wyoming} 83312 | {Idaho,Utah} 83342 | {Idaho,Utah} 84034 | {Nevada,Utah} 84531 | {Arizona,Utah} 84536 | {Arizona,Utah} 86044 | {Arizona,Utah} 86504 | {Arizona,"New Mexico"} 86514 | {Arizona,Utah} 86515 | {Arizona,"New Mexico"} 87328 | {Arizona,"New Mexico"} 88220 | {"New Mexico",Texas} 88430 | {"New Mexico",Texas} 89010 | {California,Nevada} 89019 | {California,Nevada} 89060 | {California,Nevada} 89421 | {Nevada,Oregon} 89439 | {California,Nevada} 89832 | {Idaho,Nevada} 97635 | {California,Oregon} 97910 | {Idaho,Oregon} 99128 | {Idaho,Washington} 99362 | {Oregon,Washington} (93 rows)
Du bør være i stand til at spotcheck alle disse i Google Maps. Google Maps er også ikke autoritativt.
Svar
State Overlaps nævnt i folketællingsdokumentet 1994 / h1>
I juni 1994 er der ifølge følgende US Census Bureau-websted 153 postnumre, der krydser statsgrænser.
Som tidligere nævnt er der et par postnumre, der leverer på tværs af statslinjer, og der er et par ZIP / sektorer, der krydser amtslinjer. Der er 153 postnumre i mere end en tilstand. Der er 9.000 postnumre i mere end et amt. Der var 11.331 (ud af det samlede 857.400) ZIP / sektorer der var spl det efter amt. Alle stater havde nogle splittede sektorer, hvor Virginia, Michigan og Ohio havde en særlig større dosis. Rutesektorerne i landdistrikterne indeholdt (forventet) (relativt) hovedparten af split sektorer. De fleste af de andre sager er i det lavere sektorområde (forbeholdt postkasser) og i sektor 99 (forbeholdt postmester og forretning mail returnering). Der skal forekomme en ikke-standard amtkodetildeling for disse valgte sager. Vi bliver nødt til at undersøge disse på et senere tidspunkt.
Svar
Med ArcGIS kan du bruge det rumlige sammenføjningsværktøj (eller i et script) til at finde hvilke postnummer polygoner, der skærer sig med mere end en tilstandspolygoner. I outputfunktionsklassen vil der være et Join_Count-felt, der angiver flere tilstande. Du kan gøre en lignende ting med lynlåse og byer. Der vil sandsynligvis være falske positive, hvor lynlåse utilsigtet overlapper mere end en på grund af unøjagtigheder ved grænsen / mangel eller opløsning. Du kan muligvis lave en negativ -100 m buffer af lynlåse, før den rumlige sammenføjning og se hvad det gør.
import arcpy target_features = "C:/data/usa.gdb/states" join_features = "C:/data/usa.gdb/zips" out_feature_class = "C:/data/usa.gdb/states_zips" arcpy.SpatialJoin_analysis(target_features, join_features, out_feature_class, "JOIN_ONE_TO_MANY")
http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Spatial_Join/00080000000q000000/
“To nye felter, Join_Count og TARGET_FID, føjes altid til outputfunktionsklassen. Join_Count angiver, hvor mange joinfunktioner der matcher hver målfunktion (TARGET_FID). Et andet nyt felt, JOIN_FID, føjes til output, når JOIN_ONE_TO_MANY er specificeret i parameteren Join Operation.”
Svar
Du kan lave et rumskæringspunkt i PostGIS og få en liste tilbage over hver stat eller by og postnummer at de krydser hinanden, hvilket ville returnere flere postnumre, hvor flere stater krydser hinanden, og for hver by, der krydsede det samme postnummer, ville du også se resultatet.
Kommentarer
Svar
I Pennsylvania stemmer postkontorgrænserne ikke overens med kommunegrænserne. Nogle townships kan have flere postkontorer, der leverer til dem. Da vi lavede 911-adressering, bad nogle townships PO om at ændre deres behov til bynavnet tillod POen dem at gøre dette med den betingelse, at de fortsatte med at bruge det gamle posthus postnummer. Mange gjorde dette. Du kan se fra disse links, at det samme postnummer er i brug i flere byer. https://suburbanstats.org/zip-codes/pennsylvania/thornhurst https://suburbanstats.org/zip-codes/pennsylvania/scott-twp Grundlæggende fungerer “Anytown” med det rigtige postnummer på grund af deres sortering af computere, der læser zip kode først.
Du kan også løbe ind i PO, der kun har PO-kasser og ikke foretager lokal levering, så der er ingen polygon til dit kort. Disse PO er normalt små.