참고자료

https://velog.io/@sdsd0908/스프링-반경-검색-기능-DB-변경에-대한-고민

https://velog.io/@tett_77/QGIS에서-데이터-불러오기

https://foss4g.tistory.com/1876

  1. PostgreSQL 다운로드

    1. 버전 17이하로 사용 ( 18 버전은 GIS 프로그램 지원 안함_25.10.02 기준)
  2. PostGIS

    1. PostgreSQL 다운로드 후 설치 된 프로그램 중 Application Stack Bulder 를 실행

      image.png

    2. Categoris → Spatical Extensions → PostGIS 설치

      image.png

  3. 데이터 만들기

    1. 대한민국 행정구역(SHP) 다운로드

      1. http://www.gisdeveloper.co.kr/?p=2332
      2. 2023년 7월 이후 데이터
        1. https://www.geoservice.co.kr/
        2. 위 페이지에서 다운로드 할 수 있다고 되어있으나 실제로 다운로드 받으려고 하면 오류로 다운로드 불가능 했었음
    2. QGIS 다운로드 및 설치

      1. https://qgis.org/download/
      2. Long Term Version for Windows 다운로드 추천
      3. 참고 : https://blog.naver.com/jju_yaa/224024981880
    3. QGIS Desktop 실행 → 레이어 → 데이터소스 관리자

      image.png

    4. 데이터 소스 관리자

      1. 인코딩 : 한글이 있기 때문에 EUC_KR로 설정 (나중에 변경 가능)

      2. 소스 : SHP 파일 다운로드 받은거 추가

        image.png

      3. 추가 → 레이어 필드에서 제일 위에 레이어 선택 후 오른쪽 클릭 → 필터설정

        image.png

      4. 쿼리작성기 → EMD_CD LIKE ‘11%’ 입력 (11은 서울의 행정코드)

        image.png

      5. 필터 설정이 완료 된 후 레이어 오른쪽 클릭 → 내보내기 → 피처를 다른 이름으로 저장

        image.png

      6. 레이어를 다른 이름으로 저장

        1. 포맷 : ESRI 셰이프파일
        2. 파일이름: 파일 이름과 파일 저장 할 곳 선택
        3. 좌표계 : 보통 다운로드 받는 곳에 명시해놓음 (EPSG:5179)
        4. 인코딩 : UTF-8이 대중적이나 선택 가능
    5. DB에 데이터 내보내기

      1. PostGIS Shapefile Import/Export Manager

      2. View Connection details. 클릭 해서 DB랑 연결

        image.png

      3. Add File → QGIS에서 만든 데이터 선택

      4. Option → 인코딩은 QGIS에서 사용한 인코딩이랑 같은 값을 추가

        image.png

      5. Import List 에서 SRID에 좌표계 값(5179)를 추가 한다.

        image.png

      6. 설정 완료 후 IMPORT

  4. pgAdmin 에서 테이블 생성 됫는지 확인

    image.png

  5. SQL문을 활용해서 데이터 확인

    SELECT * FROM SEOUL
    
    -- 전체 geom 데이터와 기타 속성 조회
    SELECT gid, emd_kor_nm, geom
    FROM SEOUL;
    
    -- 테이블에 지정된 좌표계가 어떤건지 확인 => 0이러면 지정이 되지 않은것이기 떄문에 변경
    SELECT DISTINCT ST_SRID(geom) FROM 테이블명;
    
    -- 좌표계를 5179로 변경처리
    UPDATE seoul SET geom = ST_SetSRID(geom, 5179) WHERE ST_SRID(geom) = 0;
    
    -- 전체 범위
    SELECT ST_Extent(geom) FROM SEOUL;
    
    -- ST_MakeEnvelope(xmin, ymin, xmax, ymax, SRID)
    SELECT ST_MakeEnvelope(12, -48, 13, -48, 4326)
    ;
    
    -- 특정 영역 안에 있는 지오메트리 조회 (예: 1도 사각형 영역)
    -- geom 타입의 WKT(Well-Known Text)로 변환해 조회 (사람이 읽기 좋은 형태)
    SELECT gid, emd_eng_nm, emd_kor_nm, ST_AsText(geom) AS wkt_geom
    FROM SEOUL
    WHERE ST_Within(
      geom, 
      ST_MakeEnvelope(954121, 1951988, 955221, 1955988, 5179)
    );
    
    -- Geometry 타입의 중심점 좌표 조회
    SELECT gid, emd_eng_nm, emd_kor_nm, ST_Centroid(geom) AS center_geom
    FROM seoul;