[bknr-cvs] r2398 - branches/bos/projects/bos/web

ksprotte at common-lisp.net ksprotte at common-lisp.net
Wed Jan 23 18:09:13 UTC 2008


Author: ksprotte
Date: Wed Jan 23 13:09:12 2008
New Revision: 2398

Added:
   branches/bos/projects/bos/web/kml-handlers.lisp
Modified:
   branches/bos/projects/bos/web/bos.web.asd
   branches/bos/projects/bos/web/sponsor-handlers.lisp
   branches/bos/projects/bos/web/webserver.lisp
Log:
added new handler: ("/contract-kml" contract-kml-handler)
there is also a new link to it in "Edit Sponsor"

it basically works, but needs to be improved...

there is a gap in Google Earth between adjacent contracts --
probably, we need to add 1 (in our coordinate system) before
the conversion
this should represent the width of one square concerning
the "right and bottom points"


Modified: branches/bos/projects/bos/web/bos.web.asd
==============================================================================
--- branches/bos/projects/bos/web/bos.web.asd	(original)
+++ branches/bos/projects/bos/web/bos.web.asd	Wed Jan 23 13:09:12 2008
@@ -30,6 +30,7 @@
 	       (:file "contract-handlers" :depends-on ("web-utils"))
 	       (:file "contract-image-handler" :depends-on ("web-utils"))
 	       (:file "reports-xml-handler" :depends-on ("boi-handlers"))
+	       (:file "kml-handlers" :depends-on ("packages"))
 	       (:file "sponsor-handlers" :depends-on ("web-utils"))
 	       (:file "news-handlers" :depends-on ("web-utils"))
 	       (:file "allocation-area-handlers" :depends-on ("web-utils"))

Added: branches/bos/projects/bos/web/kml-handlers.lisp
==============================================================================
--- (empty file)
+++ branches/bos/projects/bos/web/kml-handlers.lisp	Wed Jan 23 13:09:12 2008
@@ -0,0 +1,40 @@
+(in-package :bos.web)
+
+(defun contract-utm-bounding-box (contract)
+  "Returns LEFT, TOP, RIGHT, BOTTOM."
+  (let (min-x min-y max-x max-y)
+    (dolist (m2 (contract-m2s contract))
+      (setf min-x (min (m2-utm-x m2) (or min-x (m2-utm-x m2))))
+      (setf min-y (min (m2-utm-y m2) (or min-y (m2-utm-y m2))))
+      (setf max-x (max (m2-utm-x m2) (or max-x (m2-utm-x m2))))
+      (setf max-y (max (m2-utm-y m2) (or max-y (m2-utm-y m2)))))
+    (list min-x max-y max-x min-y)))
+
+(defun points2string (points)
+  (format nil "~:{~F,~F,0 ~}" points))
+
+(defclass contract-kml-handler (object-handler)
+  ())
+
+(defmethod handle-object ((handler contract-kml-handler) (contract contract) req)
+  (with-xml-response (:content-type "application/vnd.google-earth.kml+xml" :root-element "kml")    
+    ;; when name is xmlns, the attribute does not show up - why (?)
+    ;; (attribute "xmlns" "http://earth.google.com/kml/2.2")
+    (destructuring-bind (left top right bottom) (contract-utm-bounding-box contract)
+      (with-element "Document"      
+	(with-element "Placemark"
+	  (with-element "name" (format nil "contract~a" (store-object-id contract)))
+	  (with-element "description" "a description")
+	  (with-element "Polygon"	    
+	    (with-element "tessellate" (text "1"))
+	    (with-element "outerBoundaryIs"
+	      (with-element "LinearRing"
+		(with-element "coordinates"
+		  (text (points2string (list (geo-utm:utm-x-y-to-lon-lat left bottom +utm-zone+ t)
+					     (geo-utm:utm-x-y-to-lon-lat right bottom +utm-zone+ t)
+					     (geo-utm:utm-x-y-to-lon-lat right top +utm-zone+ t)
+					     (geo-utm:utm-x-y-to-lon-lat left top +utm-zone+ t)))))))))))))
+
+(defmethod handle-object ((handle-object contract-kml-handler) (object null) req)
+  (error "Contract not found."))
+

Modified: branches/bos/projects/bos/web/sponsor-handlers.lisp
==============================================================================
--- branches/bos/projects/bos/web/sponsor-handlers.lisp	(original)
+++ branches/bos/projects/bos/web/sponsor-handlers.lisp	Wed Jan 23 13:09:12 2008
@@ -160,7 +160,9 @@
 					 (m2-utm-x (first (contract-m2s (first (sponsor-contracts sponsor)))))
 					 (m2-utm-y (first (contract-m2s (first (sponsor-contracts sponsor))))))))
 		    (:td (:princ-safe (if (contract-paidp contract) "paid" "not paid")))
-		    (:td (cmslink (format nil "cert-regen/~A" (store-object-id contract)) "Regenerate Certificate")
+		    (:td (cmslink (format nil "contract-kml/~A" (store-object-id contract)) "Google Earth")
+			 :br
+			 (cmslink (format nil "cert-regen/~A" (store-object-id contract)) "Regenerate Certificate")
 			 (when (probe-file (contract-pdf-pathname contract))
 			   (html :br (cmslink (contract-pdf-url contract) "Show Certificate")))
 			 (when (contract-worldpay-trans-id contract)

Modified: branches/bos/projects/bos/web/webserver.lisp
==============================================================================
--- branches/bos/projects/bos/web/webserver.lisp	(original)
+++ branches/bos/projects/bos/web/webserver.lisp	Wed Jan 23 13:09:12 2008
@@ -198,7 +198,7 @@
 					("/edit-poi-image" edit-poi-image-handler)
 					("/edit-sponsor" edit-sponsor-handler)
 					("/contract" contract-handler)
-					("/reports-xml" reports-xml-handler)
+					("/reports-xml" reports-xml-handler)					
 					("/complete-transfer" complete-transfer-handler)
 					("/edit-news" edit-news-handler)
 					("/make-poi" make-poi-handler)
@@ -224,6 +224,7 @@
 					("/cancel-contract" cancel-contract-handler)
 					("/statistics" statistics-handler)
 					("/rss" rss-handler)
+					("/contract-kml" contract-kml-handler)
 					#+(or)
 					("/" redirect-handler
 					 :to "/index")



More information about the Bknr-cvs mailing list