2016-08-07 5 views
0

120 MB geojson 파일을 protobuf에서 Mapnik 벡터 타일 노드 바인딩으로 변환하는 데 걸리는 처리 시간이 > 2s입니다. 원시 파일 geosjon 서빙 타단에 mapnik 벡터 타일과 원시 geojson 성능

는 200 이하 MS 걸린다.

정상입니까? 그렇다면 벡터 타일을 geojson (내가 mapbox-gl-js으로보고 있습니다) 이상으로 서비스하는 점은 무엇입니까? 각 Mapbox GL에 대한 데이터 형식 등의 강점과 약점을 가지고

// Load GeoJson into memory 

var fs = require("fs"); 
var content = JSON.parse(fs.readFileSync("us_counties.json")); 


// Initialise Mapnik and mercator object 

mapnik.register_default_fonts(); 
mapnik.register_default_input_plugins(); 

var mercator = new SphericalMercator({ 
    size: 256 
}); 

// Vector Tile Router 

router.get('/:z/:x/:y.pbf', function(req, res) { 

    var bbox = mercator.bbox(
    +req.params.x, 
    +req.params.y, 
    +req.params.z, 
    false, 
    '4326' 
); 

    // Convert GEOJSON to protobuf VectorTile and Serve 

    var vtile = new mapnik.VectorTile(+req.params.z, +req.params.x, +req.params.y) 
    vtile.addGeoJSON(JSON.stringify(content), 'fixture_layer') 

    res.setHeader('Content-Encoding', 'deflate') 
    res.setHeader('Content-Type', 'application/x-protobuf') 


    zlib.deflate(vtile.getData(), function(err, pbf) { 
    res.send(pbf); 
    }) 
}); 

답변

2

GeoJSON 및 벡터 타일 : 여기

내 코드의 추출물이다.

  • 벡터 타일 GeoJSON보다 전처리를 필요로
  • 벡터 타일은 타일에 다운로드 할 수있는 반면 GeoJSON 뷰포트를 채우기 위해 필요에 따라 (이 열기 거리지도 모두를 다운로드하는 것은 불가능 근처 것 전체를 다운로드해야합니다
  • 단일 X00 GB GeoJSON 같은!)
  • GeoJSON는, 클라이언트 측에서 수정 될 수있는 반면 벡터 타일 수없는
  • GeoJSON 벡터 타일

없는 반면, 사람이 읽을 GeoJSON이 당신을 위해 일한다면, 그것을 사용하는 것이 좋습니다! 사용자가 120MB를 빨리 다운로드 할 수없는 경우에만주의하십시오.

+0

이 특별한 경우에 나는 잘못된 것을하고 있습니까, 즉 mapnik이 파일을 처리하는 데 너무 많은 시간이 걸리는 것은 정상입니까? 귀하의 답변에 감사드립니다. – Clouddie

+0

많은 직렬 데이터에서 매우 CPU 바운드 작업을 수행하므로 너무 오래 걸린다는 것은 놀라운 일이 아닙니다.당신이 잘못하고있는 것, 즉 사전 처리하는 양만큼, 결과를 저장하거나 캐시하고 싶을 것입니다. MVT에서 사용하는 바이너리 인코딩은 전송에 매우 효율적이지만 재사용을 위해 결과를 저장하지 않고 쿼리에 응답하여 폐기하는 사전 처리가 필요합니다. 캐시 능력을 높이기 위해 이진진 인코딩 된 형식이 타일로 나뉩니다 (MVT가 있음). – marr75

0

벡터 타일은 무손실이 아니며 벡터 타일은 그리드 교차로의 모서리를 둥글게합니다. 여기에 문제가 있습니다. 벡터 타일의 폴리곤 중 일부가 올바르게 그리지 않습니다. 필자는 필자가 필자가 쉽게 구할 수있는 필지 선을 정확하게 찾을 수 있기 때문에 내 구획을 쓸모 없게 만들었 기 때문에이 문제를 알고 있어야합니다.

지도 상자 GL js, geojson, openlayer, 전단지, 빙지도,지도 퀘스트 등에서 지원되는 두 번째 벡터 타일 만 지원됩니다. mapbox js. 당신이 geojson의 성능에 대해 걱정하는 경우

는, 여기에 솔루션입니다 : 프로토콜 버퍼 바이너리 형식으로

서버 사이드를 사용 geobuf에

은, 직렬화 (인코딩) geojson, 그것은 원래 geojson 크기의 20 %로 압축합니다. 120MB - geojson - 20MB geobuf. 클라이언트 브라우저로 인터넷을 통해 서버에서

전송 20메가바이트의 geobuf는 사용 geobuf (자바 스크립트 LIB)는 다시 geojson로 디코딩한다.

브라 우어에서, 이것은 당신에게 손실 및 빠른 응답 솔루션을 제공합니다 .... 구글지도, 빙지도, openlayer, 전단지 등을 직접

을 geojson 렌더링합니다.