If place key's value is "yes", display key instead
For example, building=yes with no other useful tags (e.g. amenity) will show as Building now
This commit is contained in:
@@ -33,27 +33,38 @@ export function getLocalizedName(tags, defaultName = 'Untitled Place') {
|
|||||||
return defaultName;
|
return defaultName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const PLACE_TYPE_KEYS = [
|
||||||
|
'amenity',
|
||||||
|
'shop',
|
||||||
|
'tourism',
|
||||||
|
'historic',
|
||||||
|
'leisure',
|
||||||
|
'office',
|
||||||
|
'craft',
|
||||||
|
'building',
|
||||||
|
'landuse',
|
||||||
|
'public_transport',
|
||||||
|
'highway',
|
||||||
|
'aeroway',
|
||||||
|
'waterway',
|
||||||
|
'natural',
|
||||||
|
'place',
|
||||||
|
'border_type',
|
||||||
|
'admin_title',
|
||||||
|
];
|
||||||
|
|
||||||
export function getPlaceType(tags) {
|
export function getPlaceType(tags) {
|
||||||
if (!tags) return null;
|
if (!tags) return null;
|
||||||
|
|
||||||
const rawType =
|
for (const key of PLACE_TYPE_KEYS) {
|
||||||
tags.amenity ||
|
const value = tags[key];
|
||||||
tags.shop ||
|
if (value) {
|
||||||
tags.tourism ||
|
if (value === 'yes') {
|
||||||
tags.historic ||
|
return humanizeOsmTag(key);
|
||||||
tags.leisure ||
|
}
|
||||||
tags.office ||
|
return humanizeOsmTag(value);
|
||||||
tags.craft ||
|
}
|
||||||
tags.building ||
|
}
|
||||||
tags.landuse ||
|
|
||||||
tags.place ||
|
|
||||||
tags.natural ||
|
|
||||||
tags.public_transport ||
|
|
||||||
tags.highway ||
|
|
||||||
tags.aeroway ||
|
|
||||||
tags.waterway ||
|
|
||||||
tags.border_type ||
|
|
||||||
tags.admin_title;
|
|
||||||
|
|
||||||
return humanizeOsmTag(rawType);
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
43
tests/unit/utils/osm-test.js
Normal file
43
tests/unit/utils/osm-test.js
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
import { module, test } from 'qunit';
|
||||||
|
import { setupTest } from 'marco/tests/helpers';
|
||||||
|
import { getLocalizedName, getPlaceType } from 'marco/utils/osm';
|
||||||
|
|
||||||
|
module('Unit | Utility | osm', function (hooks) {
|
||||||
|
setupTest(hooks);
|
||||||
|
|
||||||
|
test('getLocalizedName returns default name if tags are missing', function (assert) {
|
||||||
|
const result = getLocalizedName(null);
|
||||||
|
assert.strictEqual(result, 'Untitled Place');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getLocalizedName returns name tag', function (assert) {
|
||||||
|
const tags = { name: 'Foo' };
|
||||||
|
const result = getLocalizedName(tags);
|
||||||
|
assert.strictEqual(result, 'Foo');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getPlaceType returns value for normal tags', function (assert) {
|
||||||
|
const tags = { amenity: 'restaurant' };
|
||||||
|
const result = getPlaceType(tags);
|
||||||
|
assert.strictEqual(result, 'Restaurant');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getPlaceType returns key name if value is "yes"', function (assert) {
|
||||||
|
const tags = { building: 'yes' };
|
||||||
|
const result = getPlaceType(tags);
|
||||||
|
assert.strictEqual(result, 'Building');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getPlaceType prioritizes order (amenity > shop > building)', function (assert) {
|
||||||
|
// If something is both a shop and a building, it should be a shop
|
||||||
|
const tags = { building: 'yes', shop: 'supermarket' };
|
||||||
|
const result = getPlaceType(tags);
|
||||||
|
assert.strictEqual(result, 'Supermarket');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getPlaceType returns null if no known type found', function (assert) {
|
||||||
|
const tags = { foo: 'bar' };
|
||||||
|
const result = getPlaceType(tags);
|
||||||
|
assert.strictEqual(result, null);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user