[REDIS] 실시간으로 노드 JS와 D3를 사용하여지도에 미국의 플로팅 이름
REDIS실시간으로 노드 JS와 D3를 사용하여지도에 미국의 플로팅 이름
나는 레디 스 팝 / 서브 시스템, 노드 JS와 D3를 사용하여지도에서 국가의 이름을 플롯 위해 노력 해왔다. 문제는 내가 레디 스 채널에 처음 상태로 입력 할 때, 그것은 완벽하게 그려되고 있다는 것입니다,하지만 난 제 2 상태에서 입력 할 때 아무 일도 발생하지 않습니다. 내가 D3.js에 새로운 오전 있기 때문에, 문제를 알아낼 수 없습니다입니다. 어떤 도움을 이해할 수있을 것이다. 감사.
d3.json("india-states.json", function (json) {
india.selectAll("path")
.data(json.features)
.enter().append("path")
.attr("d", path);
var socket = io();
socket.on('tags', function(data){
console.log(data.message1);
india.selectAll("text")
.data(json.features)
.enter()
.append("text")
.attr("fill", "black")
.attr("transform", function(d) {
console.log(data.message1 + "Second Time");
var centroid = path.centroid(d);
return "translate(" + centroid[0] + "," + centroid[1] + ")"
})
.attr("text-anchor", "middle")
.attr("dy", ".35em")
.style('fill', 'white')
.text(function(d) {
console.log("2");
if (d.id == data.message1) {
console.log("1");
return data.message1;
}
});
});
});
난 내 코드를 탐험 시도하고 올바르게 상태 이름마다 가져 오는 것을 발견했다. 하지만 첫 번째 시도에서 국가 이름은 후 앞으로 간다
console.log(data.message1);
다른 모든 경우에서 나는 하나 개의 콘솔 출력을 얻을하고는있다 "CONSOLE.LOG (data.message1);"
해결법
-
==============================
1.본문에 대한 변수를 만들고 소켓 외부로 이동 :
본문에 대한 변수를 만들고 소켓 외부로 이동 :
d3.json("india-states.json", function (json) { india.selectAll("path") .data(json.features) .enter().append("path") .attr("d", path); var stateText = india.selectAll(".text") .data(json.features) .enter() .append("text");//variable outside socket var socket = io(); socket.on('tags', function(data){ stateText.attr("fill", "black") .attr("transform", function(d) { console.log(data.message1 + "Second Time"); var centroid = path.centroid(d); return "translate(" + centroid[0] + "," + centroid[1] + ")" }) .attr("text-anchor", "middle") .attr("dy", ".35em") .style('fill', 'white') .text(function(d) { if (d.id == data.message1) { return data.message1; } }); }); });
당신이 당신의 이전 message1을 추적하려는 경우, 당신은 그것을 통해 함수 외부 배열과 루프를 만들 수 있습니다 :
d3.json("india-states.json", function (json) { india.selectAll("path") .data(json.features) .enter().append("path") .attr("d", path); var stateText = india.selectAll(".text") .data(json.features) .enter() .append("text"); var arrayStates = [];//this array will hold all the names var socket = io(); socket.on('tags', function(data){ arrayStates.push(data.message1);//for each input, a new string stateText.attr("fill", "black") .attr("transform", function(d) { var centroid = path.centroid(d); return "translate(" + centroid[0] + "," + centroid[1] + ")" }) .attr("text-anchor", "middle") .attr("dy", ".35em") .style('fill', 'white') .text(function(d) { for(var i = 0; i < arrayStates.length; i++){ if (d.id == arrayStates[i]) { return arrayStates[i]; } } }); }); });
from https://stackoverflow.com/questions/37125138/plotting-name-of-states-on-map-using-node-js-and-d3-in-real-time by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 서버가 연결을 닫았다는 같은 레디 스 보인다 (0) | 2020.01.09 |
---|---|
[REDIS] 레디 스의 정확도 명령을 dbsize (0) | 2020.01.09 |
[REDIS] 어떻게 키 - 값 저장소에 기존의 관계형 데이터베이스를 변환하는? (0) | 2020.01.09 |
[REDIS] 레디 스의 TCP-백 로그 (0) | 2020.01.08 |
[REDIS] 사용 1.7.0.M1 봄 - 데이터 - 레디 스 때 레디 스 클러스터를 config (설정)하는 방법 (0) | 2020.01.08 |