2012-04-21 48 views
10

Tôi đã tạo bản đồ từ mbtile được chuyển đổi thành geojson, phép chiếu là WGS84. Tôi tải nó như thế:d3.js Thêm một vòng tròn trong d3.geo.path

var map = svg.append("g").attr("class", "map"); 
var path = d3.geo.path().projection(d3.geo.albers().origin([3.4,46.8]).scale(12000).translate([590, 570])); 
    d3.json('myjsonfile.json', function(json) { 
     map.selectAll('path').data(json.features).enter().append('path').attr('d', path) 
}); 

Bây giờ tôi muốn thêm một yếu tố svg (một dấu chấm, một vòng tròn, một điểm (tôi không biết)) với nó (lat, lng) phối hợp svg của tôi .

Tôi không thể biết cách thực hiện điều đó.

Trả lời

17

Bạn cần phải tách biệt ra khỏi chiếu, do đó bạn có thể sử dụng nó một lần nữa để dự kiến ​​lat/lon quan điểm của bạn:

var map = svg.append("g").attr("class", "map"); 
var projection = d3.geo.albers() 
    .origin([3.4,46.8]) 
    .scale(12000) 
    .translate([590, 570]); 
var path = d3.geo.path().projection(projection); 
d3.json('myjsonfile.json', function(json) { 
    map.selectAll('path') 
     .data(json.features) 
     .enter().append('path').attr('d', path); 
    // now use the projection to project your coords 
    var coordinates = projection([mylon, mylat]); 
    map.append('svg:circle') 
     .attr('cx', coordinates[0]) 
     .attr('cy', coordinates[1]) 
     .attr('r', 5); 
}); 

Một cách khác để làm điều này chỉ là để dịch các dấu chấm bằng coords dự kiến:

map.append('svg:circle') 
    .attr("transform", function(d) { 
     return "translate(" + projection(d.coordinates) + ")"; 
    }) 
    .attr('r', 5);