This chapter documents features found in the extras folder of the PostGIS source tarballs and source repository. These are not always packaged with PostGIS binary releases, but are usually PL/pgSQL based or standard shell scripts that can be run as is.
이 도구는 PAGC standardizer 의 한 갈래(fork)입니다(이 갈래의 원본 코드는 PAGC PostgreSQL 주소 표준화 도구 였습니다).
주소 표준화 도구는 단일 라인 주소 파싱 도구로, 주소를 입력받아 테이블에 저장된 일련의 규칙 및 도우미 어휘 목록(lexicon; lex) 테이블 과 지명 색인(gazetteer; gaz) 테이블 에 기반해서 정규화합니다.
CREATE EXTENSION address_standardizer;
명령으로 설치할 수 있는 address_standardizer
라는 단일 PostgreSQL 확장 프로그램 라이브러리로 코드를 빌드합니다. address_standardizer
확장 프로그램에 더해, address_standardizer_data_us
라는 샘플 데이터 확장 프로그램도 빌드하는데, 미국 데이터에 대한 지명 색인, 어휘 목록, 규칙 테이블을 담고 있습니다. CREATE EXTENSION address_standardizer_data_us;
명령으로 이 확장 프로그램을 설치할 수 있습니다.
PostGIS extensions/address_standardizer
에서 이 확장 프로그램을 위한 코드를 찾을 수 있으며, 현재 독립적으로 돼 있습니다.
설치에 대한 지침을 보고 싶다면 Section 2.3, “주소 표준화 도구 설치 및 활용” 를 참조하십시오.
파싱 도구는 오른쪽에서 왼쪽 방향으로 먼저 우편번호, 주/도, 시군구에 해당하는 거시적(macro) 요소를 탐색한 다음, 가구의 번지수 또는 교차점 또는 랜드마크 가운데 어떤 것을 처리하고 있는지 결정하기 위한 미시적(micro) 요소를 탐색합니다. 현재 국가 코드 또는 국가명을 탐색하지는 않지만, 향후 추가될 수도 있습니다.
미국 또는 캐나다의 주/도, 미국 또는 캐나다의 우편번호를 바탕으로 미국 또는 캐나다로 가정합니다.
펄(Perl) 호환 정규 표현식을 이용해서 우편번호를 인식합니다. 이 정규 표현식은 현재 parseaddress-api.c 파일에 담겨 있고, 필요한 경우 상대적으로 쉽게 변경할 수 있습니다.
펄(Perl) 호환 정규 표현식을 이용해서 우편번호를 인식합니다. 이 정규 표현식은 현재 parseaddress-api.c 파일에 담겨 있는데, 향후 유지보수를 더 쉽게 하기 위해 "includes"로 이동할 수도 있습니다.
standardize_address
함수가 이 유형을 반환합니다.이 단원에서 address_standardizer가 주소를 정규화하기 위해 이용하는 PostgreSQL 테이블 서식 목록을 소개합니다. 이 테이블들의 명칭을 여기에 소개된 대로 명명할 필요는 없다는 점에 주의하십시오. 예를 들어 각 국가 또는 사용자 지정 지오코딩 도구에 대해 서로 다른 어휘 목록(lex), 지명 색인(gaz), 규칙 테이블을 쓸 수 있습니다. 주소 표준화 도구 함수에 이 테이블들의 명칭을 넘겨줍니다.
패키징된 address_standardizer_data_us
확장 프로그램이 미국 주소를 표준화하기 위한 데이터를 담고 있습니다.
미국 인구조사국이 배포한 TIGER (Topologically Integrated Geographic Encoding and Referencing system ) / Line and Master Address database export 과 함께 동작하도록 작성된 PL/pgSQL 기반 지오코딩 도구입니다.
지오코딩 도구는 네 가지 구성 요소로 이루어져 있습니다: 데이터 로더 함수, 주소 정규화 도구, 주소 지오코딩 도구, 그리고 역 지오코딩 도구입니다.
TIGER 지오코딩 도구가 특별히 미국을 위해 설계되긴 했지만, 대부분의 개념 및 함수를 다른 국가의 주소 및 도로망과 함께 동작하도록 조정할 수 있습니다.
스크립트가 TIGER 관련 모든 함수 및 도로 유형 접두사, 접미사, 주와 같은 재사용할 수 있는 색인 데이터, 데이터 로드를 관리하기 위한 여러 제어 테이블, 그리고 TIGER가 로드한 모든 테이블이 승계하는, 필요한 최소한의 기본(skeleton) 기반 테이블들을 보관하는 tiger
라는 스키마를 빌드합니다.
로더가 인구조사 사이트에서 다운로드하고 데이터베이스에 로드한, 각 주에 대한 모든 인구조사 데이터를 보관하는 tiger_data
라는 또다른 스키마도 생성합니다. 현재 모델에서, 주(州) 테이블들의 각 집합에 해당 주 데이터만 강제하도록 하는 제약조건과 함께 ma_addr
, ma_edges
등과 같은 주 코드 접두사를 붙입니다. 각 테이블은 tiger schema
안에 위치한 addr
, faces
, edges
등과 같은 테이블들을 승계합니다.
모든 지오코딩 함수는 기반 테이블들만 참조하기 때문에, 데이터 스키마를 tiger_data
라고 명명하거나 또는 다른 스키마에 데이터를 한 단계 더 분할할 수 없다거나 할 필요는 없습니다. 예를 들어 각 주에 대해 서로 다른 스키마를 쓸 수 있습니다. 모든 테이블이 tiger
스키마의 테이블을 승계하는 한 말이죠.
사용자 데이터베이스에서 확장 프로그램을 활성화하는 방법 및 이를 통해 데이터를 로드하는 방법에 대한 지침을 알고 싶다면, Section 2.4.1, “Tiger Geocoder Enabling your PostGIS database” 을 참조하십시오.
TIGER 지오코딩 도구(tiger_2010)를 사용중이라면, extras/tiger 폴더에 첨부된 upgrade_geocoder.bat 또는 .sh 스크립트를 실행해서 스크립트들을 업그레이드할 수 있습니다. |
PostGIS 2.2.0 배포본이 TIGER 2015 데이터를 지원하기 시작했고, 주소 표준화 도구를 PostGIS의 한 부분으로 포함했습니다. PostGIS 2.1.0 배포본부터, PostgreSQL 9.1 이상 버전을 실행중일 경우, TIGER 지오코딩 도구를 PostgreSQL 확장 프로그램 모델과 함께 설치할 수 있게 됐습니다. 자세한 내용은 Section 2.4.1, “Tiger Geocoder Enabling your PostGIS database” 을 참조하십시오. |
Pagc_Normalize_Address 함수는 내장된 Normalize_Address 함수와 바로 바꿔 쓸 수 있는 대체 함수입니다. 컴파일 및 설치 지침을 알고 싶다면 Section 2.3, “주소 표준화 도구 설치 및 활용” 를 참조하십시오.
설계:
이 프로젝트의 목표는 임의의 미국 주소 스트링을 처리하고, 정규화된 TIGER 인구조사 데이터를 이용해서 주어진 주소의 위치 및 해당 위치의 가능성을 반영한 포인트 도형 및 순위(rating)를 생성할 수 있는, 모든 기능을 갖춘 지오코딩 도구를 빌드하는 것입니다. 순위 번호가 높을수록 결과가 나빠집니다.
PostGIS 2.0.0 버전에서 처음 도입된 reverse_geocode
함수는 GPS 위치의 도로 주소 및 교차로를 추출하는 데 유용합니다.
지오코딩 도구는 PostGIS에 익숙한 사람이라면 누구나 설치하고 이용할 수 있을 만큼 단순해야 하며, PostGIS가 지원하는 플랫폼 상에서 쉽게 설치하고 이용할 수 있어야 합니다.
지오코딩 도구는 서식 및 철자 오류가 있더라도 제대로 기능할 수 있을 만큼 강력해야 합니다.
지오코딩 도구는 향후 데이터를 업데이트, 또는 데이터소스를 대체하더라도 최소한의 코딩 변경만으로 이용할 수 있을 만큼 확장성을 갖춰야 합니다.
지오코딩 도구 함수들이 제대로 동작하려면 데이터베이스 탐색 경로에 |
tiger_data
스키마를 대상으로 합니다.county_all
, state_all
로 시작하는 테이블, 또는 뒤에 county
, state
가 붙는 주(州) 코드를 모두 삭제하는 스크립트를 생성합니다.tiger_data
스키마를 대상으로 합니다.geomout
, 각 위치에 대한 normalized_address
(addy) 및 순위도 포함하는, 교차점에서 처음 가로지르는 도로에 있는 가능성 있는 위치들의 집합을 출력합니다. 순위가 낮을수록 주소와 위치가 일치할 가능성이 커집니다. 결과를 순위가 낮은 순서로 정렬합니다. 결과의 최대 개수(기본값 10) 옵션 파라미터를 넘겨줄 수 있습니다. TIGER 데이터(edge, face, addr) 및 PostgreSQL 퍼지 문자열 매칭(soundex, levenshtein)을 이용합니다.tiger_data
스키마에 단계별로 로드하는 셸 스크립트를 생성합니다. 각 주(州)의 스크립트를 개별 레코드로 반환합니다.tiger_data
스키마에 단계별로 로드하는 셸 스크립트를 생성합니다. 각 주(州)의 스크립트를 개별 레코드로 반환합니다. 최신 버전은 TIGER 2010 구조 변경 사항을 지원하며, 인구조사 구역, 블록 그룹, 블록 테이블도 로드합니다.norm_addy
합성 유형을 반환합니다. 이 함수는 tiger_geocoder와 함께 패키징된 색인 데이터만 이용해서 (TIGER 인구조사 데이터는 필요없이) 작동할 것입니다.norm_addy
합성 유형을 반환합니다. 이 함수는 tiger_geocoder와 함께 패키징된 색인 데이터만 이용해서 (TIGER 인구조사 데이터는 필요없이) 작동할 것입니다. address_standardizer 확장 프로그램이 필요합니다.norm_addy
복합 유형 객체를 입력받아, 해당 객체의 보기 좋은 인쇄용 표현을 반환합니다. 일반적으로 normalize_address 함수와 결합해서 쓰입니다.TIGER 지오코딩 도구와 달리 여러 국가의 지오코딩을 지원한다는 장점을 가진, PostGIS를 지원하는 몇몇 오픈소스 지오코딩 도구들이 있습니다.
Nominatim 은 OpenStreetMap 지명 색인 데이터 형식을 이용합니다. 데이터를 로드하기 위해 osm2pgsql이, 제대로 동작하기 위해 PostgreSQL 8.4 이상 버전 및 PostGIS 1.5 이상 버전이 필요합니다. 웹서비스 인터페이스로 패키징됐으며, 웹서비스로 호출하기 위해 설계된 것으로 보입니다. TIGER 지오코딩 도구와 마찬가지로, 지오코딩 도구 및 역 지오코딩 도구 구성 요소들을 모두 가지고 있습니다. 문서상에서 보면, Nominatim이 TIGER 지오코딩 도구처럼 순수한 SQL 인터페이스를 가지고 있는지, 또는 웹 인터페이스에 충분한 로직을 구현했는지 불확실합니다.
GIS Graphy 또한 PostGIS를 활용하며 Nominatim처럼 OSM(OpenStreetMap) 데이터를 이용합니다. OSM 데이터를 로드하기 위한 로더를 갖추고 있고, Nominatim와 유사하게 미국 이외의 국가의 지오코딩도 할 수 있습니다. Nominatim과 마찬가지로, 웹서비스로 실행되며 Java 1.5, Servlet apps, Solr에 의존합니다. GIS Graphy는 여러 플랫폼 상에서 실행되며, 몇몇 멋진 기능과 함께 역 지오코딩 도구도 가지고 있습니다.