マップ上に異なるデータセットを表示する必要があるウェブサイトがあります。マップは常に同じです - 一部の領域には「オンホー」効果とツールチップがあります。AngularJS - 巨大な指示文
約10種類のデータがあります。
私はマップを表示する
指令(地図のみを描く)
angular.module('PluvioradApp.controllers')
.directive('map', function() {
return {
restrict: 'E',
link: function(scope, element, attrs) {
var svg = d3.select(element[0])
.append("div")
.classed("svg-container", true) //container class to make it responsive
.append("svg")
//responsive SVG needs these 2 attributes and no width and height attr
.attr("preserveAspectRatio", "xMinYMin meet")
.attr("viewBox", "0 0 1000 500")
//class to make it responsive
.classed("svg-content-responsive", true);
var g = svg.append("g");
//Scale/translate/...
var lineFunction = d3.svg.line()
.x(function(d) { return (d[0]+50000)/500; })
.y(function(d) { return (-d[1]+170000)/500; })
.interpolate("linear");
//Draw map
var path = g.selectAll('path')
.data(data.areas)
.enter().append("path")
.attr("d", function(d){ return lineFunction(d.borders)})
.attr("fill", "#D5708B")
.on('mouseover', function(d) {
d3.select(this).style('fill', 'orange');
d3.select(this).text(function(d){return "yeah";})
})
.on('mouseout', function(d) {
g.selectAll('path').style('fill', '#D5708B');
});
// zoom and pan
var zoom = d3.behavior.zoom()
.on("zoom", function() {
g.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
g.selectAll("path")
.attr("d", function(d){ return lineFunction(d.borders)});
});
svg.call(zoom);
}
}
});
に私の考えをディレクティブを作成したデータは、コントローラから表示するために取得することでした(それはAPIから来ています)、それを指令に送ってください。私は正しい色、大きさ、との正しいデータを表示するためにif
switch
大きなまたは複数が追加されます上記のディレクティブ...
内部で私が仕事を分割する別の方法があることを確信しています。例えば
:
- 第一指令は、マップを表示します。これは、複数の時間に、これは正しい方法であれば、どのように私はこれを達成することができます2
を設定し表示するように設定する1つの
追加情報
私は、表示されるデータを選択するためのドロップダウンでメニューを持っています。現時点では、アイテムを使用すると、各サービスがあなたのデータセットの1つになるサービスの束を持ってするフォルダを持っている
あなたのデータセットのいくつかの例を提供することはできますか? – LkPark
たとえば、データセットの1つは座標のリストになり、各座標には異なる値が含まれます。それらは値を示すラベルで地図上のマーカーになります。 別のデータセットは、マップ上に有色のピクセル(クラウドなど)として表示される値を持つ座標のリストです。 – Weedoze