census_shapes 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +123 -0
- data/LICENSE.txt +22 -0
- data/README.md +123 -0
- data/Rakefile +1 -0
- data/census_shapes.gemspec +29 -0
- data/lib/census_shapes.rb +2 -0
- data/lib/census_shapes/version.rb +3 -0
- data/lib/generators/census_shapes/setup/setup_generator.rb +104 -0
- data/lib/generators/census_shapes/setup/templates/.DS_Store +0 -0
- data/lib/generators/census_shapes/setup/templates/config/database_example.yml +29 -0
- data/lib/generators/census_shapes/setup/templates/config/initializers/shapes_globals.rb +4 -0
- data/lib/generators/census_shapes/setup/templates/controllers/shapes_controller.rb +17 -0
- data/lib/generators/census_shapes/setup/templates/db/migrate/create_shapes.rb +86 -0
- data/lib/generators/census_shapes/setup/templates/lib/tasks/census_shapes.rake +167 -0
- data/lib/generators/census_shapes/setup/templates/lib/tasks/postgis_template.rake +22 -0
- data/lib/generators/census_shapes/setup/templates/lib/yaml/us_shapes.yml +133 -0
- data/lib/generators/census_shapes/setup/templates/lib/yaml/us_states.yml +209 -0
- data/lib/generators/census_shapes/setup/templates/models/shape.rb +164 -0
- data/lib/generators/census_shapes/setup/templates/views/layouts/shapes.html.erb +17 -0
- data/lib/generators/census_shapes/setup/templates/views/shapes/index.html.erb +89 -0
- data/spec/spec_helper.rb +8 -0
- metadata +149 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
class CONTROLLER_NAMEController < ApplicationController
|
2
|
+
|
3
|
+
def index
|
4
|
+
bbox = MODEL_NAME.bbox(params[:z],params[:x], params[:y])
|
5
|
+
params.merge!(:bbox=> bbox) if bbox
|
6
|
+
respond_to do |format|
|
7
|
+
format.html
|
8
|
+
format.json {
|
9
|
+
render json: ({
|
10
|
+
:status=> "OK",
|
11
|
+
:type => "FeatureCollection",
|
12
|
+
:features=> MODEL_NAME.features(params)
|
13
|
+
})
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
class Create<%= controller_name.titleize.gsub(' ', '').gsub(/\W/,'') %> < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
create_table(:<%= controller_name %>) do |t|
|
4
|
+
t.string :type, :limit => 12
|
5
|
+
t.string :sumlevel, :limit => 3
|
6
|
+
t.string :geoid10, :limit => 15
|
7
|
+
t.string :name10, :limit => 100
|
8
|
+
t.string :namelsad10, :limit => 100
|
9
|
+
t.string :region10, :limit => 2
|
10
|
+
t.string :division10, :limit => 2
|
11
|
+
t.string :state10, :limit => 2
|
12
|
+
t.string :statens10, :limit => 8
|
13
|
+
t.string :statefp10, :limit => 2
|
14
|
+
t.string :zcta5ce10, :limit => 5
|
15
|
+
t.string :countyfp10, :limit => 3
|
16
|
+
t.string :countyns10, :limit => 8
|
17
|
+
t.string :cousubfp10, :limit => 5
|
18
|
+
t.string :cousubns10, :limit => 8
|
19
|
+
t.string :submcdfp10, :limit => 5
|
20
|
+
t.string :submcdns10, :limit => 8
|
21
|
+
t.string :tractce10, :limit => 6
|
22
|
+
t.string :blockce10, :limit => 4
|
23
|
+
t.string :blkgrpce10, :limit => 6
|
24
|
+
t.string :placefp10, :limit => 5
|
25
|
+
t.string :placens10, :limit => 8
|
26
|
+
t.string :csafp10, :limit => 3
|
27
|
+
t.string :cbsafp10, :limit => 5
|
28
|
+
t.string :metdivfp10, :limit => 5
|
29
|
+
t.string :cd111fp, :limit => 2
|
30
|
+
t.string :cdsessn, :limit => 3
|
31
|
+
t.string :anrcfp10, :limit => 5
|
32
|
+
t.string :anrcns10, :limit => 8
|
33
|
+
t.string :aiannhce10, :limit => 4
|
34
|
+
t.string :aiannhns10, :limit => 8
|
35
|
+
t.string :trsubce10, :limit => 3
|
36
|
+
t.string :trsubns10, :limit => 8
|
37
|
+
t.string :sldust10, :limit => 3
|
38
|
+
t.string :sldlst10, :limit => 3
|
39
|
+
t.string :vtdst10, :limit => 6
|
40
|
+
t.string :elsdlea10, :limit => 5
|
41
|
+
t.string :scsdlea10, :limit => 5
|
42
|
+
t.string :unsdlea10, :limit => 5
|
43
|
+
t.string :stusps10, :limit => 2
|
44
|
+
t.string :lsad10, :limit => 2
|
45
|
+
t.string :lsy10, :limit=> 4
|
46
|
+
t.string :lograde10, :limit => 2
|
47
|
+
t.string :higrade10, :limit => 2
|
48
|
+
t.string :sdtyp10, :limigt => 1
|
49
|
+
t.string :classfp10, :limit => 2
|
50
|
+
t.string :comptyp10, :limit => 1
|
51
|
+
t.string :aiannhr10, :limit => 1
|
52
|
+
t.string :aiannhfp10, :limit => 5
|
53
|
+
t.string :trsubfp10, :limit => 5
|
54
|
+
t.string :partflg10, :limit => 1
|
55
|
+
t.string :pcicbsa10, :limit => 1
|
56
|
+
t.string :pcinecta10, :limit => 1
|
57
|
+
t.string :mtfcc10, :limit => 5
|
58
|
+
t.string :memi10, :limit => 1
|
59
|
+
t.string :ur10, :limit => 1
|
60
|
+
t.string :uace10, :limit => 1
|
61
|
+
t.string :uatyp10, :limit => 1
|
62
|
+
t.string :vtdi10, :limit => 1
|
63
|
+
t.string :cnectafp10, :limit => 3
|
64
|
+
t.string :nectafp10, :limit => 5
|
65
|
+
t.string :nctadvfp10, :limit => 5
|
66
|
+
t.string :funcstat10, :limit => 1
|
67
|
+
t.float :aland10, :length => 8
|
68
|
+
t.float :awater10, :length => 8
|
69
|
+
t.point :latlng, :srid=> 4326
|
70
|
+
t.geometry :geom, :srid=> 4326
|
71
|
+
t.decimal :intptlat10, :precision => 15, :scale => 12
|
72
|
+
t.decimal :intptlon10, :precision => 15, :scale => 12
|
73
|
+
end
|
74
|
+
add_index :<%= controller_name %>, [:type,:geoid10], :name => "geo_index", :unique=> true
|
75
|
+
execute "ALTER TABLE <%= controller_name %> RENAME COLUMN id TO gid;"
|
76
|
+
execute "CREATE INDEX b_point ON <%= controller_name %> USING GIST (latlng);";
|
77
|
+
execute "CREATE INDEX b_geom ON <%= controller_name %> USING GIST (geom);";
|
78
|
+
end
|
79
|
+
|
80
|
+
def down
|
81
|
+
drop_table :<%= controller_name %>
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
|
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'net/ftp'
|
2
|
+
require 'yaml'
|
3
|
+
require 'progress_bar'
|
4
|
+
|
5
|
+
CONFIG = YAML::load(File.open('config/database.yml'))
|
6
|
+
DB = CONFIG[Rails.env]['database']
|
7
|
+
USER = CONFIG[Rails.env]['username']
|
8
|
+
HOST = CONFIG[Rails.env]['host']
|
9
|
+
TEMPLATE = CONFIG[Rails.env]['template']
|
10
|
+
|
11
|
+
namespace :census_shapes do
|
12
|
+
desc "Import Census Shapes"
|
13
|
+
task :import => :environment do
|
14
|
+
if local_path(ENV['FILEPATH'])
|
15
|
+
for geo in format_args(ENV['SHAPE'], msg('install'))
|
16
|
+
before_import_set_defaults(geo)
|
17
|
+
puts "Importing Census Shape #{geo['name']} (#{geo['slug']})"
|
18
|
+
@dbar = ProgressBar.new(52)
|
19
|
+
for state in CENSUS_STATES
|
20
|
+
path = "#{CENSUS_SHAPES_PATH}/#{geo['path']}/"
|
21
|
+
file = "tl_2010_#{state[1]["id"].to_s.rjust(2,'0')}_#{geo['slug'].downcase}10"
|
22
|
+
download_zip(path, file, geo['slug'])
|
23
|
+
unzip_shapefiles(file, geo['slug'])
|
24
|
+
import_shapefiles(file, geo['slug'], ENV['ARCHIVE'])
|
25
|
+
@dbar.increment!
|
26
|
+
end
|
27
|
+
after_import_update_fields
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Validate Geometry"
|
33
|
+
task :validate_geometry => :environment do
|
34
|
+
@dbar = ProgressBar.new(Geography.count)
|
35
|
+
Geography.find_in_batches(:select=> "gid, geoid10, type, ST_IsValid(geom) AS isvalid", :batch_size => 100) do |batch|
|
36
|
+
batch.each do |geo|
|
37
|
+
if geo['isvalid'] == 'f';
|
38
|
+
puts "Geography #{geo['type']} : gid = #{geo['gid']}, geoid10 = #{geo['geoid10']} is #{geo['isvalid']}"
|
39
|
+
ActiveRecord::Base.connection.execute("UPDATE CONTROLLER_NAME SET geom = '#{geo.fix_geometry['geo']}' WHERE geoid10 = '#{geo.geoid10}' AND type = '#{geo.type}'")
|
40
|
+
puts "Geography fixed? #{ActiveRecord::Base.connection.execute("SELECT ST_IsValid(geom) AS isvalid FROM Geographies WHERE geoid10 = '#{geo.geoid10}' AND type = '#{geo.type}'").first['isvalid'] == 't'}"
|
41
|
+
end
|
42
|
+
@dbar.increment!
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "Repair Geometry"
|
48
|
+
task :repair_geometry => :environment do
|
49
|
+
for geo in format_args(ENV['SHAPE'], msg('repair'))
|
50
|
+
@dbar = ProgressBar.new(Geography.where(:type=> geo['slug'].capitalize).count)
|
51
|
+
Geography.find_in_batches(:select=> "gid, geoid10, name10, type, latlng, ST_AsText(geom) AS geo", :conditions => {:type => geo['slug'].capitalize}, :batch_size => 100) do |batch|
|
52
|
+
batch.each do |b|
|
53
|
+
rebuild = false
|
54
|
+
ids = ActiveRecord::Base.connection.execute("SELECT c.geoid10 FROM CONTROLLER_NAME AS p, CONTROLLER_NAME AS c WHERE c.geoid10 != '#{b.geoid10}' AND p.geoid10 = '#{b.geoid10}' AND c.type='#{b.type}' AND ST_DWithin(p.latlng, c.latlng, .5);").map{|id| id['geoid10']}
|
55
|
+
if !ids.empty?
|
56
|
+
intersects = Geography.where("geoid10 IN ('#{ids.join("','")}') AND type = '#{b.type}' AND ST_Intersects('#{b['geo']}', geom)")
|
57
|
+
if !intersects.empty?
|
58
|
+
polygons = b.polygons
|
59
|
+
intersects.each do |int|
|
60
|
+
int.polygons.each_with_index do |c, i|
|
61
|
+
current = ActiveRecord::Base.connection.execute("SELECT ST_Within('#{c}','#{b['geo']}') AS within").first
|
62
|
+
if !polygons.include?(c) && current['within'] == "t"
|
63
|
+
match = ActiveRecord::Base.connection.execute("SELECT #{polygons.map.with_index{|p, i| "ST_Intersects('#{p}', '#{c}') AS poly_#{i}"}.join(",")}").first.values.map{|aa| aa == "t" }
|
64
|
+
if !match.include?(true)
|
65
|
+
polygons << c
|
66
|
+
rebuild = true
|
67
|
+
puts "#{b.type} #{b.geoid10} has children #{int.geoid10}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
if rebuild
|
73
|
+
new_geom = Geography.merge(polygons)
|
74
|
+
if new_geom['isvalid']
|
75
|
+
ActiveRecord::Base.connection.execute("UPDATE CONTROLLER_NAME SET geom = '#{new_geom['geom']}' WHERE geoid10 = '#{b.geoid10}' AND type = '#{b.type}'")
|
76
|
+
else
|
77
|
+
ActiveRecord::Base.connection.execute("UPDATE CONTROLLER_NAME SET geom = ST_Buffer('#{new_geom['geom']}', .0000001) WHERE geoid10 = '#{b.geoid10}' AND type = '#{b.type}'")
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
@dbar.increment!
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def msg(type)
|
89
|
+
msg = "\nPlease specify one or more of the following Census shapes:\n\n"
|
90
|
+
msg += "#{CENSUS_SHAPES.map{|g| g[0]}.join(",")}\n\n"
|
91
|
+
if type == "install"
|
92
|
+
msg += "For example: rake census_shapes:install SHAPE=STATE,COUNTY\n\n"
|
93
|
+
msg += "Add the option 'ARCHIVE=true' to archive the zip files after importing."
|
94
|
+
elsif type== "validate"
|
95
|
+
msg += "For example: rake census_shapes:validate_geometry SHAPE=STATE,COUNTY\n\n"
|
96
|
+
elsif type== "repair"
|
97
|
+
msg += "For example: rake census_shapes:repair_geometry SHAPE=STATE,COUNTY\n\n"
|
98
|
+
end
|
99
|
+
return msg
|
100
|
+
end
|
101
|
+
|
102
|
+
def format_args(args, msg)
|
103
|
+
geos = []
|
104
|
+
if args.nil?
|
105
|
+
puts msg
|
106
|
+
else
|
107
|
+
args = args.split(",")
|
108
|
+
for arg in args
|
109
|
+
g = get_levels(arg.upcase)
|
110
|
+
geos << g if g
|
111
|
+
end
|
112
|
+
end
|
113
|
+
return geos
|
114
|
+
end
|
115
|
+
|
116
|
+
def get_levels(level)
|
117
|
+
if !level.nil? && CENSUS_SHAPES.include?(level.upcase)
|
118
|
+
return CENSUS_SHAPES[level]
|
119
|
+
else
|
120
|
+
return false
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def local_path(local="tmp/shapefiles/")
|
125
|
+
return @local if @local
|
126
|
+
`mkdir -p #{local}`
|
127
|
+
if !File.exists?(local) && !File.directory?(local)
|
128
|
+
puts "'#{local}' is not a valid file path."
|
129
|
+
return false
|
130
|
+
end
|
131
|
+
@local = local
|
132
|
+
return @local
|
133
|
+
end
|
134
|
+
|
135
|
+
def download_zip(path, file, shape)
|
136
|
+
if !File.exist?("#{local_path}#{shape}/#{file}.zip")
|
137
|
+
`mkdir -p #{local_path}#{shape}`
|
138
|
+
ftp = Net::FTP.new(CENSUS_HOST)
|
139
|
+
ftp.login(user = "anonymous")
|
140
|
+
ftp.chdir(path)
|
141
|
+
ftp.getbinaryfile("#{file}.zip", "#{local_path}#{shape}/#{file}.zip")
|
142
|
+
ftp.close
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def self.unzip_shapefiles(file, shape)
|
147
|
+
`unzip #{local_path}#{shape}/#{file}.zip -d #{local_path}#{shape}/#{file}` if File.exist?("#{local_path}#{shape}/#{file}.zip")
|
148
|
+
end
|
149
|
+
|
150
|
+
def self.import_shapefiles(file, shape, archive)
|
151
|
+
`shp2pgsql -W Latin1 -g geom -a -D #{local_path}#{shape}/#{file}/#{file} CONTROLLER_NAME #{TEMPLATE} | psql -h #{HOST} -U #{USER} -d #{DB}`
|
152
|
+
`rm -rf #{local_path}#{shape}/#{file}`
|
153
|
+
if archive.nil?
|
154
|
+
`rm #{local_path}#{shape}/#{file}.zip`
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def before_import_set_defaults(geo)
|
159
|
+
ActiveRecord::Base.connection.execute("ALTER TABLE ONLY CONTROLLER_NAME ALTER COLUMN type SET DEFAULT '#{geo['slug'].capitalize}'")
|
160
|
+
ActiveRecord::Base.connection.execute("ALTER TABLE ONLY CONTROLLER_NAME ALTER COLUMN sumlevel SET DEFAULT '#{geo['sumlevel']}'")
|
161
|
+
end
|
162
|
+
|
163
|
+
def after_import_update_fields
|
164
|
+
ActiveRecord::Base.connection.execute("UPDATE CONTROLLER_NAME SET latlng = ST_GeomFromText('POINT(' || intptlon10 || ' ' || intptlat10 || ')', 4326) WHERE latlng IS NULL;")
|
165
|
+
ActiveRecord::Base.connection.execute("UPDATE CONTROLLER_NAME SET name10 = namelsad10 WHERE namelsad10 IS NOT NULL AND name10 IS NULL;")
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
namespace :postgis_template do
|
2
|
+
desc "Creates Postgis Template"
|
3
|
+
task :create do
|
4
|
+
config = YAML::load(File.open('config/database.yml'))
|
5
|
+
template = config[Rails.env]['template']
|
6
|
+
user = config[Rails.env]['username']
|
7
|
+
host = config[Rails.env]['host']
|
8
|
+
postgis_path = config[Rails.env]['postgis_path']
|
9
|
+
|
10
|
+
existing = `psql -U #{user} -h #{host} -U #{user} --list`
|
11
|
+
if existing.scan(template).empty?
|
12
|
+
`createdb -U #{user} #{template} -h #{host} -U #{user} -E UTF8`
|
13
|
+
`createlang -d #{template} plpgsql -h #{host} -U #{user}`
|
14
|
+
`psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='#{template}';"`
|
15
|
+
`psql -h #{host} -U #{user} -d #{template} -f #{postgis_path}postgis.sql`
|
16
|
+
`psql -h #{host} -U #{user} -d #{template} -f #{postgis_path}spatial_ref_sys.sql`
|
17
|
+
`psql -d #{template} -c "GRANT ALL ON geometry_columns TO PUBLIC;"`
|
18
|
+
`psql -d #{template} -c "GRANT ALL ON geography_columns TO PUBLIC;"`
|
19
|
+
`psql -d #{template} -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"`
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
---
|
2
|
+
STATE:
|
3
|
+
sumlevel: '040'
|
4
|
+
slug: STATE
|
5
|
+
name: State
|
6
|
+
description: state
|
7
|
+
path: STATE/2010
|
8
|
+
COUNTY:
|
9
|
+
sumlevel: '050'
|
10
|
+
slug: COUNTY
|
11
|
+
name: County
|
12
|
+
description: state-county
|
13
|
+
path: COUNTY/2010
|
14
|
+
COUSUB:
|
15
|
+
sumlevel: '060'
|
16
|
+
slug: COUSUB
|
17
|
+
name: County Subdivision
|
18
|
+
description: state-county-county subdivision
|
19
|
+
path: COUSUB/2010
|
20
|
+
SUBMCD:
|
21
|
+
sumlevel: '067'
|
22
|
+
slug: SUBMCD
|
23
|
+
name: Subminor Civil Subdivision
|
24
|
+
description: state-county-county subdivision-subminor civil subdivision
|
25
|
+
path: SUBMCD/2010
|
26
|
+
TABBLOCK:
|
27
|
+
sumlevel: '101'
|
28
|
+
slug: TABBLOCK
|
29
|
+
name: Block
|
30
|
+
description: state-county-tract-block
|
31
|
+
path: TABBLOCK/2010
|
32
|
+
TRACT:
|
33
|
+
sumlevel: '140'
|
34
|
+
slug: TRACT
|
35
|
+
name: Tract
|
36
|
+
description: state-county-tract
|
37
|
+
path: TRACT/2010
|
38
|
+
BG:
|
39
|
+
sumlevel: '150'
|
40
|
+
slug: BG
|
41
|
+
name: Block Group
|
42
|
+
description: state-county-tract-block group
|
43
|
+
path: BG/2010
|
44
|
+
PLACE:
|
45
|
+
sumlevel: '160'
|
46
|
+
slug: PLACE
|
47
|
+
name: Place
|
48
|
+
description: state-place
|
49
|
+
path: PLACE/2010
|
50
|
+
ANRC:
|
51
|
+
sumlevel: '230'
|
52
|
+
slug: ANRC
|
53
|
+
name: Alaska Native Regional Corporation
|
54
|
+
description: state-alaska native regional corporation
|
55
|
+
path: ANRC/2010
|
56
|
+
AIANNH:
|
57
|
+
sumlevel: '280'
|
58
|
+
slug: AIANNH
|
59
|
+
name: American Indian Area/Alaska Native Area/Hawaiian Home Land
|
60
|
+
description: state-american indian area/alaska native area/hawaiian home land
|
61
|
+
path: AIANNH/2010
|
62
|
+
AITS:
|
63
|
+
sumlevel: '281'
|
64
|
+
slug: AITS
|
65
|
+
name: American Indian Tribal Subdivision
|
66
|
+
description: state-american indian area-tribal subdivision
|
67
|
+
path: AITS/2010
|
68
|
+
CBSA:
|
69
|
+
sumlevel: '320'
|
70
|
+
slug: CBSA
|
71
|
+
name: Metropolitan Statistical Area/Micropolitan Statistical Area
|
72
|
+
description: state-metropolitan statistical area/micropolitan statistical area
|
73
|
+
path: CBSA/2010
|
74
|
+
METDIV:
|
75
|
+
sumlevel: '323'
|
76
|
+
slug: METDIV
|
77
|
+
name: Metropolitan Division
|
78
|
+
description: state-metropolitan statistical area/micropolitan statistical area-metropolitan division
|
79
|
+
path: METDIV/2010
|
80
|
+
CSA:
|
81
|
+
sumlevel: '340'
|
82
|
+
slug: CSA
|
83
|
+
name: Combined Statistical Area
|
84
|
+
description: state-combined statistical area
|
85
|
+
path: CSA/2010
|
86
|
+
CD:
|
87
|
+
sumlevel: '500'
|
88
|
+
slug: CD
|
89
|
+
name: Congressional District (111th)
|
90
|
+
description: state-congressional district (111th)
|
91
|
+
path: CD/111
|
92
|
+
SLDU:
|
93
|
+
sumlevel: '610'
|
94
|
+
slug: SLDU
|
95
|
+
name: State Legislative District (Upper Chamber)
|
96
|
+
description: state-state legislative district (upper chamber)
|
97
|
+
path: SLDU/2010
|
98
|
+
SLDL:
|
99
|
+
sumlevel: '620'
|
100
|
+
slug: SLDL
|
101
|
+
name: State Legislative District (Lower Chamber)
|
102
|
+
description: state-state legislative district (lower chamber)
|
103
|
+
path: SLDL/2010
|
104
|
+
VTD:
|
105
|
+
sumlevel: '700'
|
106
|
+
slug: VTD
|
107
|
+
name: Voting District
|
108
|
+
description: State-County-Voting District/Remainder
|
109
|
+
path: VTD/2010
|
110
|
+
ZCTA5:
|
111
|
+
sumlevel: '871'
|
112
|
+
slug: ZCTA5
|
113
|
+
name: ZIP Code Tabulation Area
|
114
|
+
description: state-zip code tabulation area
|
115
|
+
path: ZCTA5/2010
|
116
|
+
ELSD:
|
117
|
+
sumlevel: '950'
|
118
|
+
slug: ELSD
|
119
|
+
name: School District (Elementary)
|
120
|
+
description: State-School District (Elementary)/Remainder
|
121
|
+
path: ELSD/2010
|
122
|
+
SCSD:
|
123
|
+
sumlevel: '960'
|
124
|
+
slug: SCSD
|
125
|
+
name: School District (Secondary)
|
126
|
+
description: State-School District (Secondary)/Remainder
|
127
|
+
path: SCSD/2010
|
128
|
+
UNSD:
|
129
|
+
sumlevel: '970'
|
130
|
+
slug: UNSD
|
131
|
+
name: School District (Unified)
|
132
|
+
description: State-School District (Unified)/Remainder
|
133
|
+
path: UNSD/2010
|
@@ -0,0 +1,209 @@
|
|
1
|
+
---
|
2
|
+
Alabama:
|
3
|
+
id: 1
|
4
|
+
abbr: AL
|
5
|
+
name: Alabama
|
6
|
+
Alaska:
|
7
|
+
id: 2
|
8
|
+
abbr: AK
|
9
|
+
name: Alaska
|
10
|
+
Arizona:
|
11
|
+
id: 4
|
12
|
+
abbr: AZ
|
13
|
+
name: Arizona
|
14
|
+
Arkansas:
|
15
|
+
id: 5
|
16
|
+
abbr: AR
|
17
|
+
name: Arkansas
|
18
|
+
California:
|
19
|
+
id: 6
|
20
|
+
abbr: CA
|
21
|
+
name: California
|
22
|
+
Colorado:
|
23
|
+
id: 8
|
24
|
+
abbr: CO
|
25
|
+
name: Colorado
|
26
|
+
Connecticut:
|
27
|
+
id: 9
|
28
|
+
abbr: CT
|
29
|
+
name: Connecticut
|
30
|
+
Delaware:
|
31
|
+
id: 10
|
32
|
+
abbr: DE
|
33
|
+
name: Delaware
|
34
|
+
District of Columbia:
|
35
|
+
id: 11
|
36
|
+
abbr: DC
|
37
|
+
name: District of Columbia
|
38
|
+
Florida:
|
39
|
+
id: 12
|
40
|
+
abbr: FL
|
41
|
+
name: Florida
|
42
|
+
Georgia:
|
43
|
+
id: 13
|
44
|
+
abbr: GA
|
45
|
+
name: Georgia
|
46
|
+
Hawaii:
|
47
|
+
id: 15
|
48
|
+
abbr: HI
|
49
|
+
name: Hawaii
|
50
|
+
Idaho:
|
51
|
+
id: 16
|
52
|
+
abbr: ID
|
53
|
+
name: Idaho
|
54
|
+
Illinois:
|
55
|
+
id: 17
|
56
|
+
abbr: IL
|
57
|
+
name: Illinois
|
58
|
+
Indiana:
|
59
|
+
id: 18
|
60
|
+
abbr: IN
|
61
|
+
name: Indiana
|
62
|
+
Iowa:
|
63
|
+
id: 19
|
64
|
+
abbr: IA
|
65
|
+
name: Iowa
|
66
|
+
Kansas:
|
67
|
+
id: 20
|
68
|
+
abbr: KS
|
69
|
+
name: Kansas
|
70
|
+
Kentucky:
|
71
|
+
id: 21
|
72
|
+
abbr: KY
|
73
|
+
name: Kentucky
|
74
|
+
Louisiana:
|
75
|
+
id: 22
|
76
|
+
abbr: LA
|
77
|
+
name: Louisiana
|
78
|
+
Maine:
|
79
|
+
id: 23
|
80
|
+
abbr: ME
|
81
|
+
name: Maine
|
82
|
+
Maryland:
|
83
|
+
id: 24
|
84
|
+
abbr: MD
|
85
|
+
name: Maryland
|
86
|
+
Massachusetts:
|
87
|
+
id: 25
|
88
|
+
abbr: MA
|
89
|
+
name: Massachusetts
|
90
|
+
Michigan:
|
91
|
+
id: 26
|
92
|
+
abbr: MI
|
93
|
+
name: Michigan
|
94
|
+
Minnesota:
|
95
|
+
id: 27
|
96
|
+
abbr: MN
|
97
|
+
name: Minnesota
|
98
|
+
Mississippi:
|
99
|
+
id: 28
|
100
|
+
abbr: MS
|
101
|
+
name: Mississippi
|
102
|
+
Missouri:
|
103
|
+
id: 29
|
104
|
+
abbr: MO
|
105
|
+
name: Missouri
|
106
|
+
Montana:
|
107
|
+
id: 30
|
108
|
+
abbr: MT
|
109
|
+
name: Montana
|
110
|
+
Nebraska:
|
111
|
+
id: 31
|
112
|
+
abbr: NE
|
113
|
+
name: Nebraska
|
114
|
+
Nevada:
|
115
|
+
id: 32
|
116
|
+
abbr: NV
|
117
|
+
name: Nevada
|
118
|
+
New Hampshire:
|
119
|
+
id: 33
|
120
|
+
abbr: NH
|
121
|
+
name: New Hampshire
|
122
|
+
New Jersey:
|
123
|
+
id: 34
|
124
|
+
abbr: NJ
|
125
|
+
name: New Jersey
|
126
|
+
New Mexico:
|
127
|
+
id: 35
|
128
|
+
abbr: NM
|
129
|
+
name: New Mexico
|
130
|
+
New York:
|
131
|
+
id: 36
|
132
|
+
abbr: NY
|
133
|
+
name: New York
|
134
|
+
North Carolina:
|
135
|
+
id: 37
|
136
|
+
abbr: NC
|
137
|
+
name: North Carolina
|
138
|
+
North Dakota:
|
139
|
+
id: 38
|
140
|
+
abbr: ND
|
141
|
+
name: North Dakota
|
142
|
+
Ohio:
|
143
|
+
id: 39
|
144
|
+
abbr: OH
|
145
|
+
name: Ohio
|
146
|
+
Oklahoma:
|
147
|
+
id: 40
|
148
|
+
abbr: OK
|
149
|
+
name: Oklahoma
|
150
|
+
Oregon:
|
151
|
+
id: 41
|
152
|
+
abbr: OR
|
153
|
+
name: Oregon
|
154
|
+
Pennsylvania:
|
155
|
+
id: 42
|
156
|
+
abbr: PA
|
157
|
+
name: Pennsylvania
|
158
|
+
Rhode Island:
|
159
|
+
id: 44
|
160
|
+
abbr: RI
|
161
|
+
name: Rhode Island
|
162
|
+
South Carolina:
|
163
|
+
id: 45
|
164
|
+
abbr: SC
|
165
|
+
name: South Carolina
|
166
|
+
South Dakota:
|
167
|
+
id: 46
|
168
|
+
abbr: SD
|
169
|
+
name: South Dakota
|
170
|
+
Tennessee:
|
171
|
+
id: 47
|
172
|
+
abbr: TN
|
173
|
+
name: Tennessee
|
174
|
+
Texas:
|
175
|
+
id: 48
|
176
|
+
abbr: TX
|
177
|
+
name: Texas
|
178
|
+
Utah:
|
179
|
+
id: 49
|
180
|
+
abbr: UT
|
181
|
+
name: Utah
|
182
|
+
Vermont:
|
183
|
+
id: 50
|
184
|
+
abbr: VT
|
185
|
+
name: Vermont
|
186
|
+
Virginia:
|
187
|
+
id: 51
|
188
|
+
abbr: VA
|
189
|
+
name: Virginia
|
190
|
+
Washington:
|
191
|
+
id: 53
|
192
|
+
abbr: WA
|
193
|
+
name: Washington
|
194
|
+
West Virginia:
|
195
|
+
id: 54
|
196
|
+
abbr: WV
|
197
|
+
name: West Virginia
|
198
|
+
Wisconsin:
|
199
|
+
id: 55
|
200
|
+
abbr: WI
|
201
|
+
name: Wisconsin
|
202
|
+
Wyoming:
|
203
|
+
id: 56
|
204
|
+
abbr: WY
|
205
|
+
name: Wyoming
|
206
|
+
Puerto Rico:
|
207
|
+
id: 72
|
208
|
+
abbr: PR
|
209
|
+
name: Puerto Rico
|