Просмотр исходного кода

Fix clipping issues with geopoints on sphere

Zachary Tong 12 лет назад
Родитель
Сommit
9a91a49409
2 измененных файлов с 37 добавлено и 24 удалено
  1. 19 8
      panels/map2/display/geopoints.js
  2. 18 16
      panels/map2/module.js

+ 19 - 8
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();
 
 
 

+ 18 - 16
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);