FOSS4G 의 대화에서 제시된 것처럼 Mapbox Studio는 Mapbox 벡터 타일을 생성하고 .mbtiles
파일 로 내보낼 수 있습니다.
mapbox-gl.js의 라이브러리에 동적으로 스타일 사용 (브라우저) 측의 클라이언트에서 Mapbox 벡터 타일을 렌더링 할 수 있습니다.
누락 된 부분 : .mbtiles
mapbox-gl.js로 사용할 수 있도록 Mapbox 벡터 타일을 자체 호스팅하는 방법은 무엇입니까?
Mapbox Studio가 벡터 타일을 Mapbox 서버에 업로드하여 타일을 호스팅 할 수 있다는 것을 알고 있습니다. 그러나 그것은 나를위한 옵션이 아닙니다. 나는 벡터 타일을 내 서버에 호스팅하고 싶습니다.
아래의 TileStream 접근 방식은 막 다른 골목으로 밝혀졌습니다. Tilelive와 함께 작동하는 솔루션에 대한 내 답변을 참조하십시오.
파일에서 이미지 타일을 제공 할 수있는 TileStream 을 시도 했습니다.mbtiles
.
내 웹 페이지는 mapbox-gl v0.4.0을 사용합니다.
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.4.0/mapbox-gl.css' rel='stylesheet' />
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.4.0/mapbox-gl.js'></script>
JavaScript 스크립트에서 mapboxgl.Map을 만듭니다.
var map = new mapboxgl.Map({
container: 'map',
center: [46.8104, 8.2452],
zoom: 9,
style: 'c.json'
});
c.json
스타일 파일은 벡터 타일 소스를 구성합니다 :
{
"version": 6,
"sprite": "https://www.mapbox.com/mapbox-gl-styles/sprites/bright",
"glyphs": "mapbox://fontstack/{fontstack}/{range}.pbf",
"constants": {
"@land": "#808080",
"@earth": "#805040",
"@water": "#a0c8f0",
"@road": "#000000"
},
"sources": {
"osm_roads": {
"type": "vector",
"url": "tile.json"
}
},
"layers": [{
"id": "background",
"type": "background",
"paint": {
"background-color": "@land"
}
}, {
"id": "roads",
"type": "line",
"source": "osm_roads",
"source-layer": "roads",
"paint": {
"line-color": "@road"
}
}]
}
...에서 다음 TileJSON 사양을 사용합니다 tile.json
.
{
"tilejson": "2.1.0",
"tiles": [
"http://localhost:8888/v2/osm_roads/{z}/{x}/{y}.png"
],
"minzoom": 0,
"maxzoom": 12
}
...에서 실행중인 TileStream 서버를 가리 킵니다 localhost:8888
. TileStream은 다음으로 시작되었습니다.
node index.js start --tiles="..\tiles"
... ..\tiles
폴더에 내 osm_roads.mbtiles
파일이 있습니다.
이 설정을 사용하면 웹 페이지를 열 수 있지만 배경 레이어 만 볼 수 있습니다. 브라우저 네트워크 추적에서 확대 할 때 타일이 실제로로드 된 것을 볼 수 있지만 브라우저 JavaScript 오류 콘솔에는 여러 가지 형식의 오류가 있습니다.
Error: Invalid UTF-8 codepoint: 160 in mapbox-gl.js:7
벡터 타일은 .png
이미지가 아니라 ProtoBuf 파일이므로 타일 URL http://localhost:8888/v2/osm_roads/{z}/{x}/{y}.pbf
은 실제로 더 의미가 있지만 작동하지 않습니다.
어떤 아이디어?
///
mbtiles 파일을 정의하려면 다음 세 가지 가 필요 합니다.tilelive.load('mbtiles://path/to/osm_roads.mbtiles', function(err, source) {