주소 센서스 트랙 및 블록의 대량 조회


16

많은 수의 주소를 코딩하고 인구 조사 기관 및 블록 데이터를 반환하거나 추가하는 무료 또는 저렴한 방법이 있습니까?

주소를 지오 코딩하고 위도를 연장하는 방법에는 여러 가지가 있지만, 인구 조사 기관과 블록 데이터를 가져와야합니다.

답변:


16

Ok Ben, 여기 내 가정이 있습니다 :

1) 데이터가 이미 있습니다 (모양 파일에 주소 지점이 있고 미주리 주 인구 조사 및 인구 조사 블록 셰이프 파일을 다운로드했습니다).

2) 이미 주소 지점을 지오 코딩했으며 데이터를 편안하게 투사 할 수 있습니다.

3) OGR / PostGIS 솔루션에 만족합니다 (둘 다 무료).

다음 소프트웨어가없는 경우 몇 가지 설치 정보가 있습니다 . PostGIS 지원으로 PostGRE를 설치하는 방법 . (BostonGIS. 제목에 불쾌감을주지 말고, 그것이 가장 좋은 방법이라고 생각합니다.) 또한 파이썬 바인딩으로 GDAL / OGR을 설치하는 방법을 설명하는 1 , 2 , 3 사이트가 있습니다.

주의 사항 : 실제 분석 (즉ST_Contains, 아래 내용)을수행하기 전에 모든 레이어가 동일한 투영 상태에 있는지 확인 해야 합니다 ! 쉐이프 파일이있는 경우 Quantum GIS (QGIS) 또는 OGR (또는 ArcGIS가있는 경우 )을 사용하여 한 투영에서 다른 투영으로 쉽게 변환할 수 있습니다. 또는 PostGIS 기능을 사용하여 데이터베이스에서 투영 변환을 수행 할 수 있습니다. 기본적으로 독을 선택하거나 이것이 걸림돌인지 알려주십시오.

그와 같은 방법으로 PostGIS를 사용하여 일부 주소 데이터에 트랙트 및 블록 특성을 추가했습니다.

먼저 ogr2ogr세 가지 shapefile을 PostGIS로 가져 왔습니다.

ogr2ogr을 사용하여 주소 가져 오기 :

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "E:\path_to\addresses.shp" -nln mcdon_addresses -nlt geometry

가져 오기 인구 조사 책자 ogr2ogr 사용 (미주리) :spMoWest 접미사 의미 이미 미주리 주 평면 웨스트 발을 내 데이터를 번역했다.

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "E:\path_to\st_tract10_spMoWest.shp" -nln mo_tracts_2010 -nlt geometry

가져 오기 블록 데이터 (미주리) : 시간 이 오래 걸렸습니다. 사실, 내 컴퓨터는 계속 충돌했고 나는 그것에 팬을 넣어야했다! 아, 또한 ogr2ogr피드백을 제공하지 않으므로 펀치하지 마십시오. 기다렸다가 결국 완료됩니다.

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "E:\path_to\st_block10_spMoWest.shp" -nln mo_blocks_2010 -nlt geometry

데이터 가져 오기가 완료되면 PgAdmin III (PostGRE GUI)을 시작하고 데이터베이스를 탐색 한 후 빠른 유지 보수 명령을 던져서 새 데이터를 사용하여 PostGREsql이 더 빨리 실행되도록하십시오.

vacuum mcdon_addresses;
vacuum mo_tracts_2010;
vacuum mo_blocks_2010;

다음으로, 몇 개의 원시 주소 포인트를 가져 왔는지 궁금해서 빨리했습니다 COUNT(*). 나는 보통 이런 작업을 시작할 때 나중에 "위생 확인"을위한 발판을 마련하기 위해 카운트를한다.

SELECT COUNT(*) FROM mcdon_addresses;
-- 11979

다음 단계에서는 두 개의 새 테이블을 만들어 서서히 주소 속성 테이블에 tracts 속성을 추가 한 다음 블록 속성을 추가했습니다. 보시다시피 PostGIS ST_Contains함수는 각각의 경우에 새로운 포인트 테이블을 생성하여 각각의 트랙과 속성의 폴리곤을 얻었습니다.

노트! 간결하게하기 위해 각 테이블에서 소수의 필드 만 가져옵니다. 당신은 아마 거의 모든 것을 원할 것입니다. 나는 당신이 결합하고있는 테이블에서 필드 를 생략해야하기 때문에 거의ogr_fid을합니다. 그렇지 않으면 PostGRE는 동일한 이름을 가진 두 필드에 대해 불평합니다.

(PS 나는 이것을 알아내는 동안 여기에서 스누핑을했습니다 : http://postgis.net/docs/manual-1.4/ch04.html )

tracts 속성을 사용하여 새 주소 지점 테이블을 만듭니다. 참고 각 출력 열 앞에 시작하는 테이블을 설명하는 힌트를 접두어로 붙입니다 (아래에서 이유를 설명하겠습니다).

CREATE TABLE mcdon_addresses_wtract AS
SELECT 
  a.wkb_geometry,
  a.route AS addr_route, 
  a.box AS addr_box, 
  a.new_add AS addr_new_add, 
  a.prefix AS addr_prefix, 
  a.rdname AS addr_rdname, 
  a.road_name AS addr_road_name, 
  a.city AS addr_city, 
  a.state AS addr_state, 
  a.zip AS addr_zip,
  t.statefp10 AS tr_statefp10, 
  t.countyfp10 AS tr_countyfp10, 
  t.tractce10 AS tr_tractce10,  
  t.name10 AS tr_name10, 
  t.pop90 AS tr_pop90, 
  t.white90 AS tr_white90, 
  t.black90 AS tr_black90, 
  t.asian90 AS tr_asian90, 
  t.amind90 AS tr_amind90, 
  t.other90 AS tr_other90, 
  t.hisp90 AS tr_hisp90
FROM
  mcdon_addresses AS a,
  mo_tracts_2010 AS t
WHERE 
  ST_Contains(t.wkb_geometry, a.wkb_geometry);

PostGRE가 계속 원활하게 실행되도록 테이블을 유지 보수하십시오.

vacuum mcdon_addresses_wtract;

이제 두 가지 질문이있었습니다 ..

ST_Contains가 실제로 작동 했습니까? ..... 반환 된 주소 수는 내가 사용한 데이터 입력에 따라 의미가 있습니까?

동일한 쿼리를 사용하여 둘 다 대답 할 수있었습니다.

select count(*) from mcdon_addresses_wtract;
-- returns 11848

손실에 대한 빠른 반영 : 먼저 ArcGIS를 확인하고 (QGIS 에서도이 작업을 수행 할 수 있음) 동일한 수를 반환했습니다. 왜 차이점이 있습니까? 첫째, 일부 주소는 미주리 주 외부로 떨어졌으며 미주리 지역 다각형과 만 비교했습니다. 둘째, 면밀한 분석에서 주소 데이터에 잘못된 디지털화의 예가있는 것 같습니다. 특히, 잡히지 않은 많은 포인트 ST_Contains는 빈 속성 필드 를 가졌으며 이는 디지털화 과정에서 무언가가 잘못되었다는 좋은 신호입니다. 또한 어쨌든 사용 가능한 데이터가 아니었다는 것을 의미합니다. 이 시점에서 저는 합리적으로 돌아가서 데이터를 개선하여보다 명확한 분석을 수행 할 수있는 차이점에 익숙합니다.

다음 단계는 블록 데이터의 속성과 함께 address / tracts 테이블을 추가하는 것입니다. 마찬가지로 새 테이블을 만들어 각 출력 필드에 접두사를 붙여 다시 테이블을 나타냅니다 (접두사가 매우 중요합니다).

CREATE TABLE mcdon_addr_trct_and_blk AS
SELECT 
  a.*,
  b.pop90 AS blk_pop90, 
  b.white90 AS blk_white90, 
  b.black90 AS blk_black90, 
  b.asian90 AS blk_asian90, 
  b.amind90 AS blk_amind90, 
  b.other90 AS blk_other90, 
  b.hisp90 AS blk_hisp90
FROM 
  mcdon_addresses_wtract AS a,
  mo_blocks_2010 AS b
WHERE
  ST_Contains(b.wkb_geometry, a.wkb_geometry);

물론 테이블을 유지하십시오.

vacuum mcdon_addr_trct_and_blk;

각 출력 필드 앞에 접두사를 붙인 이유는 그렇지 않은 경우 일부 필드의 이름이 같고 최종 제품에서 서로 구별하는 것이 불가능하기 때문입니다. PostGRE는 중간에 불만을 제기했을 수 있습니다. 그러나 이름을 바꾼 이후에는 기회가 없었습니다). 예를 들어, 위의 두 단계에서 다음 두 필드를 고려하십시오. 내가 이름을 바꾼 이유를 알 수 있습니다.

t.pop90 AS tr_pop90   -- would have been simply pop90
b.pop90 AS blk_pop90  -- also would have been pop90 ! 

이제 트랙과 블록 데이터 셋이있는 주소를 가지게되었는데, 여전히 같은 수의 포인트가 있습니까?

select count(*) from mcdon_addr_trct_and_blk;
-- 11848 (thumbs up!)

응 우리는 그래! 원하는 경우 계속 만든 첫 번째 테이블 인을 (를) 삭제할 수 있습니다 mcdon_addresses_wtract. 더 이상 분석에 필요하지 않습니다.

마지막 작업으로, 당신은 할 수 는 ArcGIS처럼, 그래서 ESRI의 모양 파일로 포스트 그레스에서 데이터를 내보낼 수는 다른 프로그램을 볼 수 원하는 (참고로, QGIS는 문제없이 PostGIS와 데이터를 읽을 수 있습니다.) 관심이 있다면 ogr2ogr을 사용하여 변환을 수행하는 방법은 다음과 같습니다.

ogr2ogr -f "ESRI Shapefile" "E:\path_to\addr_trct_blk.shp" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "mcdon_addr_trct_and_blk"

마지막으로이 명령을 실행하면 다음과 같은 경고가 표시 될 수 있습니다.

경고 6 : 정규화 / 세탁 된 필드 이름 : 'tr_statefp10'~ 'tr_statefp'

이것은 shapefile의 필드 이름이 너무 길 수 있기 때문에 OGR이 해당 필드 이름을 줄여야 함을 의미합니다.

물론이 작업을 수행하는 여러 가지 방법 중 하나 일뿐입니다.


9

FCC에는 API가 있습니다 : http://www.fcc.gov/developer/census-block-conversions-api


2
+1이 상대적으로 모호한 사이트 (누가 센서스 데이터를 보러 갈 것인가?)는 문제에 대해 강력하고 직접 적용 가능한 솔루션을 제공하는 것으로 보입니다. 우리 커뮤니티, 밥에 오신 것을 환영합니다!
whuber

이 fcc 사이트는 센서스가 게시 한 블록 레벨 맵과 비교했을 때 정답을 제시하지 못했습니다. Google지도에서 위도 / 경도를 사용했습니다. census.gov/geo/maps-data/maps/block/2010/place/…
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.