Diff of /trunk/src/osm.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 191 by harbaum, Tue Jul 7 07:36:27 2009 UTC revision 207 by harbaum, Fri Jul 10 12:13:34 2009 UTC
# Line 1177  gboolean osm_node_has_tag(node_t *node) Line 1177  gboolean osm_node_has_tag(node_t *node)
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;
# Line 2238  char *osm_object_type_string(object_t *o Line 2238  char *osm_object_type_string(object_t *o
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    };    };
# Line 2254  char *osm_object_type_string(object_t *o Line 2254  char *osm_object_type_string(object_t *o
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    

Legend:
Removed from v.191  
changed lines
  Added in v.207