From 9a91a494091726ec4210bae5e1d6126f88c3d3ee Mon Sep 17 00:00:00 2001 From: Zachary Tong Date: Thu, 18 Apr 2013 16:33:14 -0400 Subject: [PATCH] Fix clipping issues with geopoints on sphere --- panels/map2/display/geopoints.js | 27 +++++++++++++++++-------- panels/map2/module.js | 34 +++++++++++++++++--------------- 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/panels/map2/display/geopoints.js b/panels/map2/display/geopoints.js index b64079c6dac..9dda419246e 100644 --- a/panels/map2/display/geopoints.js +++ b/panels/map2/display/geopoints.js @@ -2,29 +2,40 @@ * Renders geopoints as geo-json poly gon entities * Allows for them to clip on spheres correctly */ -function displayGeopoints(scope, dr, path) { +function displayGeopoints(scope, dr) { var points = []; var circle = d3.geo.circle(); var degrees = 180 / Math.PI if (scope.panel.display.geopoints.enabled) { - points = dr.points; + //points = dr.points; + + points = _.map(dr.points, function(v) { + return { + type: "Point", + coordinates: [v[0], v[1]] + }; + }); + } + dr.geopoints = dr.g.selectAll("path.geopoint") + .data(points); - var geopoints = dr.g.selectAll(".geopoint") - .data(points); - geopoints.enter().append("path") + + dr.geopoints.enter().append("path") + /* .datum(function(d) { return circle.origin([d[0], d[1]]).angle(scope.panel.display.geopoints.pointSize / 6371 * degrees)(); }) - .attr("d", path) - .attr("class", "geopoint"); + */ + .attr("class", "geopoint") + .attr("d", dr.path); - geopoints.exit().remove(); + dr.geopoints.exit().remove(); diff --git a/panels/map2/module.js b/panels/map2/module.js index cf527b46c1d..e31ba0f5a3b 100644 --- a/panels/map2/module.js +++ b/panels/map2/module.js @@ -339,15 +339,8 @@ angular.module('kibana.map2', []) } - var path = d3.geo.path() - .projection(dr.projection); - - - //Special fix for when the user changes from mercator -> orthographic - //The globe won't redraw automatically, we need to force it - if (scope.panel.display.data.type === 'orthographic') { - dr.svg.selectAll("path").attr("d", path); - } + dr.path = d3.geo.path() + .projection(dr.projection).pointRadius(0.2); console.log(scope.data); @@ -364,8 +357,6 @@ angular.module('kibana.map2', []) return dr.projection(coords); }); - - dr.svg.select(".overlay").remove(); dr.svg.append("rect") @@ -387,7 +378,7 @@ angular.module('kibana.map2', []) return 'land'; } }) - .attr("d", path); + .attr("d", dr.path); countryPath.exit().remove(); @@ -399,9 +390,20 @@ angular.module('kibana.map2', []) .on("drag", function() { if (scope.keylistener.keyActive(17)) { dr.projection.rotate([d3.event.x / 2, -d3.event.y / 2, dr.projection.rotate()[2]]); - dr.svg.selectAll("path").attr("d", path); + + //dr.svg.selectAll("path").attr("d", dr.path); + dr.g.selectAll("path").attr("d", dr.path); + } - })); + })); + + + } + + //Special fix for when the user changes from mercator -> orthographic + //The globe won't redraw automatically, we need to force it + if (scope.panel.display.data.type === 'orthographic') { + //dr.svg.selectAll("path").attr("d", dr.path); } @@ -413,8 +415,8 @@ angular.module('kibana.map2', []) //@todo fix this var dimensions = [width, height]; displayBinning(scope, dr, dimensions); - displayGeopoints(scope, dr, path); - displayBullseye(scope, dr, path); + displayGeopoints(scope, dr); + displayBullseye(scope, dr);