Changeset 2499
- Timestamp:
- 02/15/08 12:51:09 (1 year ago)
- Files:
-
- branches/trunk-reorg/projects/bos/m2/geometry.lisp (modified) (1 diff)
- branches/trunk-reorg/projects/bos/m2/make-certificate.lisp (modified) (1 diff)
- branches/trunk-reorg/projects/bos/m2/packages.lisp (modified) (1 diff)
- branches/trunk-reorg/projects/bos/web/tags.lisp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/trunk-reorg/projects/bos/m2/geometry.lisp
r2414 r2499 215 215 (nreverse polygon)))) 216 216 217 218 ;;; formatting 219 ;; proposed by Michael Weber on alexandria-devel 220 (defun format-mixed-radix-number (stream number radix-list format-list 221 &key lsb-first leading-zeros 222 (trailing-zeros t)) 223 "Prints NUMBER to STREAM in mixed-radix RADIX. 224 representation-LIST is a list of radixes, least-significant first. 225 FORMAT-LIST is a list of format directives, one for each digit. 226 When LSB-FIRST is nil (default), print most-significant digit first, 227 otherwise least-significant digit first. 228 When LEADING-ZEROS and TRAILING-ZEROS are nil, leading and 229 trailing zero digits are not printed, respectively. \(default: remove 230 leading zeros, keep trailing zeros)" 231 (let ((format-pairs 232 (loop with digit and fraction 233 initially (setf (values number fraction) 234 (truncate number)) 235 for f-list on format-list 236 and r-list = radix-list then (rest r-list) 237 collect (list (first f-list) 238 (cond ((endp r-list) 239 (shiftf number 0)) 240 ((rest f-list) 241 (setf (values number digit) 242 (truncate number (first r-list))) 243 digit) 244 (t number))) 245 into list 246 finally (progn 247 (incf (cadar list) fraction) 248 (return (nreverse list)))))) 249 (unless trailing-zeros 250 (setf format-pairs (member-if #'plusp format-pairs :key 251 #'second))) 252 (when lsb-first 253 (setf format-pairs (nreverse format-pairs))) 254 (unless leading-zeros 255 (setf format-pairs (member-if #'plusp format-pairs :key 256 #'second))) 257 (format stream "~{~{~@?~}~}" format-pairs))) 258 259 260 (defun format-decimal-degree (degree) 261 (format-mixed-radix-number nil (* 60 60 degree) '(60 60 360) '(" ~,2FŽŽ" " ~DŽ" "~D°"))) 262 263 (defun format-lon-lat (stream lon lat) 264 (format stream "~A ~:[S~;N~], ~A ~:[W~;E~]" 265 (format-decimal-degree (abs lat)) 266 (plusp lat) 267 (format-decimal-degree (abs lon)) 268 (plusp lon))) 269 branches/trunk-reorg/projects/bos/m2/make-certificate.lisp
r2055 r2499 43 43 :master-code (sponsor-master-code sponsor) 44 44 :sqm-count (length (contract-m2s contract)) 45 :sqm-ids (with-output-to-string (s) 46 (loop for group in (group-by (mapcar #'m2-num-string (contract-m2s contract)) *num-coords-per-line*) 47 do (loop for nums on group 48 do (princ (car nums) s) 49 do (princ (if (cdr nums) #\Tab #\Newline) s))))))) 45 ;; :sqm-ids (with-output-to-string (s) 46 ;; (loop for group in (group-by (mapcar #'m2-num-string (contract-m2s contract)) *num-coords-per-line*) 47 ;; do (loop for nums on group 48 ;; do (princ (car nums) s) 49 ;; do (princ (if (cdr nums) #\Tab #\Newline) s)))) 50 ;; should later be called :sqm-coordinates 51 :sqm-ids 52 (flet ((format-point (stream x y) 53 (apply #'geometry:format-lon-lat stream 54 (geo-utm:utm-x-y-to-lon-lat (+ +nw-utm-x+ x) 55 (- +nw-utm-y+ y) +utm-zone+ t)))) 56 (destructuring-bind (left top width height) 57 (contract-bounding-box contract) 58 (with-output-to-string (out) 59 (format-point out left top) (terpri out) 60 (format-point out (+ left width) (+ top height)) (terpri out))))))) branches/trunk-reorg/projects/bos/m2/packages.lisp
r2479 r2499 10 10 #:point-in-circle-p 11 11 #:find-boundary-point 12 #:region-to-polygon)) 12 #:region-to-polygon 13 #:format-lon-lat)) 13 14 14 15 (defpackage :geo-utm branches/trunk-reorg/projects/bos/web/tags.lisp
r2484 r2499 168 168 (setf (get-template-var :infotext) (sponsor-info-text sponsor)) 169 169 (setf (get-template-var :name) (user-full-name sponsor)) 170 (setf (get-template-var :sqm-x) (format nil "~,3f" (m2-utm-x (first (contract-m2s contract))))) 171 (setf (get-template-var :sqm-y) (format nil "~,3f" (m2-utm-y (first (contract-m2s contract))))) 170 (setf (get-template-var :sqm-x) (format nil "~,3f" (m2-utm-x (first (contract-m2s contract))))) 171 (setf (get-template-var :sqm-y) (format nil "~,3f" (m2-utm-y (first (contract-m2s contract))))) 172 (setf (get-template-var :geo-coord) (destructuring-bind (left top . ignore) 173 (contract-bounding-box contract) 174 (declare (ignore ignore)) 175 (apply #'geometry:format-lon-lat nil 176 (geo-utm:utm-x-y-to-lon-lat (+ +nw-utm-x+ left) 177 (- +nw-utm-y+ top) +utm-zone+ t)))) 172 178 (setf (get-template-var :numsqm) 173 179 (format nil "~D"
