PostgreSQL에서 PostGIS의 목적은 무엇입니까?


49

PostgreSQL은 이미 공간 데이터 유형, 연산자 및 인덱싱을 지원합니다.

PostGIS는 PostgreSQL의 확장으로 존재해야했던 것을 정확히 제공합니까?

왜 우리 모두 PostgreSQL의 공간 기능을 사용하지 않습니까?


2
이러한 공간 데이터 유형, 연산자 및 인덱싱을 제공하는 것은 PostGIS입니다.
DPSSpatial

5
아니요, 그는 기본 PostgreSQL 지오메트리 유형에 대해 이야기하고 있습니다.
Evan Carroll

4
짧은 대답은 PostGIS가 PgSQL 유형보다 기능적으로 (현재) 10 배라는 것입니다. 아래에서 "새로운 유형을 개발하고 기존 유형을 개선하는 것이 아니라 왜 새로운 유형을 개발해야 하는가"라는 질문을 포함하는 긴 답변이 아래에 설명되어 있습니다.
Paul Ramsey

1
Java Spring 프레임 워크에서도 마찬가지입니다. Java에는 결함 / 누락 기능이 있습니다. Spring은 많은 Java 결함을 수정하고 유용한 기능을 추가했습니다. Java는 Spring의 수정 사항 + 기능을 복사했습니다. 그렇다면 사람들은 왜 봄이 존재하는지 묻습니다.
Neil McGuigan

답변:


86

2001 년 초에 우주를 다시 감고 PostGIS의 발명가들이 미래를 보게 할뿐만 아니라 PgSQL의 PSC가 미래를 보게한다면 PostGIS는 PgSQL의 일련의 패치 일 것입니다. 그러나 최소한 핵심 패치로 시작한 경우 가장 먼저 해결해야 할 것은 다음과 같습니다.

  • 핵심 PgSQL 영역은 홀을 지원하지 않지만 GIS 모델은 실제로 홀을 원합니다. 변경할 수 있습니까?

그리고 핵심 PgSQL은 "물론, 이해하기 어려운 기존 시맨틱이있는 영역은 없으며, 그와 같이 호환되지 않는 변경은 거꾸로 할 수 없습니다"라고 말했을 것입니다.

비 핵심 개발자로서 PostGIS는 몇 년 동안 월간 및 6 개월간 릴리스를 중단 할 수 있었으며 PgSQL 코어는 연간 릴리스 및 더 긴 릴리스와 함께 배포되었습니다. 또한 프로젝트에 커밋 권한이 있기 때문에 언제든지 원하는 기능을 추가 할 수 있었지만 PgSQL에서 커밋 권한을 얻는 데 시간이 오래 걸렸습니다.

PostGIS가 PgSQL 코어가 바라보고 "자신에게 추가 기능으로 사용하는 것이 좋을 것"이라고 말한 충분한 외부 가치를 입증 할 때까지 이미 다른 표준과 스타일의 코드가 너무 많았습니다. PgSQL (호환되지 않는 라이센스 하에서는 언급하지 않음)은 병합 아이디어가 실제로 가능하지 않다는 것입니다.

대신 PostGIS는 PgSQL이 모듈 식 및 확장 성을 유지하는 데 도움이되는 Really Large Complex Extension의 정식 사례가되었습니다. "이것은 PostGIS와 같은 효과에 어떤 영향을 미치나요?"는 핵심 PgSQL이 일부 변경을 평가할 때 자주 묻는 질문입니다. 이것은 또한 PostGIS가 핵심의 일부만큼 좋은 것은 아니지만 충분히 좋습니다.

PgSQL 코어가보기 싫어하는 긴 종속성 목록, 일반적으로 더 낮은 코드 일관성 및 개선 및 지속적으로 절망했을 API 청결도와 같은 다른 이유가 있습니다. 임신 중에도 PostGIS는 PgSQL이 한 입에 삼키기에는 너무 큰 모발이었습니다.


또한 ... PostGIS는 C ++입니다. 이것은 PostgreSQL의 merge.Whether위한 showstopper 될 것이다 여부는 해야 합니다. 의존성도 완전히 멈출 것입니다-GDAL? 하아! Perl> 5.8.0에 의존하는 데 동의 할 핵심조차도 없습니다. 커밋 권한이 있어도 개발 속도가 느립니다. 커미터는 트리에있는 모든 쇼 항목에 대해 무료로 제공되는 것이 아니라 코드 검토를 거쳐 몇 달 또는 몇 년에 큰 변화를 가져와야합니다. 코드 품질 이점이 있지만 빠르지는 않습니다.
Craig Ringer

핵심 Pg가 더 많은 외부 라이브러리에 의존하지 않도록 피할 수있는 것들을 계속 발명하는 것은 특별한 문제입니다. $ dead_architecture에서 $ weird_vendor_compiler가있는 $ ancient_unix_42가 지원해야한다는 것을 의미하기 때문에 모든 빌드 팜 멤버는 업데이트가 필요합니다. 성숙하고 안정적 ​​인 문제 중 하나입니다.
Craig Ringer

@CraigRinger PostGIS가 C ++이라고 생각하는 이유는 무엇입니까? 그것은 모욕이다 :-)
Nicklas Avén

그렇지 않습니까? 맹세 할 수있었습니다. 그러나 충분히 보이지 않습니다. 내 잘못이야. 나는 어쨌든 C ++ 사용을 좋아합니다.
Craig Ringer

4
일정 기간 동안 PostGIS에는 GEOS에 바인딩하기 위해 몇 가지 C ++ 조각이있었습니다. GEOS가 자체 C API를 추가하면 해당 부분이 제거되고 PostGIS는 "순수한"C가되었습니다.
Paul Ramsey

34

PostgreSQL은 공간 데이터 유형을 지원하지 않습니다. 기하학적 유형을 지원합니다 . 이것들은 어떤 것에는 완벽하지만 실제 좌표계와는 완전히 다릅니다. 기본 유형

최신 정보

색인 질문 은 FAQ에 있습니다.

PostgreSQL R-Tree 인덱스가 지원되지 않는 이유는 무엇입니까?

초기 버전의 PostGIS는 PostgreSQL R-Tree 인덱스를 사용했습니다. 그러나 PostgreSQL R-Trees는 버전 0.6 이후 완전히 삭제되었으며 공간 인덱싱에는 R-Tree-over-GiST 체계가 제공됩니다.

테스트 결과 네이티브 R-Tree 및 GiST의 검색 속도가 비슷한 것으로 나타났습니다. 기본 PostgreSQL R-Tree에는 GIS 기능과 함께 사용하기에 바람직하지 않은 두 가지 제한 사항이 있습니다 (이러한 제한은 일반적인 R-Tree 개념이 아니라 현재 PostgreSQL 기본 R-Tree 구현에 따른다는 점에 유의하십시오).

  • PostgreSQL의 R- 트리 인덱스는 크기가 8K보다 큰 기능을 처리 할 수 ​​없습니다. GiST 인덱스는 피쳐 자체에 경계 상자를 대체하는 "손실"트릭을 사용합니다.

  • PostgreSQL의 R- 트리 인덱스는 "널 안전 (null safe)"이 아니므로 null 형상을 포함하는 형상 열에 인덱스를 작성하면 실패합니다. [GiST 인덱스는 null 안전합니다]


GiST 인덱스에 대한 마지막 점을 확장 할 수 있습니까? PostgreSQL은 R-Tree를 제공하고 있으며 현재 GiST 인덱스를 통해 제공하고 있으므로 그 점에 대해 혼란 스럽습니다.
Zeruno

자주 묻는 질문의 직접 텍스트로 업데이트되었습니다.
Evan Carroll

1
GiST API는 access / gist.h에서 제공하는 PostgreSQL 입니다. PostGIS
Evan Carroll

3
PostGIS는 자체 rtree-on-gist 구현을 가지고 있지만 PgSQL이 그래픽 객체에 대한 핵심 지원을 위해 PgSQL에서 사용했던 것과 매우 유사합니다.
Paul Ramsey

1
@Zeruno, 아니요, PgSQL에서 rtree 스플리터를 수정해도 gserialized_gist_picksplit_2d ()에 자체적으로 있기 때문에 PostGIS의 동작을 변경하지 않습니다. PgSQL과 전혀 다른 것은 아닙니다.
폴 램지

8

PostGISPostgreSQL 객체 관계형 데이터베이스를 위한 공간 데이터베이스 익스텐더입니다 . 위치 쿼리를 SQL로 실행할 수 있도록 지리적 개체에 대한 지원을 추가합니다.

SELECT superhero.name
FROM city, superhero
WHERE ST_Contains(city.geom, superhero.geom)
AND city.name = 'Gotham';

기본 위치 인식 외에도 PostGIS는 Oracle Locator / Spatial 및 SQL Server와 같은 다른 경쟁 공간 데이터베이스에서 거의 발견되지 않는 많은 기능을 제공합니다. 자세한 내용은 PostGIS 기능 목록 을 참조하십시오.

PostGIS 기능 목록은 이러한 기능도 확장합니다.

PostGIS는 추가 유형 (형상, 지리, 래스터 및 기타)을 PostgreSQL 데이터베이스에 추가합니다. 또한 이러한 공간 유형에 적용되는 기능, 연산자 및 색인 향상 기능을 추가합니다. 이러한 추가 기능, 연산자, 인덱스 바인딩 및 유형은 핵심 PostgreSQL DBMS의 성능을 향상시켜 빠르고 기능이 풍부하며 강력한 공간 데이터베이스 관리 시스템입니다.

기능 목록

PostGIS 2+ 시리즈는 다음을 제공합니다.

  • 세밀한 래스터 처리를위한 SQL 래스터 맵 대수 기능을 사용하여 스 플라이 싱, 다이 싱, 모핑, 재 분류 및 수집 / 결합을위한 벡터 및 래스터 데이터에 대한 처리 및 분석 기능
  • 벡터 및 래스터 데이터 모두에 대한 공간 재 투영 SQL 호출 가능 함수 명령 줄 및 GUI 패키지 도구를 통해 ESRI shapefile 벡터 데이터 가져 오기 / 내보내기 지원 및 기타 타사 오픈 소스 도구를 통해 더 많은 형식 지원
  • GeoTiff, NetCDF, PNG, JPG 등 여러 표준 형식에서 래스터 데이터를 가져 오기위한 패키지 명령 줄

  • SQL을 사용하여 KML, GML, GeoJSON, GeoHash 및 WKT와 같은 표준 텍스트 형식에 대한 벡터 데이터 렌더링 및 가져 오기 기능 지원 SQL을 사용하여 다양한 표준 형식 GeoTIFF, PNG, JPG, NetCDF의 래스터 데이터 렌더링

  • 기하학적 영역 별 픽셀 값의 압출, 영역 별 통계 실행, 지오메트리에 의한 래스터 클리핑 및 래스터 벡터화를위한 완벽한 래스터 / 벡터 SQL 호출 가능 함수 3D 객체 지원, 공간 인덱스 및 함수 / 미국 인구 조사 호랑이 데이터 활용

또한이 게시물에서 이미 언급 한 포인트 / 파트에. PostGIS 웹 사이트에 언급 된대로 추가 합니다

PostGIS는 C에 있기 때문에 C와 C ++의 다른 라이브러리를 사용할 수 있으며 자유로이 사용합니다. PostGIS는 다음에 따라 다릅니다.

  • 많은 지오메트리 처리 알고리즘을위한 GEOS
  • 좌표 재 투영 기능을위한 Proj.4
  • 래스터 처리 및 형식 지원을위한 GDAL
  • XML 파싱을위한 LibXML2
  • JSON 파싱을위한 JSON-C
  • 확장 된 3D 지원 및 추가 지오 프로세싱 알고리즘을위한 SFCGAL
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.