1177 |
tag_t *tag = node->tag; |
tag_t *tag = node->tag; |
1178 |
|
|
1179 |
/* created_by tags don't count as real tags */ |
/* created_by tags don't count as real tags */ |
1180 |
if(tag && strcasecmp(tag->key, "created_by") == 0) |
if(tag && osm_is_creator_tag(tag)) |
1181 |
tag = tag->next; |
tag = tag->next; |
1182 |
|
|
1183 |
return tag != NULL; |
return tag != NULL; |
2238 |
const struct { type_t type; char *name; } types[] = { |
const struct { type_t type; char *name; } types[] = { |
2239 |
{ ILLEGAL, "illegal" }, |
{ ILLEGAL, "illegal" }, |
2240 |
{ NODE, "node" }, |
{ NODE, "node" }, |
2241 |
{ WAY, "way" }, |
{ WAY, "way/area" }, |
2242 |
{ RELATION, "relation" }, |
{ RELATION, "relation" }, |
2243 |
{ NODE_ID, "node id" }, |
{ NODE_ID, "node id" }, |
2244 |
{ WAY_ID, "way id" }, |
{ WAY_ID, "way/area id" }, |
2245 |
{ RELATION_ID, "relation id" }, |
{ RELATION_ID, "relation id" }, |
2246 |
{ 0, NULL } |
{ 0, NULL } |
2247 |
}; |
}; |
2254 |
return NULL; |
return NULL; |
2255 |
} |
} |
2256 |
|
|
2257 |
|
char *osm_object_get_name(object_t *object) { |
2258 |
|
tag_t *tags = osm_object_get_tags(object); |
2259 |
|
|
2260 |
|
if(!tags) return NULL; |
2261 |
|
return osm_tag_get_by_key(tags, "name"); |
2262 |
|
} |
2263 |
|
|
2264 |
|
/* try to get an as "speaking" description of the object as possible */ |
2265 |
|
char *osm_object_get_speaking_name(object_t *object) { |
2266 |
|
char *ret = NULL; |
2267 |
|
tag_t *tags = osm_object_get_tags(object); |
2268 |
|
|
2269 |
|
/* worst case: we have no tags at all. return techincal info then */ |
2270 |
|
if(!tags) |
2271 |
|
return g_strdup_printf("unspecified %s", osm_object_type_string(object)); |
2272 |
|
|
2273 |
|
/* try to figure out _what_ this is */ |
2274 |
|
|
2275 |
|
char *name = osm_tag_get_by_key(tags, "name"); |
2276 |
|
if(!name) name = osm_tag_get_by_key(tags, "ref"); |
2277 |
|
if(!name) name = osm_tag_get_by_key(tags, "note"); |
2278 |
|
if(!name) name = osm_tag_get_by_key(tags, "fix" "me"); |
2279 |
|
if(!name) name = osm_tag_get_by_key(tags, "sport"); |
2280 |
|
|
2281 |
|
/* search for some kind of "type" */ |
2282 |
|
gboolean free_type = FALSE; |
2283 |
|
char *type = osm_tag_get_by_key(tags, "amenity"); |
2284 |
|
if(!type) type = osm_tag_get_by_key(tags, "place"); |
2285 |
|
if(!type) type = osm_tag_get_by_key(tags, "historic"); |
2286 |
|
if(!type) type = osm_tag_get_by_key(tags, "leisure"); |
2287 |
|
if(!type) type = osm_tag_get_by_key(tags, "tourism"); |
2288 |
|
if(!type) type = osm_tag_get_by_key(tags, "landuse"); |
2289 |
|
if(!type) type = osm_tag_get_by_key(tags, "waterway"); |
2290 |
|
if(!type) type = osm_tag_get_by_key(tags, "railway"); |
2291 |
|
if(!type) type = osm_tag_get_by_key(tags, "natural"); |
2292 |
|
if(!type && osm_tag_get_by_key(tags, "building")) type = "building"; |
2293 |
|
|
2294 |
|
/* highways are a little bit difficult */ |
2295 |
|
char *highway = osm_tag_get_by_key(tags, "highway"); |
2296 |
|
if(highway) { |
2297 |
|
if((!strcmp(highway, "primary")) || |
2298 |
|
(!strcmp(highway, "secondary")) || |
2299 |
|
(!strcmp(highway, "tertiary")) || |
2300 |
|
(!strcmp(highway, "unclassified")) || |
2301 |
|
(!strcmp(highway, "residential")) || |
2302 |
|
(!strcmp(highway, "service"))) { |
2303 |
|
type = g_strdup_printf("%s road", highway); |
2304 |
|
free_type = TRUE; |
2305 |
|
} |
2306 |
|
|
2307 |
|
else if(!strcmp(highway, "pedestrian")) { |
2308 |
|
type = g_strdup_printf("%s way/area", highway); |
2309 |
|
free_type = TRUE; |
2310 |
|
} |
2311 |
|
|
2312 |
|
else if(!strcmp(highway, "construction")) { |
2313 |
|
type = g_strdup_printf("road/street under %s", highway); |
2314 |
|
free_type = TRUE; |
2315 |
|
} |
2316 |
|
|
2317 |
|
else |
2318 |
|
type = highway; |
2319 |
|
} |
2320 |
|
|
2321 |
|
if(type && name) |
2322 |
|
ret = g_strdup_printf("%s: \"%s\"", type, name); |
2323 |
|
else if(type && !name) |
2324 |
|
ret = g_strdup(type); |
2325 |
|
else if(name && !type) |
2326 |
|
ret = g_strdup_printf("%s: \"%s\"", |
2327 |
|
osm_object_type_string(object), name); |
2328 |
|
else |
2329 |
|
ret = g_strdup_printf("unspecified %s", osm_object_type_string(object)); |
2330 |
|
|
2331 |
|
if(free_type) |
2332 |
|
g_free(type); |
2333 |
|
|
2334 |
|
/* remove underscores from string and replace them by spaces as this is */ |
2335 |
|
/* usually nicer */ |
2336 |
|
char *p = ret; |
2337 |
|
while(*p) { |
2338 |
|
if(*p == '_') |
2339 |
|
*p = ' '; |
2340 |
|
p++; |
2341 |
|
} |
2342 |
|
|
2343 |
|
return ret; |
2344 |
|
} |
2345 |
|
|
2346 |
char *osm_object_string(object_t *object) { |
char *osm_object_string(object_t *object) { |
2347 |
char *type_str = osm_object_type_string(object); |
char *type_str = osm_object_type_string(object); |
2348 |
|
|