라벨이 PostGIS인 게시물 표시

[PostGIS] Custom Function for Reprojecting Geometry Table

이미지
PostGIS를 사용하면서 약 300여개의 레이어(Geometry Table)의 좌표계를 한꺼번에 변환할 일이 생겨서 하나씩 작업하려다 좌표를 변환하는 함수( UpdateGeometrySRID 함수처럼 단순히 좌표를 정의하는 함수가 아니고 물리적으로 좌표변환를 수행)를 하나 만들어 봤습니다. PostGIS 2.0 이상부터는 다음과 같은 DDL 함수를 이용하여 좌표를 변환할 수 있으나 아래 붉은색으로 표시된 부분을 각각의 레이어마다 지정해야 주어야 하는 번거로움이 있습니다.    ALTER TABLE roads       ALTER COLUMN geom TYPE geometry( MultiLineString , 3857 )          USING ST_Transform( geom , 3857 ); 아래 과정을 따라 하면 데이터베이스 내의 모든 레이어에 대한 좌표변환을 수행할 수 있습니다. ▣ Download  - PostGIS_TransformGeometryTable.sql  - PostGIS_TransformGeometryTable_All.sql ▣ Install Functions  - pgAdmin을 실행한 후 적용할 Database에 연결  - Query Tool(Ctrl-E) 실행 후 다운로드한 SQL(2개 파일)을 각각 실행하여 함수 등록  - 등록된 함수 화면 ▣ Usages  ⊙  TransformGeometryTable  - 하나의 레이어에 대해서 좌표변환 수행  - 아래 예에서 public은 스키마, roads는 테이블, 3857(구글 좌표계)은 변환할 EPSG 코드이며, 스키마를 생략하면 현재 활성화된 스키마를 사용함  - SELECT TransformGeometryTable( 'public'...

Tips for the PostGIS

▣ PostGIS Version: SELECT PostGIS_Full_Version();  - "POSTGIS="2.0.1 r9979" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.8"" ▣ View 레이어 생성하기 ⊙ PostGIS 2.0에서 기존 레이어로 뷰를 생성했을 때, geometry_columns에 srid 및 type이 제대로 표시되지 않을 경우에 해결책입니다. ⊙ 우선 View가 이미 있는 경우 뷰를 삭제합니다. DROP VIEW view_name ; ⊙ 기존 building 레이어에서 도형의 면적이 300을 넘는 building을  building_view 뷰로 생성하는 예입니다.  - 다음과 같이 geometry 컬럼에 정확한 Geometry 타입 및 SRID를 정의해 주면 됩니다. CREATE VIEW building_view AS SELECT gid AS gid , the_geom : :geometry ( MultiPolygon , 5174 ) AS the_geom FROM building WHERE ST_Area ( the_geom ) > 300 ; ⊙ 기존 building 레이어를 WGS84 경위도 좌표계로 변환한 포인트 building_point_4326 뷰로 생성  - 다음은 building 폴리곤의 중심점을 추출하고 좌표계를 변환하는 예를 포함합니다. CREATE VIEW building_point_4326 AS SELECT building . gid AS gid , ST_Transform ( ST_Centroid ( building . the_geom ) , 4326 ) : :geometry ( Point , 4326 ) AS the_geom FROM buildin...

PostGIS - National Education Center for GIS

2012년 8월 20일부터 24일까지 이화여대에서 개최된 '공간정보 거점대학 Open Source GIS 과정' 중 PostGIS 강의 교재입니다. 샘플데이터셋 및 QGIS, GeoServer, OpenLayers 강의자료는  http://www.osgeo.kr/78  에서 받으실 수 있습니다. PostGIS - National Education Center for GIS: Open Source GIS from MinPa Lee

[PostGIS] Shapefile and DBF Loader 2

이미지
pgAdmin은 오픈 소스 데이터베이스인 PostgreSQL을 위한 가장 인기있고 기능이 풍부한 오픈소스 관리 및 개발 플랫폼 Linux, FreeBSD, Solaris, Mac OSX, Windows 플랫폼에서 모두 사용 pgAdmin III Plug-In Architecture version 1.9+ ~ 1.12.x 까지는 pgAdmin III 인스톨 폴더의 plugins.ini 파일로 관리 version 1.13 이후부터는 pgAdmin III 인스톨 폴더 내에 plugins.d 폴더 아래 plugin*.ini 다중 파일들로 관리 만약 PostGIS Shapefile and DBF Loader PostGIS GUI 플러그인을 등록하는 경우 1.12 이하 버전에서는 plugins.ini 파일에, 1.13 버전 부터는 plugins.d 폴더 내에 postgis.shp2pgsql-gui.ini 파일을 생성 또는 편집해서 등록할 수 있음 두 버전 모두 다음의 내용을 등록하면 됨 ; ;PostGIS shp2pgsql-gui (Windows): ; Title=PostGIS Shapefile and DBF Loader Command="$$PGBINDIR\postgisgui\shp2pgsql-gui.exe" -h "$$HOSTNAME" -p $$PORT -U "$$USERNAME" -d "$$DATABASE" -W "$$PASSWORD" Description=Open a PostGIS ESRI Shapefile or Plain dbf loader console to the current database. KeyFile=$$PGBINDIR\postgisgui\shp2pgsql-gui.exe Platform=windows ServerType=postgresql Database=Yes SetPassword=Yes 더 자세한 내용은 다음...

[PostGIS]Proximity & Distance Funtion

OSGeo(Open Source GeoSpatial) 한국어 지부 활동을 하면서 Open Source Winter School 프로그램 중 PostGIS 강사로 참여하게 되었습니다. 1차 강의를 마친 후 메일로 질문도 보내 주시고 합니다. 블로그를 통해 질문에 답하는 자리를 만들어볼까 합니다. 혹시 2차 교육에 관심 있으신 분들은 아래 URL에서 확인바랍니다. *  제1차 GeoSpatial Open Source Winter School  : 2012년 2월 9일 ~ 10일 *  제2차 GeoSpatial Open Source Winter School  : 2012년 2월 28일 ~ 29일 Geometry의 거리(Distance)는 Geometry의 공간좌표체계(spatial reference system)에 정의된 단위(unit)에 의해 결정됩니다. 1. Proximity & Distance 1 ▣ Transverse_Mercator(예: EPSG:2097, Bessle 1841) 좌표를 사용하는 레이어에서 POINT(197215  447711) 지점에서 1KM 반경 내에 있는 대형매장(stores)은 무엇인가? 성능면에서는 ST_DWithin 사용이 유리  ■ ST_DWithin SELECT * FROM stores WHERE ST_DWithin ( the_geom , ST_GeomFromText ( 'POINT(197215 447711)' , 2097 ) , 1000 ) ;  ■ ST_Distance SELECT * FROM stores WHERE ST_Distance ( the_geom , ST_GeomFromText ( 'POINT(197215 447711)' , 2097 ) ) < 1000 ;  ■ ST_Buffer + ST_Intersects SELECT * FROM stores WHE...

[PostGIS]ERROR: LWGEOM_estimated_extent

GeoServer  등  GeoTools 를 사용하는 프로그램의 경우  PostGIS Data Store를 사용하여 레이어의Extent를 구할 때 다음과 같은 오류가 발생하는 경우가 있다. ▣ GeoTools - PostGIS Map<String, Serializable> params = new HashMap<String, Serializable>() ; params.put(JDBCDataStoreFactory.DBTYPE.key, "postgis") ; params.put(JDBCDataStoreFactory.HOST.key, "localhost") ; params.put(JDBCDataStoreFactory.PORT.key, 5432) ; params.put(JDBCDataStoreFactory.SCHEMA.key, " public ") ; params.put(JDBCDataStoreFactory.DATABASE.key, "uoc") ; params.put(JDBCDataStoreFactory.USER.key, "postgres") ; params.put(JDBCDataStoreFactory.PASSWD.key, "postgis") ; try { DataStore pgDataStore = DataStoreFinder . getDataStore ( params ) ; SimpleFeatureSource srcSfs = pgDataStore . getFeatureSource ( "ubsm0103" ) ; ReferencedEnvelope extent = srcSfs . getFeatures ( Filter . INCLUDE ) . getBounds ( ) ; System . out . println ( extent ) ; } catch (IOEx...