12

ポイントの半径を効果的にメートル単位で指定できるようにしたい。プロパティがピクセルに対して一定に保持されるようにAPIが構成radiusされているため、ズームインするとヒートマップが侵食されます(プロパティでヒートマップが侵食されないようにすることができることは知っていますがdissipating、これにより他の問題が発生します。つまり、手動で半径をいじって、ヒートマップを適切に表示できるようにします

具体的には、地図上に確率分布を表示しようとしています。画像形式の分布があり、0-1 の重みをヒートマップ レイヤーにマッピングしたいと考えています。(画像を重ねることはできますが、したくありません)。

助言がありますか?

4

4 に答える 4

14

わかりました、私はいくつかのことを試しました:

メルカトル投影の例 (ソースを確認) を使用して、latLngから任意のポイントの x、y ピクセル座標を抽出し、後でジオメトリ ライブラリを使用します。前のものの右側で、差(ピクセル単位)を絶対値「DP」として取得し、そこから「pixelsPerMeter」比率DP / DMを取得します。

したがって、半径を 100 メートルにしたい場合は、プロパティを次のように設定します。{radius:Math.floor(desiredRadiusPerPointInMeters*pixelsPerMeter)}

ズームの変更を処理するには、リスナーを使用するだけです

 google.maps.event.addListener(map, 'zoom_changed', function () {
          heatmap.setOptions({radius:getNewRadius()});
      });

小さな例をアップロードしました(ズームしてみてください)。下部のボタンで距離が正しく見えるかどうかを確認できます。

于 2012-09-06T02:31:27.307 に答える
1

@lccarrasco が使用したリスナーを使用してこれを解決しましたが、 getNewRadius() 関数で、ズームに対して半径を変更しました。

すなわち。var radius = (somemultiplicationfactor)/(Math.pow(2,(20-zoom)));

これは、各ズームのズーム比が 2:1 であるため機能します。

于 2016-04-05T03:21:51.807 に答える