PostGIS에 여러 모양 파일 대량로드


33

PostGIS 데이터베이스에 업로드하려는 shapefile 형식으로 된 수백 개의 데이터 레이어가 있습니다. 이들은 모두 동일한 투영에 있지만 서로 다른 데이터 레이어를 나타내므로 동일한 스키마를 갖지 않습니다.

이러한 모든 파일을 Windows 7 OS의 PostGIS 데이터베이스로 대량 변환하는 가장 시간 효율적인 방법은 무엇입니까?

업데이트 : pgAdmin3 "PostGIS shapefile 업 로더"(아래에 언급 된대로)에서 대량 가져 오기가 PostGIS 2.0에서 기본적으로 제공됩니다 .


나는 이것에 대한 비슷한 대답을 찾고 있습니다. 그러나 매일 밤마다 실행되는 배치 작업으로 만들고 싶습니다. 실제로 PostGIS를 ArcSDE의 슬레이브로 만들고 싶습니다 (당분간). PostGIS와 SQL을 처음 사용했기 때문에 cmd.exe 스크립트가 수행하는 작업을 얻었지만 어떻게 든 내 머리에 붙어 있지 않습니다. 내가하고 싶은 일은 ArcSDE에서 배치 작업으로 내 보낸 일련의 shp 파일을 가져온 다음 PostGIS에 업로드하여 기존 gis / tables를 이미 덮어 씁니다.
geosmiles

"ArcSDE에서 PostGIS로 데이터를 일괄 적으로 동기화하는 방법"에 따라 새로운 질문으로 묻습니다. 흥미로운 아이디어가있을 수 있습니다.
Mike T

답변:


22

GUI를 고수하려는 경우 최신 버전의 pgAdmin에는 벌크로드로 사용할 수있는 Shapefile 로더가 있습니다.

여기에 이미지 설명을 입력하십시오


32

Windows 컴퓨터를 사용 CMD.EXE하는 경우 몇 가지 난해한 for-loop를 사용하여 좋은 것을 사용할 수 있습니다 . 로드해야하는 shp / sql 파일 만있는 "포함 된"디렉토리에서이 작업을 수행하십시오.

첫 번째 단계로, SQL 로더 파일을 작성하십시오 (또한 4326.의 Lat / Long WGS84 데이터가 있다고 가정합니다. SRS로 갱신하십시오).

for %f in (*shp) do shp2pgsql -s 4326 %f public.%~nf > %~nf.sql

그런 다음 SQL 파일이 제대로 표시되는지 확인한 다음 비슷한 루프를 수행하십시오.

for %f in (*sql) do psql -h myserver -d mydb -U myuser -f %f > nul

bashPOSIX 민속 (리눅스, 맥 OS X, 등)에 해당하는이 같은 것입니다 :

for f in *.shp
do
    shp2pgsql -s 4326 %f public.`basename $f .shp` > `basename $f .shp`.sql
done

그때

for f in *.sql
do
    psql -h myserver -d mydb -U myuser -f $f > /dev/null
done

또는 임시 .sql파일 을 유지할 필요가없는 경우 두 파트를 단일 루프로 파이프 합니다.

for f in *.shp
do
    shp2pgsql -s 4326 %f public.`basename $f .shp` | psql -d mydb > /dev/null
done

이것은 단일 루프에서 더 잘 작동 할 것입니다for f in *.shp do shp2pgsql -s 4326 %f public.'basename $f .shp' > 'basename $f .shp'.sql | psql -h myserver -d mydb -U myuser done
Sam007

yup, psql에 전달 된 SQL이 올바른지 확인하는 한, 하나의 명령으로 수행 할 수 있지만 ( >이것은 |파이프 부분을 끊기 때문에 경로 재 지정 부분 없이 ) 가능합니다. SQL 형식의 데이터 레코드가 없기 때문에 이것이 더 좋지 않다고 주장합니다.
Mike T

3

이 단일 명령을 사용하면 훨씬 쉽게 루핑하고 .sql을 별도로 만들 필요가 없습니다.

for f in *.shp
    do shp2pgsql -c -D -s 4326 -I $f public.${f%.*} | psql -h hostname -d dbname -U usrname
done

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.