raster2pgsql 명령 줄 도구를 사용하여 PostGIS 데이터베이스에로드하는 DTED 형식의 래스터 세트가 있습니다.
각 래스터는 단순히 행에 저장되며 rid 및 래스터 형식의 값으로 설명됩니다.
이제 포인트의 경도와 위도를 사용 하여이 포인트에 해당하는 픽셀 값을 반환하는 데이터베이스 함수를 만들고 싶습니다.
내가 가진 문제는 데이터베이스가 Odroid 보드에서 작동하기 때문에 그렇게하는 데 꽤 많은 시간 (3-4 초)이 걸린다는 것입니다.
나는 처리하는 데이터 세트가 상당히 크다는 것을 알고 있지만 (래스터는 영국 전체를 포괄합니다) PostgreSQL 및 PostGIS에 익숙하지 않기 때문에 더 빨리 수행 할 수 있다고 생각합니다.
이것이 내가 지금까지 한 일입니다.
SELECT ST_Value(rast, ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326))
FROM (
SELECT * FROM rasters
WHERE rast && ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326)
) x;
$1
그리고 $2
길고 위도 각각이다.
2
postgis로 가져올 때 래스터를 타일로 자르셨습니까? (매개 변수 -t 너비 x 높이)?
—
mutolisp
그래, 내가 했어. 성능이 약간 향상되었습니다. 또한 데이터베이스가 Odroid 보드에 있다고 추가해야하므로 데스크톱 PC보다 훨씬 느리게 작동합니다. 래스터 처리 방식을 변경하여 불필요한 계산을 덜 할 수 있는지 궁금합니다. 예를 들어 처음에 모든 래스터에서 ST_Value 함수를 호출 한 다음 실제로 일부 값이 포함 된 행을 찾습니다. 가장 간단한 접근 방법이지만 훨씬 느리게 작동했습니다.
—
zedsdead
사용
—
Scro
ST_SetSRID(ST_MakePoint($1, $2),4326)
문자열 concats 대신에 당신에게 충분한 반복이있는 경우 시간을 절약 할 수 있습니다.
많이 도움이되지 않지만 감사합니다. 테이블을 만들 때 단일 래스터에 대한 경계 상자를 포함하는 다른 열을 추가하려고 생각했습니다. 어쩌면이 방법으로 올바른 래스터를 더 빨리 찾을 수 있습니다 ... 또한 코너 좌표와 lon / lat의 픽셀 단계를 기반으로 래스터의 픽셀 위치를 사전 계산하는 것이 도움이 될지 궁금합니다. 내가 그들을 공유해 주셔서 감사 할 것이라고 생각 :)
—
zedsdead
병목의 위치를 확인하기 위해“설명”을 사용하려고 할 수도 있습니다.
—
mutolisp