Geometry Database

오픈소스·2023년 8월 3일
0
post-thumbnail

순수 postgres docker image는 geography type을 지원하지 않는다.
https://github.com/typeorm/typeorm/issues/2610
extension을 설치하여 가능한 것 같아 보이지만, 여러가지 에러에 맞닥뜨리게 된다.
https://pamyferret.tistory.com/29

postgres=# CREATE EXTENSION "postgis";
ERROR: could not open extension control file "/usr/share/postgresql/14/extension/postgis.control": No such file or directory

https://velog.io/@alsrlqor/PostgreSQL-Docker-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%97%B0%EA%B2%B0-geojson-type-%EC%84%A4%EC%A0%95

postgis(https://registry.hub.docker.com/r/postgis/postgis/)를 사용하면 되는데, 아직 arm process를 지원하지 않는다.
그래서, local 개발용으로 https://hub.docker.com/r/kartoza/postgis/를 사용했다.

postgis docker image를 가지고 typeorm으로 접근할 때, ST_함수를 사용해야 한다.

await dataSource.manager
    .createQueryBuilder(Thing, "thing")
    // convert stringified GeoJSON into a geometry with an SRID that matches the
    // table specification
    .where(
        "ST_Distance(geom, ST_SetSRID(ST_GeomFromGeoJSON(:origin), ST_SRID(geom))) > 0",
    )
    .orderBy({
        "ST_Distance(geom, ST_SetSRID(ST_GeomFromGeoJSON(:origin), ST_SRID(geom)))":
            {
                order: "ASC",
            },
    })
    .setParameters({
        // stringify GeoJSON
        origin: JSON.stringify(origin),
    })
    .getMany()

어느 정도 구현한 것 같으나, distance resolution이 현실세계와 부합하지 않는 것 같다.

그래서 찾아본 SRID (EPSG 코드)

Heroku Postgres에서 Extension 설치를 지원한다고는 하지만,
https://devcenter.heroku.com/articles/heroku-postgres-extensions-postgis-full-text-search#install-an-extension


추가적인 설치 없이 Geometry를 지원하는 mongoDB가 좋을 것 같다.

GeoJSON

0개의 댓글