[bknr-cvs] hans changed trunk/projects/bos/

BKNR Commits bknr at bknr.net
Sun Dec 14 09:09:06 UTC 2008


Revision: 4133
Author: hans
URL: http://bknr.net/trac/changeset/4133

Display sponsors in map.

U   trunk/projects/bos/payment-website/static/poi-ms/poi-ms.js
U   trunk/projects/bos/web/contract-tree.lisp
U   trunk/projects/bos/web/sponsor-handlers.lisp

Modified: trunk/projects/bos/payment-website/static/poi-ms/poi-ms.js
===================================================================
--- trunk/projects/bos/payment-website/static/poi-ms/poi-ms.js	2008-12-13 21:04:38 UTC (rev 4132)
+++ trunk/projects/bos/payment-website/static/poi-ms/poi-ms.js	2008-12-14 09:09:05 UTC (rev 4133)
@@ -276,8 +276,17 @@
         log('map clicked, overlay: ' + overlay + ' latlng: ' + latlng + ' overlaylatlng: ' + overlaylatlng);
     }
 
+    function latLngToPoint(latLng) {
+        return projection.fromLatLngToPixel(latLng, 6);
+    }
+
     this.moveEnd = function () {
-        log('map has moved');
+        var bounds = this.map.getBounds();
+        var sw = latLngToPoint(bounds.getSouthWest());
+        var ne = latLngToPoint(bounds.getNorthEast());
+        log('map has moved: ' + sw.x + ',' + ne.y + ',' + ne.x + ',' + sw.y);
+
+        this.sponsorQuery = sw.x + ',' + ne.y + ',' + ne.x + ',' + sw.y;
     }
 
     GEvent.addListener(this.map, "click", bind(this.mapClicked, this));
@@ -340,15 +349,51 @@
         this.map.addOverlay(marker);
     }
 
+    this.sponsorMarkers = [];
+
     this.setSponsorMarker = function (sponsor) {
         var position = pointToLatLng(sponsor.contracts[0].centerX, sponsor.contracts[0].centerY);
-        if (this.sponsorMarker) {
-            this.sponsorMarker.setLatLng(position);
+        var sponsorMarker = new GMarker(position);
+        this.map.addOverlay(sponsorMarker);
+        this.sponsorMarkers.push(sponsorMarker);
+    }
+
+    this.removeSponsorMarkers = function () {
+        try {
+            map(bind(this.map.removeOverlay, this.map), this.sponsorMarkers);
+            this.sponsorMarkers = [];
+        }
+        catch (e) {
+            log('error removing sponsor markers: ' + e);
+        }
+    }
+
+    this.startMapMovedChecker = function () {
+    }
+
+    this.putSponsorPlacemarks = function(data) {
+        log('got ' + data.sponsors.length + ' sponsors to display');
+        this.removeSponsorMarkers();
+        try {
+            map(bind(this.setSponsorMarker, this), data.sponsors);
+            this.checkMapMoved();
+        }
+        catch (e) {
+            log('error removing sponsor markers: ' + e);
+        }
+    }
+
+    this.checkMapMoved = function() {
+        if (this.sponsorQuery) {
+            loadJSONDoc('/sponsors-json?at=' + this.sponsorQuery)
+            .addCallback(bind(this.putSponsorPlacemarks, this));
+            this.sponsorQuery = null;
         } else {
-            this.sponsorMarker = new GMarker(position);
-            this.map.addOverlay(this.sponsorMarker);
+            callLater(0.5, bind(this.checkMapMoved, this));
         }
     }
+
+    this.checkMapMoved();
 }
 
 var pages = {

Modified: trunk/projects/bos/web/contract-tree.lisp
===================================================================
--- trunk/projects/bos/web/contract-tree.lisp	2008-12-13 21:04:38 UTC (rev 4132)
+++ trunk/projects/bos/web/contract-tree.lisp	2008-12-14 09:09:05 UTC (rev 4133)
@@ -443,18 +443,23 @@
                                      #'contract-tree-changed))
 
 (defun contract-size (contract)
-  (length (contract-m2s contract)))
+  (apply #'max (cddr (contract-bounding-box contract))))
 
+(defun geo-box-size (geo-box)
+  (apply #'max (multiple-value-list (width-height (geo-box-rectangle geo-box)))))
+
 (defun contracts-in-geo-box (geo-box &key limit)
   "Return all contracts that intersect the given GEO-BOX.  If LIMIT is
 specified, the LIMIT largest contracts are returned."
   (let ((return-count 0)
-        (contracts (list nil)))
+        (contracts (list nil))
+        (min-size (floor (/ (geo-box-size geo-box) 10))))
     (ensure-intersecting-children *contract-tree*
                                   geo-box
                                   (lambda (node)
                                     (dolist (contract (placemark-contracts node))
-                                      (when (geo-box-encloses-p geo-box (contract-geo-box contract))
+                                      (when (and (geo-box-encloses-p geo-box (contract-geo-box contract))
+                                                 (>= (geo-box-size (contract-geo-box contract)) min-size))
                                         (when (and limit
                                                    (>= return-count limit))
                                           (if (<= (contract-size contract)
@@ -468,11 +473,11 @@
                                                     (contract-size (cadr point))))
                                              (setf (cdr point) (cons contract (cdr point))))))))
                                   (lambda (node)
-                                    (or (and limit
+                                    (or (and nil limit
                                              (>= return-count limit))
                                         (leaf-node-p node))))
     (cdr contracts)))
 
-y(register-transient-init-function 'make-contract-tree-from-m2
+(register-transient-init-function 'make-contract-tree-from-m2
                                   'make-quad-tree
                                   'geometry:make-rect-publisher)

Modified: trunk/projects/bos/web/sponsor-handlers.lisp
===================================================================
--- trunk/projects/bos/web/sponsor-handlers.lisp	2008-12-13 21:04:38 UTC (rev 4132)
+++ trunk/projects/bos/web/sponsor-handlers.lisp	2008-12-14 09:09:05 UTC (rev 4133)
@@ -361,14 +361,16 @@
 (defun sponsors-at (query)
   (when (cl-ppcre:scan "^[0-9,]+$" query)
     (destructuring-bind (east north west south) (mapcar #'parse-integer (cl-ppcre:split "," query))
-      (labels
-          ((x-y-to-lon-lat (x y)
-             (geo-utm:utm-x-y-to-lon-lat (+ +nw-utm-x+ x) (- +nw-utm-y+ y) +utm-zone+ t)))
-        (mapcar #'contract-sponsor
-                (contracts-in-geo-box (coerce (append (x-y-to-lon-lat east north)
-                                                      (x-y-to-lon-lat west south))
-                                              '(vector double-float))
-                                      :limit 10))))))
+      (when (and (< (- west east) 1000)
+                 (< (- south north) 1000))
+        (labels
+            ((x-y-to-lon-lat (x y)
+               (geo-utm:utm-x-y-to-lon-lat (+ +nw-utm-x+ x) (- +nw-utm-y+ y) +utm-zone+ t)))
+          (mapcar #'contract-sponsor
+                  (contracts-in-geo-box (coerce (append (x-y-to-lon-lat east north)
+                                                        (x-y-to-lon-lat west south))
+                                                '(vector double-float))
+                                        :limit 20)))))))
 
 (defun largest-sponsors ()
   (mapcar #'contract-sponsor





More information about the Bknr-cvs mailing list