2017-03-05 7 views
0

以下は私のコードでベースマップを表示し、中心座標とズームレベルを設定してビューポートにガーナを表示し、またNDVIプロパティのガーナマップをスタイル/カラー表示します私のソースレイヤー(マップボックスはタイルセットをホストしました)ghanaNDVILayer。あなたは上記のコードで見た場合レイヤーの中心座標、ズーム、停止を動的に計算します

mapID='myMapID'; 
    mapboxgl.accessToken = 'accessToken'; 

    var map = new mapboxgl.Map({ 
     container: 'map', 
     style: 'mapbox://styles/mapbox/streets-v9', 
     center: [-1.41, 6.32], 
     zoom: 5 
    }); 

    map.on('load', function() { 
     map.addLayer({ 
      'id': 'main', 
      'type': 'fill', 
      'layout': {}, 
      'paint': { 
       'fill-color': { 
        property: 'NDVI', 
        stops: [ 
         [0, '#F2F12D'], 
         [1, '#EED322'], 
         [2, '#E6B71E'], 
         [3, '#DA9C20'], 
         [4, '#CA8323'], 
         [5, '#B86B25'], 
         [6, '#A25626'], 
         [7, '#8B4225'], 
         [8, '#723122'] 
        ] 
       }, 
       'fill-opacity': 0.8 
      }, 
      'source': { 
       'type': 'vector', 
       'url': 'mapbox://' + mapID 
      }, 
      "source-layer": "ghanaNDVILayer", 
     }); 
    }); 

は今、私はハードセンターは、ズームレベルを調整し、このガーナNDVI動向例えば典型的な配列を停止するコード化されてきました。

このアプローチは、1つのデータソース(この場合はガーナデータソース)のみを扱っていますが、データソースが変更される可能性があり、これらの値をハードコードすることはできません。プロパティはNDVI以外のものでもあります。

私はデータソースとしてマップボックスホスト型のタイルセットを使用していますが、私のサーバー上にもオリジナルのgeoJsonデータソースがあります。

私たちがロードしているソースに応じて、センター、ズーム、および停止を計算する方法はありますか?

私が思った他のアプローチは、サーバにタイルセットソースIDを渡し、元のgeoJSONを探し、それを使ってセンターを計算し、ズームしてサーバーで停止してから、これらの値をクライアントに渡してマップをレンダリングしますjsで。

これらの値を動的に計算する最良の方法は何か教えてください。

答えて

0

Mapbox Studioの各マップスタイルは、centerzoomのプロパティを持つことができます。まず、「ロックのデフォルトの位置」を有効にすることで、あなたがすることを確認してください。ただし、これはMapboxGLJS APIを介して公開されていない

{ 
"version":8, 
"name":"svglines", 
"metadata":{"mapbox:autocomposite":true}, 
"center":[-100.93913338752408,21.154227435559193], 
"zoom":17.327947082278016,"bearing":0,"pitch":0, 
"sources":{"composite":... 

、そしてあなたがmap.getStyle()を呼び出す場合:

enter image description here

それは次のようになりますこれらの特性は存在しない。

d3.json('https://api.mapbox.com/styles/v1/stevage/cinxfhzqs002nawma56kr6ww4?_=2&access_token=' + mapboxgl.accessToken, function(style) { 
    map.setCenter(style.center) 
    //console.log(style.center); 
}); 

CodePen:http://codepen.io/stevebennett/pen/OpXezm

+0

うーん、あなたが(スタイルAPIはなく、Mapbox-GL-JS APIを介して)直接スタイルファイルにアクセスする場合

しかし、あなたはこれらのプロパティにアクセスすることができます私は質問を再読したので、私はポイントを逃したと思う - それはソースではなく、スタイルである。おっとっと。 –

+0

これを達成するための最良の方法は何ですか?私は異なる地域の少なくとも100の異なる地図を処理する必要があります、私はどのようにプログラムを停止、中心とズームを計算するのですか? –

関連する問題