Handle elevations in units besides meters (#226)

This commit is contained in:
Michael Barry
2022-05-17 20:23:11 -04:00
committed by GitHub
parent a70a507e47
commit 596770aafa
4 changed files with 59 additions and 5 deletions

View File

@@ -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)
) )

View File

@@ -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);
} }

View File

@@ -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(

View File

@@ -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(