Я использую SVG, расположенный в http://upload.wikimedia.org/wikipedia/commons/3/32/Blank_US_Map.svg в проекте и взаимодействуя с ним с помощью d3.js. Я бы хотел создать эффект масштабирования, например http://bl.ocks.org/2206590, однако этот пример основан на данных о пути, хранящихся в объекте JSON, для вычисления центроида. Есть ли способ загрузить данные пути в d3 из существующего SVG, чтобы получить центроид?
Моя (хакерская) попытка:
function get_centroid(sel){
var coords = d3.select(sel).attr('d');
coords = coords.replace(/ *[LC] */g,'],[').replace(/ *M */g,'[[[').replace(/ *z */g,']]]').replace(/ /g,'],[');
return d3.geo.path().centroid({
"type":"Feature",
"geometry":{"type":"Polygon","coordinates":JSON.parse(coords)}
});
}
Это, похоже, работает в некоторых штатах, таких как Миссури, но другие, подобные Вашингтону, терпят неудачу, потому что мой синтаксический анализ SVG является настолько рудиментарным. Поддерживает ли d3 что-то вроде этого?