벡터/래스터 타일 생성 및 전달

이 기사는 FOSS4G Advent Calendar 2018의 13 일째 기사입니다.

소개



여기에서는 마피온 에서 지도 타일의 생성 및 전달에 사용하고 있는 프라이에타리 소프트웨어와 그 내부에서 이용하고 있는 FOSS4G 를 소개합니다

이용하고 있는 FOSS4G



Mapbox Vector Tile



통칭 MVT
Mapbox가 제안하는 오픈 벡터 타일 사양
vector-tile-spec
마피온 에서는 이 사양에 따라 벡터 타일을 생성해 활용하고 있다

node-mapnik



GeoJSONMVT 로 변환하는 데 사용됨
초기에는 MVT의 형식 인 Protocol buffers을 직접 만들었습니다.
지금은 PostGISST_AsMVT이 추가되었으므로 사용하는 것이 좋습니다.

node-mapbox-gl-native



벡터 타일을 래스터 타일로 변환하는 데 사용됩니다.

만든 (주요) 독점 소프트웨어



mvt-plant



Postgres (PostGIS)에 저장된 위치 데이터에서 벡터 타일을 대량으로 생성 node 모듈
내부에서 node-mapnik
출력처는 S3 or MBTiles or 로컬

그림



사용법
const plant = new MvtPlant(config);
await plant.run();


raster-plant



벡터 타일에서 래스터 타일을 대량으로 생성 node 모듈
내부에서 node-mapbox-gl-native
출력처는 S3 or MBTiles or 로컬

그림(mvt-plant와 동일)



사용법
const plant = new RasterPlant(config);
await plant.run();


포인트

로컬에서 사용할 수 있는 것은 로컬에 놓는다.
타일 ​​경계 부근에서 라벨이 끊어지는 문제는 버퍼를 취해 대처
const image = sharp(buffer, {
  raw: {
    width: width+bufferSize*2,
    height: height+bufferSize*2,
    channels: 4
  }
}).extract({ left: bufferSize, top: bufferSize, width: width, height: height });

imagemin으로 파일 크기 최적화
const minBuffer = await imageminPngquant({quality: 100})(buffer);


map-center



지도 운영에 필요한 작업을 한 손에 담당 node CLI
  • 위치 정보 DB 구축 및 업데이트
  • 벡터 타일의 전체 생성
  • 래스터 타일의 전체 생성
  • 벡터 타일의 차이 업데이트
  • 래스터 타일의 차이 업데이트

  • 내부에서 mvt-plant raster-plant
    사용법
    // ベクタータイルを生成する場合
    $ PROCESS_LIST=vtile \
        TILE_GENERATOR_THREAD_COUNT=4 \
        TILE_GENERATOR_PROCESS_COUNT= \
        TILE_GENERATOR_LOG_LEVEL=debug \
        TILE_GENERATOR_TILE_IDS=./tile/sample-tile_ids.sqlite \
        TILE_GENERATOR_BUCKET_VECTOR=sample-tiles \
        TILE_GENERATOR_USER_VECTOR=mapion \
        TILE_GENERATOR_TILESET_NAME=honjo-v20181212 \
        TILE_GENERATOR_TILE_HOST=localhost \
        TILE_GENERATOR_SEQ_HOST=localhost \
        TILE_GENERATOR_SEQ_NAME_VECTOR=seq_vector \
        DB_USER=**** \
        DB_PW=**** \
        ...
        ./index.sh
    
    // 設定はdotenvを使用
    // TILE_GENERATOR_PROCESS_COUNTを指定するとその数だけプロセスが立ち上がり並列で実行される
    // TILE_GENERATOR_PROCESS_COUNTを指定しない(空欄)とCPUの数が設定される(マシンのリソースを最大限活用する)
    
    // ラスタータイルを生成する場合
    $ PROCESS_LIST=rtile \
        TILE_GENERATOR_THREAD_COUNT=1 \
        TILE_GENERATOR_PROCESS_COUNT= \
        TILE_GENERATOR_LOG_LEVEL=debug \
        TILE_GENERATOR_TILE_IDS=./tile/sample-tile_ids.sqlite \
        TILE_GENERATOR_BUCKET_RASTER=sample-tiles \
        TILE_GENERATOR_USER_RASTER=mapion \
        TILE_GENERATOR_TILESET_NAME=honjo-v20181212 \
        TILE_GENERATOR_SEQ_HOST=localhost \
        TILE_GENERATOR_SEQ_NAME_RASTER=seq_raster \
        ...
        ./index.sh
    
    // 設定はdotenvを使用
    // TILE_GENERATOR_PROCESS_COUNTを指定するとその数だけプロセスが立ち上がり並列で実行される
    // TILE_GENERATOR_PROCESS_COUNTを指定しない(空欄)とCPUの数が設定される(マシンのリソースを最大限活用する)
    


    포인트

    현재 일본 전국의 벡터 타일(z4-z18) 생성에 36시간 정도 걸리지만 서버를 늘리면 그만큼 빨라진다
    마찬가지로 일본 전국의 래스터 타일(z5-z19) 생성에는 33시간 정도 걸리지만 서버를 늘리면 그만큼 빨라진다


    gl-server



    벡터 타일이나 래스터 타일 등을 전달하는 애플리케이션 서버
  • 벡터 타일 배달
  • 래스터 타일 배달
  • 스타일 파일 배달
  • 글꼴 파일 배달
  • 스프라이트 파일 배달
  • StaticMap 배포
  • 여러 벡터 타일을 합성하여 배포
  • 여러 글꼴 파일을 합성하여 배포

  • JWT 인증 기능

  • 내부에서 node-mapniknode-mapbox-gl-native 사용

    그림

    좋은 웹페이지 즐겨찾기