2012-06-04 7 views
13

の長さを変更すると、私はSVGオブジェクトの幅と長さに制御したいD3は、どのように私はグーグルマップ上のSVGを作成し、幅とSVG

サイズはokですが、問題というの場所SVGは適切な場所にありません。

どのようにオブジェクトの位置も制御できますか?

私は

.attr("transform", "translate(" + width/2 + "," + height/2 + ")") 

に対する変換が、その後サイズは動作しませんでした追加しようとしました。 スケールを追加してプロジェクションに変換しようとすると、サイズも機能しませんでした。 場所とサイズをどのように制御できるか教えてください。 SVGの最初の場所が同じ場所でなければならないという考えは、サイズのみ変更する必要がありますが、場所は常に同じにする必要があります。私はズームを変更したときに、私は質問を誤解していない限り、SVGも場所

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<script src="http://mbostock.github.com/d3/d3.v2.js?2.8.1"></script> 
<script type="text/javascript" 
    src="http://maps.google.com/maps/api/js?sensor=true"></script> 
<style> 
html,body,#map { 
    width: 95%; 
    height: 95%; 
    margin: 0; 
    padding: 0; 
} 

.stations,.stations svg { 
    position: absolute; 
} 

.stations svg { 
    width: 60px; 
    height: 20px; 
    padding-right: 100px; 
    font: 10px sans-serif; 
} 

.stations circle { 
    fill: brown; 
    stroke: black; 
    stroke-width: 1.5px; 
} 

.background { 
    fill: none; 
    pointer-events: all; 
} 

#states path:hover { 
    stroke: white; 
} 

#state-titels text { 
    font-family: "ff-dagny-web-pro-1", "ff-dagny-web-pro-2", sans-serif; 
    font-size: 8px; 
    font-weight: 700; 
    font-style: normal; 
    font-size-adjust: none; 
    color: #333333; 
    text-transform: none; 
    text-decoration: none; 
    letter-spacing: normal; 
    word-spacing: 0; 
    text-align: start; 
    vertical-align: baseline; 
    direction: ltr; 
    text-overflow: clip; 
} 

#states path { 
    fill: #ccc; 
    stroke: #fff; 
    stroke-width: 1.5px; 
} 
</style> 
</head> 
<body> 
    <div id="map"></div> 
    <script type="text/javascript"> 
     //Create the Google Map… 

     var first = 1; 
     var zoom = 2; 
     var map = new google.maps.Map(d3.select("#map").node(), { 
      zoom : 2, 
      center : new google.maps.LatLng(-53.76487, -110.41948), 
      mapTypeId : google.maps.MapTypeId.TERRAIN 
     }); 

     google.maps.event.addListener(map, 'zoom_changed', function() { 
      zoom = map.getZoom(); 
     }); 

     var width = 10000, height = 1000, centered; 

     var projection = d3.geo.albersUsa(); 

     var path = d3.geo.path().projection(projection); 

     var count = 1; 

     d3.json("../d3/us-states.json", function(json) { 

      var overlay = new google.maps.OverlayView(); 
       overlay.onAdd = function() { 


       var layer = d3.select(this.getPanes().overlayLayer).append("div"); 

       var width1 = 1000; 
       var height1 = 1000; 
       var svg = layer.append("svg").attr("width", width1).attr(
         "height", height1); 


       var states = svg.append("g").attr("id", 
         "states"); 

       states.selectAll("path").data(json.features).enter() 
       .append("path").attr("d", path)//.attr("transform", "scale(" + (zoom) + ")")//.each(transform) 
       .style("opacity", "0.7"); 

       overlay.draw = function() { 
        if (zoom == 2) 
       states.transition().attr("transform", "scale(" + (zoom/8) + ")").style("stroke-width", 2/zoom + "px"); 
        else if (zoom == 3) 
         states.transition().attr("transform", "scale(" + (zoom/6) + ")").style("stroke-width", 2/zoom + "px"); 
        else if (zoom == 4) 
        states.transition().attr("transform", "scale(" + (zoom/4) + ")").style("stroke-width", 2/zoom + "px"); 
        else if (zoom == 5) 
         states.transition().attr("transform", "scale(" + (zoom/2) + ")").style("stroke-width", 2/zoom + "px"); 

       }; 

      }; 

      overlay.setMap(map); 

     }); 
    </script> 
</body> 
</html> 
+0

と位置を制御するだろうか? – Nek

+0

(1)動的に作成されたSVGドキュメント(画像全体)のサイズを画面上で変更する、または(2)HTMLページでSVGドキュメントの配置を変更する、または(3) SVGドキュメント内の特定の生成された要素のサイズを変更する、または(4)SVGドキュメント内で特定の生成された要素の配置を変更する – Phrogz

+0

また、あなたは_ "私がズームを変更するとSVGも場所を変更する"と言います。私はこれが何を意味するのかは分かりませんが、おそらく関連する回答についてはhttp://stackoverflow.com/a/10714057/405017を参照してください。 – Phrogz

答えて

18

を変更することを 現在の問題は、単にCSSを使って、SVGのサイズを制御することができるはずです。だから、D3と、むしろattr()使用style()使用するよりも:あなたが不足している私たち-states.jsonファイルを添付してもらえ

layer.append("svg") 
    .style("width", width1) 
    .style("height", height1); 

と似ては、あなたは.style("left", ...).style("top", ...)

+3

左と上のスタイルを追加しようとしたときにドンSVGオブジェクトに影響しません – user1365697

関連する問題