OSMUtils.isArea improvements (#798)
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010, 2011, 2012, 2013 mapsforge.org
|
* Copyright 2010, 2011, 2012, 2013 mapsforge.org
|
||||||
* Copyright 2015-2016 devemux86
|
* Copyright 2015-2020 devemux86
|
||||||
* Copyright 2015-2016 lincomatic
|
* Copyright 2015-2016 lincomatic
|
||||||
|
* Copyright 2020 Meibes
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify it under the
|
* This program is free software: you can redistribute it and/or modify it under the
|
||||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||||
@@ -19,10 +20,27 @@ package org.oscim.tiling.source.mapfile;
|
|||||||
import org.oscim.core.MapElement;
|
import org.oscim.core.MapElement;
|
||||||
import org.oscim.core.Tag;
|
import org.oscim.core.Tag;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public final class OSMUtils {
|
public final class OSMUtils {
|
||||||
|
|
||||||
|
private static final Set<String> areaKeys = new HashSet<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
areaKeys.add("building");
|
||||||
|
areaKeys.add("highway");
|
||||||
|
areaKeys.add("natural");
|
||||||
|
areaKeys.add("landuse");
|
||||||
|
areaKeys.add("amenity");
|
||||||
|
areaKeys.add("barrier");
|
||||||
|
areaKeys.add("leisure");
|
||||||
|
areaKeys.add("railway");
|
||||||
|
areaKeys.add("area");
|
||||||
|
areaKeys.add("aeroway");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Heuristic to determine from attributes if a map element is likely to be an area.
|
* Heuristic to determine from attributes if a map element is likely to be an area.
|
||||||
* Precondition for this call is that the first and last node of a map element are the
|
* Precondition for this call is that the first and last node of a map element are the
|
||||||
@@ -41,8 +59,11 @@ public final class OSMUtils {
|
|||||||
for (int i = 0; i < mapElement.tags.size(); i++) {
|
for (int i = 0; i < mapElement.tags.size(); i++) {
|
||||||
Tag tag = mapElement.tags.get(i);
|
Tag tag = mapElement.tags.get(i);
|
||||||
String key = tag.key.toLowerCase(Locale.ENGLISH);
|
String key = tag.key.toLowerCase(Locale.ENGLISH);
|
||||||
String value = tag.value.toLowerCase(Locale.ENGLISH);
|
if (!areaKeys.contains(key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if ("area".equals(key)) {
|
if ("area".equals(key)) {
|
||||||
|
String value = tag.value.toLowerCase(Locale.ENGLISH);
|
||||||
// obvious result
|
// obvious result
|
||||||
if (("yes").equals(value) || ("y").equals(value) || ("true").equals(value)) {
|
if (("yes").equals(value) || ("y").equals(value) || ("true").equals(value)) {
|
||||||
return true;
|
return true;
|
||||||
@@ -60,6 +81,7 @@ public final class OSMUtils {
|
|||||||
result = false;
|
result = false;
|
||||||
}
|
}
|
||||||
if ("railway".equals(key)) {
|
if ("railway".equals(key)) {
|
||||||
|
String value = tag.value.toLowerCase(Locale.ENGLISH);
|
||||||
// there is more to the railway tag then just rails, this excludes the
|
// there is more to the railway tag then just rails, this excludes the
|
||||||
// most common railway lines from being detected as areas if they are closed.
|
// most common railway lines from being detected as areas if they are closed.
|
||||||
// Since this method is only called if the first and last node are the same
|
// Since this method is only called if the first and last node are the same
|
||||||
|
|||||||
Reference in New Issue
Block a user