Leaflet으로 지리원 고도 타일에서 등고선을 그려보세요.
소개
지리원 고도 타일 을 사용하여 브라우저에서 직접 등고선을 그립니다.
고도 데이터(2차원 배열)에 대해 CONREC 과 같은 알고리즘을 이용하여 벡터 데이터를 생성, 그려가는 것이 일반적이라고 생각합니다만, 이 기사에서는 2차원 배열로부터 직접 등고선 래스터 이미지를 생성하는 방법을 소개합니다.
데모
해설
기본
전고 지리원 고도 타일과 Leaflet로 만든 CS 입체도 에서는 고도 데이터를 취득해 곡률·경사를 계산해 화상을 합성하고 있었습니다만, 하고 있는 것은 거의 변함이 없습니다. 곡률·경사 대신에 등고선을 계산했을 뿐입니다.
등고선
앞에서 언급했듯이 일반적으로 2 차원 배열에서 벡터 데이터를 생성합니다. 고도 데이터가 거칠고 픽셀이 밀집된 경우 이러한 방법이 효과적입니다. 그러나 지리원 고도 타일은 매우 조밀합니다. 예를 들어 줌 레벨 14 이하에서 지도를 표시한 상태라면 화면의 모든 픽셀에 대해 고도 값을 알 수 있다는 수준에서 조밀한 데이터가 정비되어 있습니다.
여기서, 다음과 같은 a,b,c,d
의 4 개의 픽셀로 이루어진 그리드에 대해서, 고도치 10 의 등고선을 그려 싶다고 합니다.
벡터의 경우는 여기에서 등고선의 경로를 보다 상세하게 계산하게 됩니다만, 래스터의 경우는 단순히 a 를 채우기만 합니다. 위의 데모에서 실제로 등고선의 채우기 판정을 실시하고 있는 것은 이하와 같은 루틴입니다.
logic.js
// dem を取得
var dem = xhr.responseText.split(/[,\n]/).map(function(a) {
return Math.floor(parseFloat(a) / 100);
});
var ctx = canvas.getContext("2d");
var img = ctx.createImageData(0x100, 0x100);
for (var i = 0; i <= 0xffff; i++) {
if ((i & 0xff) === 0xff || (i & 0xff00) === 0xff00)
continue;
if (dem[i] !== dem[i + 1] || dem[i] !== dem[i + 0x100] || dem[i] !== dem[i + 0x101]) {
img.data[i * 4 + 0] = 0xff;
img.data[i * 4 + 1] = 0xff;
img.data[i * 4 + 2] = 0xff;
img.data[i * 4 + 3] = dem[i] % 5 === 0 ? 0xff : 0x70;
}
}
ctx.putImageData(img, 0, 0);
오른쪽, 아래, 오른쪽 아래 셀의 값과 자신의 값을 비교하여 자신을 채울지 여부를 판정한다는 것이므로 어려운 계산은 하지 않습니다. 스마트폰에서도 동작하는 레벨의 부하입니다. 등고선의 개수가 증가해도 비교적 영향이 적을 것입니다.
요약
해발 타일에서 등고선을 그리는 방법을 소개했습니다. 표고 타일이 조밀하게 정비되어 있기 때문에 가능한 치트라는 느낌도 있지만 비교적 고속으로 등고선을 그리는 것이 가능합니다. 좋은 사용지가 있으면 응용해 보세요.
Reference
이 문제에 관하여(Leaflet으로 지리원 고도 타일에서 등고선을 그려보세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/frogcat/items/1224c4c8f1bc308c4b42
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Leaflet으로 지리원 고도 타일에서 등고선을 그려보세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/frogcat/items/1224c4c8f1bc308c4b42텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)