티스토리 뷰
https://github.com/mapbox/tilebelt
tileBelt를 사용해야 한다.
https://github.com/lunaStratos/react-map/blob/master/src/map/MapMapbox.jsx
의 코드중에 다음부분이 있다.
//브라우져 지도의 남서쪽, 북동쪽 좌표
const ne = map.current.getBounds().getNorthEast();
const sw = map.current.getBounds().getSouthWest();
const tile = tilebelt.pointToTile(ne.lng, ne.lat, process.env.REACT_APP_ZOOMLEVEL);
const bbox = tilebelt.tileToBBOX(tile);
const offset = [bbox[2] - bbox[0], bbox[3] - bbox[1]]; // Tile 한변의 길이 구하는 부분
// Grid 만드는 2중 for문
for (let i = sw.lng - offset[0]; i <= ne.lng + offset[0]; i += offset[0]) { // 0: longitude, 1: latitude
for (let j = sw.lat - offset[1]; j <= ne.lat + offset[1]; j += offset[1]) {
const _tile = tilebelt.pointToTile(i, j, process.env.REACT_APP_ZOOMLEVEL);
const _geoJson = tilebelt.tileToGeoJSON(_tile).coordinates;
onScreenJson.coordinates.push(_geoJson);
onScreenJson.quadKeys.push(tilebelt.tileToQuadkey(_tile));
}
}
const geometryJson = setGeometryJson(onScreenJson.coordinates);
// 타일 라인 레이어 생성
if (map.current.getSource("tileData") === undefined) {
map.current.addSource("tileData", {
type: "geojson",
data: geometryJson
});
map.current.addLayer({
id: "tile_layer",
type: "line",
source: "tileData",
layout: {
"line-join": "round",
"line-cap": "round"
},
paint: {
"line-color": "#222222",
"line-width": 1,
"line-opacity": 0.3
},
minzoom: 17
});
} else { // map.current.getSource("tileData") !== undefined
map.current.getSource("tileData").setData(geometryJson);
}
이중 for문으로 grid를 만드는게 핵심이다.
'프로그래밍 > 자바스크립트 ' 카테고리의 다른 글
react, JS의 반복문에서 await, async가 동기적으로 작동하지 않을때 (0) | 2022.01.20 |
---|---|
mapbox - production환경에서 에러가 날때 (0) | 2022.01.19 |
리액트 동적 이미지 적용하기 (0) | 2021.05.18 |
자바스크립트나 리액트에서 외부 아이피 가져오기 (0) | 2021.05.18 |
글자 윗부분 짤림현상 해결방법 (0) | 2021.05.14 |