2012-12-16 30 views
6

Tôi đang sử dụng phép chiếu albersUSA để hiển thị bản đồ. Tôi muốn thêm tên của các tiểu bang cho mỗi tiểu bang.Thêm tên của các tiểu bang vào bản đồ trong d3.js

Đây là những gì tôi đã thử và tôi có thể thấy tên của các trạng thái trong nguồn, nhưng tôi không thấy chúng được hiển thị. Tôi đang làm gì sai?

var width = 1060, 
height = 600, 

var svg = d3.select("body").append("svg") 
    .attr("width", width) 
    .attr("height", height); 

svg.append("rect") 
    .attr("class", "background") 
    .attr("width", width) 
    .attr("height", height) 
    .on("click", click) 
    .on("mousemove", mousemove); 

var g = svg.append("g") 
    .attr("transform", "translate(" + width/2 + "," + height/2 + ")") 
    .append("g") 
    .attr("id", "states"); 

var projection = d3.geo.albersUsa() 
    .scale(width) 
    .translate([0, 100]); 

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

draw(); 

function draw(){ 

    d3.json("readme.json", function(json) { 
    g.selectAll("path") 
    .data(json.features) 
    .enter() 
    .append("path") 
    .attr("d", path) 
    .append("svg:text") 
    .text(function(d){ 
     return d.properties.name; 
    }) 
    .attr("x", function(d){ 
     return -path.centroid(d)[0]; 
    }) 
    .attr("y", function(d){ 
     return -path.centroid(d)[1]; 
    }); 

    }); 
} 
+1

Tại sao bạn trả về '-path.centroid (d) [0];', nó phải là 'path.centroid (d) [0];'? – Duopixel

Trả lời

19

OK cho bất cứ ai tự hỏi, đây là cách tôi cố gắng làm điều đó:

function draw(){ 

    d3.json("readme.json", function(json) { 
    g.selectAll("path") 
    .data(json.features) 
    .enter() 
    .append("path") 
    .attr("d", path) 
    .on("click", click); 

    g.selectAll("text") 
    .data(json.features) 
    .enter() 
    .append("svg:text") 
    .text(function(d){ 
     return d.properties.name; 
    }) 
    .attr("x", function(d){ 
     return path.centroid(d)[0]; 
    }) 
    .attr("y", function(d){ 
     return path.centroid(d)[1]; 
    }) 
    .attr("text-anchor","middle") 
    .attr('font-size','6pt'); 


    }); 
} 
+0

Tôi chỉ đang tìm kiếm điều này! thanks – Nasir

+1

Làm cách nào để tôi trả lại mã trạng thái và lưu nó vào một biến? Tôi không nhất thiết phải cần bất kỳ tên nào để hiển thị, chỉ cần đến mã trạng thái để tôi có thể sử dụng nó cho những thứ khác. –

7

tôi sử dụng phương pháp tương tự như câu trả lời mà bạn cung cấp cho mình, nhưng tôi không thích nơi "trọng tâm" đặt tất cả các tên tiểu bang. Ví dụ: Hawaii, Louisiana, Michigan và Florida. Vì vậy, tôi đã thêm các thuộc tính vào dữ liệu json cho thông tin trạng thái cho dx và dy cho các trạng thái đó và thêm mã vào hàm vẽ.

Dưới đây là một ví dụ về một số các tiểu bang sửa đổi (với các tọa độ loại bỏ để giữ cho nó nhỏ hơn):

{ 
     "geometry": { "type": "Polygon", "coordinates": [] }, 
     "type": "Feature", 
     "id": "12", 
     "properties": { "name": "Florida", "abbr": "FL", "dx": "1em" } 
    }, 
    { 
     "geometry": { "type": "MultiPolygon", "coordinates": [] }, 
     "type": "Feature", 
     "id": "15", 
     "properties": { "name": "Hawaii", "abbr": "HI", "dx": "1.15em", "dy": "1.25em" } 
    }, 

Và đây là một phần của chức năng thu hút các nhãn:

 g.selectAll("text") 
      .data(json.features) 
      .enter() 
      .append("text") 
      .attr("transform", function (d) { return "translate(" + path.centroid(d) + ")"; }) 
      .attr("dx", function (d) { return d.properties.dx || "0"; }) 
      .attr("dy", function (d) { return d.properties.dy || "0.35em"; }) 
      .text(function (d) { return d.properties.abbr; }); 
+0

Bạn có dữ liệu json này trong một repo git một nơi nào đó để tái sử dụng, bởi cơ hội nào? –

+0

Đó là mã nội bộ tại nơi tôi làm việc vào thời điểm đó. Tuy nhiên, dữ liệu json của bang không có bất kỳ thông tin nhạy cảm nào trong đó, vì vậy tôi có nó. Nó không có trên repo công cộng, nhưng đây là dữ liệu json của bang và sau đó là đoạn trích từ chế độ xem MVC Razor của chúng tôi, nơi nó được sử dụng (nếu bạn không làm ASP.NET MVC, bạn sẽ cần chỉnh sửa rất nhiều tác phẩm đó). Rất tiếc, không thể dán toàn bộ tệp vào đây. Tôi sẽ phải đặt nó lên đâu đó. – jfren484

+2

Đây là: https://github.com/jfren484/Sandbox/tree/master/D3Mapping – jfren484

Các vấn đề liên quan