mirror of
https://github.com/cfpwastaken/planetiler-openmaptiles.git
synced 2026-02-04 04:21:08 +00:00
Handle elevations in units besides meters (#226)
This commit is contained in:
@@ -113,14 +113,14 @@ public class MountainPeak implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(Tables.OsmPeakPoint element, FeatureCollector features) {
|
public void process(Tables.OsmPeakPoint element, FeatureCollector features) {
|
||||||
Integer meters = Parse.parseIntSubstring(element.ele());
|
Double meters = Parse.meters(element.ele());
|
||||||
if (meters != null && Math.abs(meters) < 10_000) {
|
if (meters != null && Math.abs(meters) < 10_000) {
|
||||||
var feature = features.point(LAYER_NAME)
|
var feature = features.point(LAYER_NAME)
|
||||||
.setAttr(Fields.CLASS, element.source().getTag("natural"))
|
.setAttr(Fields.CLASS, element.source().getTag("natural"))
|
||||||
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
|
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
|
||||||
.putAttrs(elevationTags(meters))
|
.putAttrs(elevationTags(meters))
|
||||||
.setSortKeyDescending(
|
.setSortKeyDescending(
|
||||||
meters +
|
meters.intValue() +
|
||||||
(nullIfEmpty(element.wikipedia()) != null ? 10_000 : 0) +
|
(nullIfEmpty(element.wikipedia()) != null ? 10_000 : 0) +
|
||||||
(nullIfEmpty(element.name()) != null ? 10_000 : 0)
|
(nullIfEmpty(element.name()) != null ? 10_000 : 0)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -49,9 +49,9 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Returns a map with {@code ele} (meters) and {ele_ft} attributes from an elevation in meters. */
|
/** Returns a map with {@code ele} (meters) and {ele_ft} attributes from an elevation in meters. */
|
||||||
public static Map<String, Object> elevationTags(int meters) {
|
public static Map<String, Object> elevationTags(double meters) {
|
||||||
return Map.of(
|
return Map.of(
|
||||||
"ele", meters,
|
"ele", (int) Math.round(meters),
|
||||||
"ele_ft", (int) Math.round(meters * 3.2808399)
|
"ele_ft", (int) Math.round(meters * 3.2808399)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -61,7 +61,7 @@ public class Utils {
|
|||||||
* meters} can be parsed as a valid number.
|
* meters} can be parsed as a valid number.
|
||||||
*/
|
*/
|
||||||
public static Map<String, Object> elevationTags(String meters) {
|
public static Map<String, Object> elevationTags(String meters) {
|
||||||
Integer ele = Parse.parseIntSubstring(meters);
|
Double ele = Parse.meters(meters);
|
||||||
return ele == null ? Map.of() : elevationTags(ele);
|
return ele == null ? Map.of() : elevationTags(ele);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,36 @@ class AerodromeLabelTest extends AbstractLayerTest {
|
|||||||
))));
|
))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testElevationFeet() {
|
||||||
|
assertFeatures(14, List.of(Map.of(
|
||||||
|
"ele", 100,
|
||||||
|
"ele_ft", 328
|
||||||
|
)), process(pointFeature(Map.of(
|
||||||
|
"aeroway", "aerodrome",
|
||||||
|
"name", "osm name",
|
||||||
|
"ele", "328'",
|
||||||
|
"aerodrome", "international",
|
||||||
|
"iata", "123",
|
||||||
|
"icao", "1234"
|
||||||
|
))));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testElevationFeetInches() {
|
||||||
|
assertFeatures(14, List.of(Map.of(
|
||||||
|
"ele", 100,
|
||||||
|
"ele_ft", 328
|
||||||
|
)), process(pointFeature(Map.of(
|
||||||
|
"aeroway", "aerodrome",
|
||||||
|
"name", "osm name",
|
||||||
|
"ele", "328' 1\"",
|
||||||
|
"aerodrome", "international",
|
||||||
|
"iata", "123",
|
||||||
|
"icao", "1234"
|
||||||
|
))));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testInternational() {
|
void testInternational() {
|
||||||
assertFeatures(14, List.of(Map.of(
|
assertFeatures(14, List.of(Map.of(
|
||||||
|
|||||||
@@ -75,6 +75,30 @@ class MountainPeakTest extends AbstractLayerTest {
|
|||||||
))));
|
))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testElevationFeet() {
|
||||||
|
assertFeatures(14, List.of(Map.of(
|
||||||
|
"class", "volcano",
|
||||||
|
"ele", 30,
|
||||||
|
"ele_ft", 100
|
||||||
|
)), process(pointFeature(Map.of(
|
||||||
|
"natural", "volcano",
|
||||||
|
"ele", "100'"
|
||||||
|
))));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testElevationFeetInches() {
|
||||||
|
assertFeatures(14, List.of(Map.of(
|
||||||
|
"class", "volcano",
|
||||||
|
"ele", 31,
|
||||||
|
"ele_ft", 101
|
||||||
|
)), process(pointFeature(Map.of(
|
||||||
|
"natural", "volcano",
|
||||||
|
"ele", "100' 11\""
|
||||||
|
))));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSaddle() {
|
void testSaddle() {
|
||||||
assertFeatures(14, List.of(Map.of(
|
assertFeatures(14, List.of(Map.of(
|
||||||
|
|||||||
Reference in New Issue
Block a user