]> gitweb.fperrin.net Git - GpsPrune.git/commitdiff
Allow to use maps with custom format v21.dev.fp2
authorFrédéric Perrin <fred@fperrin.net>
Sun, 30 Dec 2018 14:23:02 +0000 (14:23 +0000)
committerFrédéric Perrin <fred@fperrin.net>
Sat, 7 Aug 2021 09:12:59 +0000 (10:12 +0100)
src/tim/prune/gui/map/MapSource.java
src/tim/prune/gui/map/OsmMapSource.java

index aa7127dee7020a70c9adb42f3a077e99075b6b8b..69a372b1cb4e36328298cb3aefcfcebafd8eedd9 100644 (file)
@@ -100,7 +100,7 @@ public abstract class MapSource
                        urlstr = "http://" + urlstr;
                }
                // check trailing /
-               if (!urlstr.endsWith("/")) {
+               if (!urlstr.endsWith("/") && !urlstr.contains("?")) {
                        urlstr = urlstr + "/";
                }
                // Validate current url, return null if not ok
index 0cb579dfe271731073665397f8072ec92c1cba65..a12116ed1aab0349fc8aedd9c4fc28b8eed097c3 100644 (file)
@@ -151,12 +151,31 @@ public class OsmMapSource extends MapSource
 
        /**
         * Make the URL to get the specified tile
+        * @param inLayerNum layer number
+        * @param inZoom zoom level
+        * @param inX x coordinate
+        * @param inY y coordinate
+        * @return relative file path as String
         */
        public String makeURL(int inLayerNum, int inZoom, int inX, int inY)
        {
                // Check if the base url has a [1234], if so replace at random
-               StringBuffer url = new StringBuffer();
-               url.append(SiteNameUtils.pickServerUrl(_baseUrls[inLayerNum]));
+               String baseUrl = SiteNameUtils.pickServerUrl(_baseUrls[inLayerNum]);
+               return makeUrl(baseUrl, inLayerNum, inZoom, inX, inY);
+       }
+
+       public String makeUrl(String baseUrl, int inLayerNum, int inZoom, int inX, int inY)
+       {
+               // If the base URL has {x}/{y} placeholders, use them
+               if (baseUrl.contains("{x}")) {
+                       baseUrl = baseUrl.replace("{z}", Integer.toString(inZoom))
+                               .replace("{x}", Integer.toString(inX))
+                               .replace("{y}", Integer.toString(inY));
+                       return baseUrl;
+               }
+
+               // Else simply append the tile indices and file extension
+               StringBuffer url = new StringBuffer(baseUrl);
                url.append(inZoom).append('/').append(inX).append('/').append(inY);
                url.append('.').append(getFileExtension(inLayerNum));
                if (_apiKey != null)
@@ -166,6 +185,26 @@ public class OsmMapSource extends MapSource
                return url.toString();
        }
 
+       /**
+        * Make a relative file path from the base directory including site name
+        * @param inLayerNum layer number
+        * @param inZoom zoom level
+        * @param inX x coordinate
+        * @param inY y coordinate
+        * @return relative file path as String
+        */
+       public String makeFilePath(int inLayerNum, int inZoom, int inX, int inY)
+       {
+               String siteName = getSiteName(inLayerNum);
+               String filePath = makeUrl(siteName, inLayerNum, inZoom, inX, inY);
+               int indexParam = filePath.indexOf("?");
+               if (indexParam > 0)
+               {
+                       filePath = filePath.substring(0, indexParam);
+               }
+               return filePath;
+       }
+
        /**
         * @return maximum zoom level
         */