emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/osm 793dad377e 1/2: Optimize track algorithm


From: ELPA Syncer
Subject: [elpa] externals/osm 793dad377e 1/2: Optimize track algorithm
Date: Wed, 9 Mar 2022 18:57:42 -0500 (EST)

branch: externals/osm
commit 793dad377eb48066c11c911d19c3df9a77f15664
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Optimize track algorithm
---
 osm.el | 52 ++++++++++++++++++++++++++--------------------------
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/osm.el b/osm.el
index 370a16260d..542503114f 100644
--- a/osm.el
+++ b/osm.el
@@ -626,6 +626,7 @@ Should be at least 7 days according to the server usage 
policies."
     pins))
 
 ;; TODO This is not yet as robust as it should be. Rethink the algorithm.
+;; Sometimes artifacts occur, set osm-tile-border=debug.
 (defun osm--compute-tracks ()
   "Compute track hash table."
   (let ((tracks (make-hash-table :test #'equal))
@@ -633,45 +634,44 @@ Should be at least 7 days according to the server usage 
policies."
     (dolist (file osm--gpx-files)
       (clrhash segs)
       (dolist (seg (cadr file))
-        (let ((px0 (osm--lon-to-x (cdar seg) osm--zoom))
-              (py0 (osm--lat-to-y (caar seg) osm--zoom)))
+        (let ((p0 (cons (osm--lon-to-x (cdar seg) osm--zoom)
+                        (osm--lat-to-y (caar seg) osm--zoom))))
           (dolist (pt (cdr seg))
             (let* ((px1 (osm--lon-to-x (cdr pt) osm--zoom))
                    (py1 (osm--lat-to-y (car pt) osm--zoom))
-                   (x0 (/ px0 256))
-                   (y0 (/ py0 256))
-                   (x1 (/ px1 256))
-                   (y1 (/ py1 256))
-                   (pdx (- px1 px0))
-                   (pdy (- py1 py0))
-                   (dx (abs (- x1 x0)))
-                   (dy (- (abs (- y1 y0))))
-                   (sx (if (< x0 x1) 1 -1))
-                   (sy (if (< y0 y1) 1 -1))
-                   (err (+ dx dy)))
+                   (pdx (- px1 (car p0)))
+                   (pdy (- py1 (cdr p0))))
               ;; Ignore point if too close to last point
               (unless (< (+ (* pdx pdx) (* pdy pdy)) 50)
+                (let* ((p1 (cons px1 py1))
+                       (x0 (/ (car p0) 256))
+                       (y0 (/ (cdr p0) 256))
+                       (x1 (/ px1 256))
+                       (y1 (/ py1 256))
+                       (dx (abs (- x1 x0)))
+                       (dy (- (abs (- y1 y0))))
+                       (sx (if (< x0 x1) 1 -1))
+                       (sy (if (< y0 y1) 1 -1))
+                       (err (+ dx dy)))
                 ;; Bresenham with "antialiasing"
                 (while
-                    (let ((v0 (cons px0 py0))
-                          (v1 (cons px1 py1))
-                          (ex (< (* err 2) dx))
+                    (let ((ex (< (* err 2) dx))
                           (ey (> (* err 2) dy))
                           (key (cons x0 y0)))
-                      (unless (equal (gethash key segs) v0)
-                        (push v0 (gethash key segs)))
-                      (push v1 (gethash key segs))
+                      (unless (equal (gethash key segs) p0)
+                        (push p0 (gethash key segs)))
+                      (push p1 (gethash key segs))
                       (unless (and (= x0 x1) (= y0 y1))
                         ;; "Antialiasing"
                         (when (and ey ex)
                           (setq key (cons (+ x0 sx) y0))
-                          (unless (equal (gethash key segs) v0)
-                            (push v0 (gethash key segs)))
-                          (push v1 (gethash key segs))
+                          (unless (equal (gethash key segs) p0)
+                            (push p0 (gethash key segs)))
+                          (push p1 (gethash key segs))
                           (setq key (cons x0 (+ y0 sy)))
-                          (unless (equal (gethash key segs) v0)
-                            (push v0 (gethash key segs)))
-                          (push v1 (gethash key segs)))
+                          (unless (equal (gethash key segs) p0)
+                            (push p0 (gethash key segs)))
+                          (push p1 (gethash key segs)))
                         (when ey
                           (cl-incf err dy)
                           (cl-incf x0 sx))
@@ -679,7 +679,7 @@ Should be at least 7 days according to the server usage 
policies."
                           (cl-incf err dx)
                           (cl-incf y0 sy))
                         t)))
-                (setq px0 px1 py0 py1))))))
+                (setq p0 p1)))))))
       (maphash (lambda (k v) (push v (gethash k tracks))) segs))
     tracks))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]