Подтвердить что ты не робот

D3.js Добавьте круг в d3.geo.path

Я создал карту из mbtile, преобразованной в geojson, проекция - WGS84. Я загружаю его так:

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)
});

Теперь я хотел бы добавить элемент svg (точку, круг, точку (я не знаю)) с ее (lat, lng) координатой в моем svg.

Я не могу понять, как это сделать.

4b9b3361

Ответ 1

Вам нужно отделить проекцию, чтобы вы могли снова использовать ее для проецирования lat/lon вашей точки:

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);
});

Другой способ сделать это - просто перевести точку на проекционные координаты:

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