kopia lustrzana https://github.com/onthegomap/planetiler
				
				
				
			
							rodzic
							
								
									db0eb8afb8
								
							
						
					
					
						commit
						09374db575
					
				|  | @ -188,6 +188,16 @@ | |||
|       <resource> | ||||
|         <directory>src/main/resources</directory> | ||||
|         <filtering>true</filtering> | ||||
|         <includes> | ||||
|           <include>buildinfo.properties</include> | ||||
|         </includes> | ||||
|       </resource> | ||||
|       <resource> | ||||
|         <directory>src/main/resources</directory> | ||||
|         <filtering>false</filtering> | ||||
|         <excludes> | ||||
|           <exclude>buildinfo.properties</exclude> | ||||
|         </excludes> | ||||
|       </resource> | ||||
|     </resources> | ||||
|     <testResources> | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ import com.onthegomap.planetiler.geo.TileCoord; | |||
| import java.io.BufferedInputStream; | ||||
| import java.io.BufferedOutputStream; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.nio.file.Files; | ||||
| import java.nio.file.Path; | ||||
| import java.util.Comparator; | ||||
|  | @ -84,14 +85,33 @@ public class TileWeights { | |||
|   /** | ||||
|    * Load tile weights from a gzipped TSV file with {@code z, x, y, loads} columns. | ||||
|    * <p> | ||||
|    * Duplicate entries will be added together. | ||||
|    * Duplicate entries will be added together. If the file is missing, will fall back to embedded file with top 50k OSM | ||||
|    * tiles. | ||||
|    */ | ||||
|   public static TileWeights readFromFile(Path path) { | ||||
|     try (var fileStream = new GZIPInputStream(new BufferedInputStream(Files.newInputStream(path)))) { | ||||
|       var result = readFrom(fileStream); | ||||
|       if (!result.weights.isEmpty()) { | ||||
|         return result; | ||||
|       } | ||||
|     } catch (IOException | RuntimeJsonMappingException e) { | ||||
|       LOGGER.info("Unable to load tile weights from {}, falling back to top 100k", path); | ||||
|     } | ||||
| 
 | ||||
|     try (var resourceStream = TileWeights.class.getResourceAsStream("/top_50k_osm_tiles.tsv")) { | ||||
|       return readFrom(resourceStream); | ||||
|     } catch (IOException e) { | ||||
|       LOGGER.warn("Unable to load top 100k tile weights, falling back to unweighted average", e); | ||||
|       return new TileWeights(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   private static TileWeights readFrom(InputStream input) throws IOException { | ||||
|     if (input == null) { | ||||
|       throw new IOException("No input provided"); | ||||
|     } | ||||
|     TileWeights result = new TileWeights(); | ||||
|     try ( | ||||
|       var input = new GZIPInputStream(new BufferedInputStream(Files.newInputStream(path))); | ||||
|       var reader = READER.<Row>readValues(input) | ||||
|     ) { | ||||
|     try (var reader = READER.<Row>readValues(input)) { | ||||
|       while (reader.hasNext()) { | ||||
|         var row = reader.next(); | ||||
|         if (row.z >= PlanetilerConfig.MIN_MINZOOM && row.z <= PlanetilerConfig.MAX_MAXZOOM) { | ||||
|  | @ -100,9 +120,6 @@ public class TileWeights { | |||
|           result.put(TileCoord.ofXYZ(x, y, row.z()), row.loads()); | ||||
|         } | ||||
|       } | ||||
|     } catch (IOException | RuntimeJsonMappingException e) { | ||||
|       LOGGER.warn("Unable to load tile weights from {}, will fall back to unweighted average: {}", path, e); | ||||
|       return new TileWeights(); | ||||
|     } | ||||
|     return result; | ||||
|   } | ||||
|  |  | |||
										
											
												Plik diff jest za duży
												Load Diff
											
										
									
								
							|  | @ -42,7 +42,8 @@ class TileWeightsTest { | |||
|     Path file = path.resolve("test.tsv.gz"); | ||||
|     new TileWeights().writeToFile(file); | ||||
|     var read = TileWeights.readFromFile(file); | ||||
|     assertEquals(0, read.getWeight(TileCoord.ofXYZ(0, 0, 0))); | ||||
|     // when read is empty, fall back to embedded
 | ||||
|     assertEquals(376201934, read.getWeight(TileCoord.ofXYZ(0, 0, 0))); | ||||
|   } | ||||
| 
 | ||||
|   @Test | ||||
|  | @ -67,18 +68,19 @@ class TileWeightsTest { | |||
|   void testReadCorruptFile(@TempDir Path path) throws IOException { | ||||
|     Path file = path.resolve("test.tsv.gz"); | ||||
|     var result = TileWeights.readFromFile(file); | ||||
|     assertEquals(0, result.getWeight(TileCoord.ofXYZ(0, 0, 0))); | ||||
|     int expected = 376201934; | ||||
|     assertEquals(expected, result.getWeight(TileCoord.ofXYZ(0, 0, 0))); | ||||
| 
 | ||||
|     Files.write(file, Gzip.gzip(""" | ||||
|       garbage | ||||
|       """.getBytes(StandardCharsets.UTF_8))); | ||||
|     assertEquals(0, TileWeights.readFromFile(file).getWeight(TileCoord.ofXYZ(0, 0, 0))); | ||||
|     assertEquals(expected, TileWeights.readFromFile(file).getWeight(TileCoord.ofXYZ(0, 0, 0))); | ||||
| 
 | ||||
|     Files.write(file, Gzip.gzip(""" | ||||
|       z	x	y	loads | ||||
|       a	b	c	d | ||||
|       """.getBytes(StandardCharsets.UTF_8))); | ||||
|     assertEquals(0, TileWeights.readFromFile(file).getWeight(TileCoord.ofXYZ(0, 0, 0))); | ||||
|     assertEquals(expected, TileWeights.readFromFile(file).getWeight(TileCoord.ofXYZ(0, 0, 0))); | ||||
| 
 | ||||
|     Files.write(file, Gzip.gzip(""" | ||||
|       z	x	d	loads | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Michael Barry
						Michael Barry