У меня есть несколько d3 svg-элементов, в которых в качестве атрибута я передаю список координат x, y и наносю их на карту svg.Как в примере ниже:
var svg = iniMarker().append("g")
.attr("data-lineData", JSON.stringify(lineData))
//Function to draw line
var lineFunction = d3.svg.line()
.x(function (d) { return d.x; })
.y(function (d) { return d.y; });
Результирующая структура пути выглядит следующим образом:
<path d="M1100,850L1180,800" class="pPath" stroke-dasharray="94.33981323242188 94.33981323242188" stroke-dashoffset="0"></path>
<path d="M1180,800L1280,800" class="pPath" stroke-dasharray="100 100" stroke-dashoffset="0"></path>
<path d="M1280,800L1380,800" class="pPath" stroke-dasharray="100 100" stroke-dashoffset="0"></path>
В верхней части этого пути линии также есть круг, который принимает в качестве входных данных строкизначения координат:
var circle = svg.append("circle")
.attr("r", 10)
.attr("fill", "#fff")
.attr("class", "marker")
.attr("transform", function () {
return "translate(" + lineData[0].x + "," + lineData[0].y + ")";
});
Данные, в которых я беру информацию о координатах, хранятся в этом формате:
var DataSet = [{
"id": "",
"isActive": true,
"personId": "p1",
"name": "test",
"lineData": [
{ "timestamp": "2018/09/15 10:00:05 AM", "x": 1100, "y": 950 }]
Теперь мне нужно представить каждую из этих точек, взятых из этого списка координат на карте холста, точно наложенной на карту svg . И в этом случае проблема в том, что svg-координаты списка не совпадают с той же позицией координат холста.
На самом деле, если я пытаюсь сгенерировать некоторые координаты холста с помощьюиспользуя приведенную ниже функцию:
document.getElementById("canv").onclick = function (e) {
var localX = e.clientX - e.target.offsetLeft;
var localY = e.clientY - e.target.offsetTop;
}
Тогда координаты события onclick
в значительной степени отличаются от координат SVG, которые я получил от DataSet obj в качестве позиции.
На самом деле для того, чтобысопоставляя их, я только что попытался передать объект DataSet для функции, чтобы получить координаты SVG и нанести их на карту холста, например:
DataSet.map(function (m) { if(m.isActive) return m.lineData; else return []; }).forEach(f => data = data.concat(f));
data.forEach(e => {
//here I call another function for plot the svg coordinates as points on the canvas map
});
Но очевидно, что мне нужно преобразоватьсначала их, чтобы они соответствовали правильно.
Следуя предложению @enxaneta, мне нужно создать холст из этих объектов данных.Но проблема в том, что у меня уже есть координаты для svg, а не для формата canvas.
Мне нужно найти способ преобразовать список координат svg, который у меня есть, чтобы соответствовать или быть более похожимкак возможность для системы координат холста.
Я открыт для предложений.