1. [DB] postgis에서 subdivision을 시행한 도형이 그 다음의 공간 연산에서 속도가 빠른 이유는?- postgis에서 도현 간에 적용되는 연산은 시도하려고 할 떄, 도형의 bbox를 계산해서 먼저 이 bbox로 1차 필터링을 하고 2차로 연산을 적용하는데, 도형이 크면 bbox가 크게 잡히고, 대상이 아닌 영역까지 잡히기 때문. 그리고 도형이 크면 vertex도 많이 잡히니까 연산에 더욱 비용이 들어간다. 왜? subdivission한 상태의 geometry를 dissolve하는 연산은 subdivision 하지 않은 상태보다 더 빨랐다.2. [DB] sql의 coalesce라는 함수가 있는데, 인자로 전달된 여러 값 중 Null이 아닌 첫 번째 값을 반환하는 함수. 이 함수는 다음의 ..
분류 전체보기
1. [DB] postgis의 geometry vs geography : geometry는 projected coordinates를 상정하고 쓰는거고, geography는 geographic coordinates를 상정하고 쓰는걸로 보인다. 말은 geometry의 경우 cartesian, local, flat이라고 적어두고 geography는 sphere, 3d 이런 단어들을 같이 써둔걸 보면. geography는 전세계의 데이터를 한꺼번에 db에 저장할 때를 상정하고 쓰는 모양이다. (https://postgis.net/documentation/faq/geometry-or-geography/) 왜? gemini가 짜준 코드 중에 geography로 형변환을 하는 코드가 있었는데, 데이터는 대한민국 범위..
앞으로 매일은 아니더라도 내가 알게 된 것들을 '왜'를 덧붙여서 작성하기로 했다.이것들이 모여서 내 매일의 근간을 이루길 바라며. [Docker] Docker 이미지 pull할때 m 시리즈 mac들은 뒤에 —platform linux/amd64 붙여주기. 왜? 다음과 같은 에러를 막기 위해 : `Error response from daemon: no matching manifest for linux/amd in the manifest list entries: no match for platform in manifest: not found`[QGIS] qgis에서 `delete hole` 기능이 있다. Interior hole들을 싹 다 지우고 exterior ring만 남길 수 있다. 왜? 어떤 데이터에..
해당 상황은 생각보다 해결이 간단하다.ddl에서 geometry(public.geometry, 4326)으로 명시적 지정을 잊어버렸다면,column의 srid 조회 시 0으로 조회가 된다.이는 spatial query 시 에러를 일으키게 된다. ST_SetSRID라는 함수를 사용하면 geometry column의 srid를 지정할 수 있는데, 해당 함수의 동작을 알 수 있는 참조는 아래와 같다.https://postgis.net/docs/manual-3.6/ko_KR/UpdateGeometrySRID.html alter table roadalter column geometry TYPE geometry(POLYGON, 4326)using ST_SetSRID(geometry,4326)--또는 다음과 같이SE..
1. 가장 큰 물고기 10마리 구하기select ID, LENGTH from FISH_INFO where LENGTH is not null order by LENGTH DESC , ID ASC limit 10- is not null- order by (조건 1) , (조건 2)- limit은 가장 끝에 2. 한 해에 잡은 물고기 구하기select count(ID) as fish_count from fish_info where year(time) = 2021;- as 로 칼럼 이름 다르게 저장하는 것- where 절 쓰기- 내장함수 year() 3. 잡은 물고기 중 가장 큰 물고기의 길이 구하기select concat(max(length),'cm') as max_length from fish_info- 내..
·GIS
개요몇개월 동안 업로드가 뜸해서 글 연습 겸 타일에 대해 당연하다고 여길 수도 있지만 처음 마주하면 낯선 타일의 '크기' 개념을 정리하겠다.본문최근에 실무에서 raster 타일을 mbtiles라는 형식으로 만들어달라는 요청이 있었다. 음. 타일의 일종인가 보다.sqlite에서 쓰고, db에서 타일을 관리할 수 있는 개념인가 보다.그렇게 어렵지 않은 요청이다. gdal로 간단히 처리할 수 있었다.mbtiles 변환하기mbtiles 자체는 다음과 같이 변환한다.gdal_translate -of MBTILES -co ZOOM_LEVEL_STRATEGY=AUTO input.tif output.mbtiles여기서 주목해야 할 변수는 ZOOM_LEVEL_STRATEGY=AUTO이다.gdal_translate 자체는..
·GIS
개요지인이 정밀 지도(건물, 길)데이터를 쓰고 싶은데, EPSG:5179로 되어있는 데이터는 대체 뭐냐고 자문을 구해왔습니다. 저도 EPSG:5187은 자주 쓰는데 EPSG:5179는 처음 다뤄봐서 그 내용을 정리하고자 합니다.개념우리가 대표적으로 많이 쓰는 좌표계는 EPSG:4326이랑 EPSG:3857입니다. EPSG:4326은 우리에게 익숙한 위경도 좌표계라서 통일해서 쓰기 편하고, EPSG:3857은 지도 데이터를 보는 것 + 지도에 필요한 부가 기능(길찾기, 영역 계산 등의 공간 연산)을 구현하기 위해 많이 쓰입니다. 두 좌표계는 정의 범위가 전 세계입니다. 그렇다 보니 지역의 정밀 데이터를 표현하기에는 정확도가 비교적 떨어집니다. 이를 방지하기 위해 특정 구역 내에서 정의된 좌표계들이 생겨나는..
·GIS
개요오늘도 그렇듯 python이랑 gdal을 쓰면서 일을 하고 있었습니다.제가 구현하려는 기능 중에 '생성된 geotiff 파일의 extent가 좌표계의 유효 범위를 넘어가면 geotiff를 유효 범위에 맞춰 자르기' 가 있었는데요,평소와 같이 아~ GeoTransform을 이용해서 계산하면 되겠지? 하고 안일하게 생각하다가 생각과 다른 결과물을 얻었습니다.왜일까요?오늘 이렇게 쉬워보이는 주제를 들고 왔는데 무심코 쓰다 보면 저처럼 당황하실 수 있습니다.오늘 다룰 주제는 ApplyGeoTransform입니다.개념gdal에서 다루는 GeoTransform의 개념은 다음과 같습니다. gdal geotransform 문서여기를 보면 이렇게 나옵니다.GT(0) x-coordinate of the upper-le..
오늘의 우당탕탕은 FastAPI를 활용해서 데이터 전처리 서버를 구현하는 일이다.여태 계속 jupyter의 도움을 빌리다가 데이터 전처리 자동화 하고 싶어서fastapi로 자동화를 돕는 api 서버를 만들고 있다.큰 숲과 작은 나무를 동시에 보면서 설계대로 조립 중.발단fastapi에서 모듈 간 공통으로 쓰이는 전역변수는 어떻게 관리해야 하는지 고민.env 말고 다른 방법으로 관리할 수는 없는 걸까? => config.py를 어떻게 지속가능한 방법으로 사용할 수 있을까?다시 돌아봐야 할 내용api 구현 시 다른 서버에서 데이터 받아서 '뭔가 변경점이 생긴다면' POST를 생각하자 -> GET이랑 자꾸 헷갈림api에서 라우터와 미들웨어의 차이는?api 서버 설계 시 라우터, 모듈, 데이터 모델 간의 유기성..
해당 카테고리에는 조각글로 그날 그날 작게나마 알게 된 이야기들을 적을 예정입니다.개인 노션에 적는 방법이 있겠지만 기록 채널을 하나로 통일하고 싶어서 새로운 카테고리를 열었습니다.오늘의 주제 : Webpack으로 코드 번들링 시, css가 문제다!문제 상황과 배경배경여태 webpack이 번들링팩임을 잠시 망각하고 webpack에서 제공하는 webpack-dev-server를 사용해서 프론트엔드 프로그램을 개발하고 있었음Python으로 이루어진 코드를 불러와서 쓰고 싶어서 FastAPI를 사용하기로 결정node.js에서 express.js를 쓰고 Python에서는 uvicorn.py를 써서 서버 구성을 할 예정원래 npm, webpack.config.js와 package.json에 의존하던 빈약한 구조를..
