2012-04-21 7 views
10

geojson으로 변환 된 mbtile에서 맵을 생성했습니다. 프로젝션은 WGS84입니다. 나는 그렇게로드 :d3.js 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) 
}); 

지금 나는 그것 (위도, LNG는) 내 SVG 좌표와 SVG 요소 (점, 원, 점을 (모르겠어요)) 추가하고 싶습니다 .

어떻게 그럴 수 없습니까?

답변

17

당신은 당신이 프로젝트에 다시 사용할 수 있도록 투사을 분리 할 필요가있는 위도/경도 요점의 :

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