Я работаю над специальным типом карты с D3, который объединяет многоугольники и точки.Объект D3 circle не имеет свойств
Для этого я использую два файла json. Первый из них, с полигонами, отформатированный как это:
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "id": "101", "name": "Place 1", "common_property":"P1" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ bla bla bla ] ] ] ] } },
{ "type": "Feature", "properties": { "id": "102", "name": "Place 2", "common_property":"P1" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ bla bla bla ] ] ] ] } },
{ "type": "Feature", "properties": { "id": "103", "name": "Place 3", "common_property":"P2" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ bla bla bla ] ] ] ] } }
]
}
С другой стороны, у меня есть этот файл JSON с моей точки:
{"type": "FeatureCollection","crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "common_property": "P1" }, "geometry": { "type": "Point", "coordinates": [ 7.741, 48.58344 ] } },
{ "type": "Feature", "properties": { "common_property": "P2" }, "geometry": { "type": "Point", "coordinates": [ 7.76840, 48.58737 ] } }
]}
Моя цель состоит в том, чтобы связать многоугольников и точек при наведении курсора мыши на низменном «common_property» долины:
- при наведении курсора мыши на полигон, точка с тем же «common_property» имеет другой цвет
- если вы mouseover точки, все полигоны с одинаковым «common_property» имеют один и тот же цвет.
Теоретически это просто, если я сделаю хороший выбор в своем сценарии. Но что-то не так с моими очками.
Сначала я сделал мой CSS лист, и поставить в качестве первых переменных проекции, генератор пути, SVG и т.д. ...
Затем I used queuejs прочитать несколько файлов перед моей главной функцией:
queue()
.defer(d3.json,"data/polygons.json")
.defer(d3.json, 'data/points.json')
.await(function(err, polygons, points) {
THE CODE
});
Внутри основной функции, я написал это для отображения многоугольников:
polyg = svg.append("g")
.selectAll("path")
.data(polygons.features)
.enter()
.append("path")
.attr("class", "polygon_area")
.attr("d", path)
И это для отображения пунктов:
places_point = svg.append("g")
.selectAll("path")
.data(points.features)
.enter()
.append("path")
.datum(function(d){
var origin = d.geometry.coordinates
var angle = scale*0.0000000018
return circle.angle(angle).origin(origin)(points.features)
})
.attr("class", "point")
.attr("d", path)
Ничего сложного до сих пор, кроме того, что у меня нет свойств для переменной places_points. Если я проверить это:
polyg.on('mouseover', function(d) {
console.log(d)
places_point.attr("fill", function(d){
console.log(d)})
})
консоли отображается это:
Object { type: "Feature", properties: Object, geometry: Object }
Object { type: "Polygon", coordinates: Array[1] }
Object { type: "Polygon", coordinates: Array[1] }
Так он работал отлично для многоугольников, есть свойства и все, но за очки у меня типа «Полигон» вместо «Особенность», и я не понимаю, почему очень хорошо ...
EDIT: использовали v3 из D3, чтобы сделать это, а не последний!
Привет, Марк, и спасибо за ваш ответ!К сожалению, я только что проверил раскол в двух объявлениях, но тот же результат, что и раньше: -/ – Raphadasilva
@Raphadasilva, можете ли вы создать воспроизводимый пример jsfiddle или plunker, и я могу взглянуть? – Mark
Да, только что опубликовал проект репо на Github, некоторые значения называются по-разному, но логика такая же! https://github.com/raphadasilva/Bakass – Raphadasilva