• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ osmium::Relation类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中osmium::Relation的典型用法代码示例。如果您正苦于以下问题:C++ Relation类的具体用法?C++ Relation怎么用?C++ Relation使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



在下文中一共展示了Relation类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: relation

    void relation(osmium::Relation& rel) {
        const char* bus = rel.tags() ["route"];
        if (bus && !strcmp(bus, "bus")) {
            const char* busRef = rel.tags()["ref"];
            if (busRef) {
                buses.push_back(Bus(busRef, id));
                id++;

                osmium::RelationMemberList& rml = rel.members();
                for (osmium::RelationMember& rm : rml) {
                    if (rm.type() == osmium::item_type::way) {
                        std::vector<osmium::Location> tmpVec;
                        for (auto& nd : ways[rm.ref()]) {
                            osmium::Location loc = locations.get(nd);
                            tmpVec.push_back(loc);
                        }
                        buses.at(id - 1).locs.push_back(tmpVec);
                    } else if(rm.type() == osmium::item_type::node && 
                                !strcmp(rm.role(), "stop")) {
                        buses.at(id - 1).busStopNames[rm.ref()] = nodes[rm.ref()];
                    }
                }
            }
        }
    }
开发者ID:harpbold,项目名称:prog2vedes4_fp_hpba,代码行数:25,代码来源:malvin_details.cpp


示例2: relation

	void relation( osmium::Relation& relation ) {
		const char* bus = relation.tags()["route"];
		if(bus && !strcmp(bus, "bus")) {
			const char* name = relation.tags().get_value_by_key("ref");
			if(!name) name = relation.tags().get_value_by_key("name");
			
			std::cout << name;
			
			osmium::unsigned_object_id_type temp1, temp2;
			int db = 0;
			for( auto &member : relation.members()){
				if(db == 0 && member.type() == osmium::item_type::node) {
					temp1 = member.positive_ref();
					db++;
				} else if(db !=0 && member.type() == osmium::item_type::node){
					temp2 = member.positive_ref();
				}				
			}
			
			std::cout << " (" << map[temp1] << " - " << map[temp2] << ")" << std::endl;
			
			for ( auto &member : relation.members()) {
				if( member.type() == osmium::item_type::node){
					std::cout << " " << locations.get(member.positive_ref()).lat() << ", " << locations.get(member.positive_ref()).lon() << " " << map[member.positive_ref()] << std::endl;
				}
				
			}
			std::cout << std::endl;
		}
	}
开发者ID:djjoe,项目名称:University-projects,代码行数:30,代码来源:malvin.cpp


示例3: create_area

            bool create_area(osmium::memory::Buffer& out_buffer, const osmium::Relation& relation, const std::vector<const osmium::Way*>& members) {
                set_num_members(members.size());
                osmium::builder::AreaBuilder builder{out_buffer};
                builder.initialize_from_object(relation);

                const bool area_okay = create_rings();
                if (area_okay || config().create_empty_areas) {
                    if (config().keep_type_tag) {
                        builder.add_item(relation.tags());
                    } else {
                        copy_tags_without_type(builder, relation.tags());
                    }
                }
                if (area_okay) {
                    add_rings_to_area(builder);
                }

                if (report_ways()) {
                    for (const osmium::Way* way : members) {
                        config().problem_reporter->report_way(*way);
                    }
                }

                return area_okay || config().create_empty_areas;
            }
开发者ID:Project-OSRM,项目名称:osrm-backend,代码行数:25,代码来源:assembler.hpp


示例4: relation

    // - walk over all relations-versions
    //   - walk over all relations-nodes
    //     - Adds the nodes and ways that aren't in node-tracker to a vector
    //     - if node or way is in the box hit becames true
    //   - if hit is true and the vector is not empty (it means their are nodes or ways that belong to a relation that has at least one node or way inside the box)
    //     - Records the id of node or way to outside_node_tracker or outside_way_tracker
    void relation(const osmium::Relation& relation) {
	
    	bool hit = false;

        if (debug) {
            std::cerr << "cut_administrative relation " << relation.id() << " v" << relation.version() << "\n";
        }
    	
        std::vector<const osmium::RelationMember*> members;
        std::vector<const osmium::TagList*> tags;

        for (auto& tag : relation.tags()) {
            if (strcmp(tag.key(), "boundary") == 0 && strcmp(tag.value(), "administrative") == 0)
                hit = true;
        }

    	for (const auto& extract : info->extracts) {
            if (hit){
                if(!extract->relation_tracker.get(relation.id())){
                    extract->relation_tracker.set(relation.id());
                }
                //Add only the nodes and ways that were not yet in the respective trackers if hit is true
                for (const auto& member : relation.members()) {
                    if (member.type() == osmium::item_type::way && !extract->way_tracker.get(member.ref())){
                            extract->way_tracker.set(member.ref());
                    } 
                }
            }
        }
    }
开发者ID:NDrive,项目名称:osm-history-splitter,代码行数:36,代码来源:cut_administrative.hpp


示例5: relation

 void relation(const osmium::Relation& relation) {
     if (m_max_relation_id == relation.id()) {
         throw out_of_order_error{"Relation ID twice in input. Maybe you are using a history or change file?", relation.id()};
     }
     if (id_order{}(relation.id(), m_max_relation_id)) {
         throw out_of_order_error{"Relation IDs out of order.", relation.id()};
     }
     m_max_relation_id = relation.id();
 }
开发者ID:openstreetmap,项目名称:osm2pgsql,代码行数:9,代码来源:check_order.hpp


示例6: relation

 void relation(const osmium::Relation& rel)
 {
     const char *bdy = rel.tags().get_value_by_key("boundary");
     if (bdy && !strcmp(bdy, "postal_code")) 
     {
         postcode_boundaries++;
         const char *ref = rel.tags().get_value_by_key("ref");
         if (ref) postcode[ref]=true;
     }
 }
开发者ID:woodpeck,项目名称:osmium_based_utils,代码行数:10,代码来源:count_addresses.cpp


示例7: relation

    // - walk over all relation-versions
    //   - walk over all bboxes
    //     - if the relation-id is recorded in the bboxes relation-tracker
    //       - send the relation to the bboxes writer
    void relation(const osmium::Relation& relation) {
        if (debug) {
            std::cerr << "softcut relation " << relation.positive_id() << " v" << relation.version() << "\n";
        }

        for (const auto& extract : info->extracts) {
            if (extract->relation_tracker.get(relation.positive_id())) {
                extract->write(relation);
            }
        }
    }
开发者ID:joto,项目名称:osm-history-splitter,代码行数:15,代码来源:softcut.hpp


示例8: relation

    // The relation handler is called for each node in the input data.
    void relation(const osmium::Relation& relation) {
        {
            osmium::builder::RelationBuilder builder{m_buffer};
            copy_attributes(builder, relation);
            copy_tags(builder, relation.tags());

            // Copy the relation member list over to the new way.
            builder.add_item(relation.members());
        }
        m_buffer.commit();
    }
开发者ID:hydrays,项目名称:osrm-backend,代码行数:12,代码来源:osmium_change_tags.cpp


示例9: relation

void parse_osmium_t::relation(osmium::Relation& rel)
{
    if (rel.deleted()) {
        m_data->relation_delete(rel.id());
    } else {
        if (m_append) {
            m_data->relation_modify(rel);
        } else {
            m_data->relation_add(rel);
        }
    }
    m_stats.add_rel(rel.id());
}
开发者ID:tomhughes,项目名称:osm2pgsql,代码行数:13,代码来源:parse-osmium.cpp


示例10: new_relation

            /**
             * We are interested in all relations tagged with type=multipolygon
             * or type=boundary with at least one way member.
             */
            bool new_relation(const osmium::Relation& relation) const {
                const char* type = relation.tags().get_value_by_key("type");

                // ignore relations without "type" tag
                if (!type) {
                    return false;
                }

                if ((!std::strcmp(type, "multipolygon")) || (!std::strcmp(type, "boundary"))) {
                    return std::any_of(relation.members().cbegin(), relation.members().cend(), [](const RelationMember& member) {
                        return member.type() == osmium::item_type::way;
                    });
                }

                return false;
            }
开发者ID:tomhughes,项目名称:libosmium,代码行数:20,代码来源:multipolygon_manager_legacy.hpp


示例11: switch

osmium::osm_entity_bits::type CommandAddRefs::add_members(const osmium::Relation& relation) {
    osmium::osm_entity_bits::type read_types = osmium::osm_entity_bits::nothing;

    for (const auto& member : relation.members()) {
        switch (member.type()) {
            case osmium::item_type::node:
                m_node_ids.insert(member.ref());
                break;
            case osmium::item_type::way:
                if (m_way_ids.count(member.ref()) == 0) {
                    m_way_ids.insert(member.ref());
                    read_types |= osmium::osm_entity_bits::way;
                }
                break;
            case osmium::item_type::relation:
                if (m_relation_ids.count(member.ref()) == 0) {
                    m_relation_ids.insert(member.ref());
                    read_types |= osmium::osm_entity_bits::relation;
                }
                break;
            default:
                break;
        }
    }

    return read_types;
}
开发者ID:NeziheSozen,项目名称:osmium-tool,代码行数:27,代码来源:command_add_refs.cpp


示例12: relation

                void relation(const osmium::Relation& relation) {
                    *m_out += 'r';
                    write_meta(relation);

                    *m_out += " M";

                    if (!relation.members().empty()) {
                        auto it = relation.members().begin();
                        relation_member(*it);
                        for (++it; it != relation.members().end(); ++it) {
                            *m_out += ',';
                            relation_member(*it);
                        }
                    }

                    *m_out += '\n';
                }
开发者ID:Cultrarius,项目名称:libosmium,代码行数:17,代码来源:opl_output_format.hpp


示例13: operator

            /**
             * Assemble an area from the given relation and its members.
             * The resulting area is put into the out_buffer.
             *
             * @returns false if there was some kind of error building the
             *          area(s), true otherwise.
             */
            bool operator()(const osmium::Relation& relation, const std::vector<const osmium::Way*>& members, osmium::memory::Buffer& out_buffer) {
                if (!config().create_new_style_polygons) {
                    return true;
                }

                assert(relation.cmembers().size() >= members.size());

                if (config().problem_reporter) {
                    config().problem_reporter->set_object(osmium::item_type::relation, relation.id());
                }

                if (relation.members().empty()) {
                    ++stats().no_way_in_mp_relation;
                    return false;
                }

                ++stats().from_relations;
                stats().invalid_locations = segment_list().extract_segments_from_ways(config().problem_reporter,
                                                                                      stats().duplicate_nodes,
                                                                                      stats().duplicate_ways,
                                                                                      relation,
                                                                                      members);
                if (!config().ignore_invalid_locations && stats().invalid_locations > 0) {
                    return false;
                }
                stats().member_ways = members.size();

                if (stats().member_ways == 1) {
                    ++stats().single_way_in_mp_relation;
                }

                if (config().debug_level > 0) {
                    std::cerr << "\nAssembling relation " << relation.id() << " containing " << members.size() << " way members with " << segment_list().size() << " nodes\n";
                }

                // Now create the Area object and add the attributes and tags
                // from the relation.
                bool okay = create_area(out_buffer, relation, members);
                if (okay) {
                    out_buffer.commit();
                } else {
                    out_buffer.rollback();
                }

                return okay;
            }
开发者ID:Project-OSRM,项目名称:osrm-backend,代码行数:53,代码来源:assembler.hpp


示例14: relation

     void relation ( osmium::Relation& rel ) {
          const char* bus = rel.tags() ["route"];
          const char* nev;
          if ( bus && !strcmp ( bus, "bus" ) ) {
               if( rel.tags()["name"])
               {
                    nev = rel.tags()["name"];
               }
               else
               {
                    nev = rel.tags()["ref"];
               }
               ++stops;
               //TODO asdasd


               int i {1};
               osmium::RelationMemberList& rml = rel.members();
               int szam=0;
               for ( osmium::RelationMember& rm : rml ) {
                    i = 1;
                    if (rm.type() == osmium::item_type::way ) {

                         for( auto it : way_node_map[rm.ref()] )
                         {
                              try {
                                   osmium::Location loc = locations.get ( it );

                                   if ( i++>1 ) {
                                        osmium::geom::Coordinates coords {loc};
                                        szam++;
                                        printf("%.8f %.8f\n",double(coords.y),double(coords.x) );

                                   }
                              } catch ( std::exception& e ) {
                                   std::cout << "No such node on the map. "<< e.what() << std::endl;
                              }
                         }
                    std::cout << "way\n";
                    }
               }
               //std::cout << "way\n";
               std::cout << nev << " busz\n";
          }

     }
开发者ID:szabob94,项目名称:vedes4,代码行数:46,代码来源:bus-stops.cpp


示例15: extract_segments_from_ways

 /**
  * Extract all segments from all ways that make up this
  * multipolygon relation and add them to the list.
  */
 void extract_segments_from_ways(const osmium::Relation& relation, const std::vector<size_t>& members, const osmium::memory::Buffer& in_buffer) {
     auto member_it = relation.members().begin();
     for (size_t offset : members) {
         const osmium::Way& way = in_buffer.get<const osmium::Way>(offset);
         extract_segments_from_way(way, member_it->role());
         ++member_it;
     }
 }
开发者ID:AFDudley,项目名称:osm2pgsql,代码行数:12,代码来源:segment_list.hpp


示例16: relation

 void relation(const osmium::Relation& relation) {
     for (const auto& member : relation.members()) {
         switch (member.type()) {
             case osmium::item_type::node:
                 m_index_n2r.set(member.positive_ref(), relation.positive_id());
                 break;
             case osmium::item_type::way:
                 m_index_w2r.set(member.positive_ref(), relation.positive_id());
                 break;
             case osmium::item_type::relation:
                 m_index_r2r.set(member.positive_ref(), relation.positive_id());
                 break;
             default:
                 break;
         }
     }
 }
开发者ID:KnockSoftware,项目名称:osrm-backend,代码行数:17,代码来源:object_relations.hpp


示例17: complete_relation

            /**
             * This is called when a relation is complete, ie. all members
             * were found in the input. It will build the area using the
             * assembler.
             */
            void complete_relation(const osmium::Relation& relation) {
                std::vector<const osmium::Way*> ways;
                ways.reserve(relation.members().size());
                for (const auto& member : relation.members()) {
                    if (member.ref() != 0) {
                        ways.push_back(this->get_member_way(member.ref()));
                        assert(ways.back() != nullptr);
                    }
                }

                try {
                    TAssembler assembler{m_assembler_config};
                    assembler(relation, ways, this->buffer());
                    m_stats += assembler.stats();
                } catch (const osmium::invalid_location&) {
                    // XXX ignore
                }
            }
开发者ID:tomhughes,项目名称:libosmium,代码行数:23,代码来源:multipolygon_manager_legacy.hpp


示例18: for_each_member

 inline void for_each_member(const osmium::Relation& relation, const std::vector<const osmium::Way*>& ways, F&& func) {
     auto way_it = ways.cbegin();
     for (const osmium::RelationMember& member : relation.members()) {
         if (member.type() == osmium::item_type::way) {
             assert(way_it != ways.cend());
             func(member, **way_it);
             ++way_it;
         }
     }
 }
开发者ID:hydrays,项目名称:osrm-backend,代码行数:10,代码来源:segment_list.hpp


示例19: relation_modify

int output_pgsql_t::relation_modify(osmium::Relation const &rel)
{
    if( !m_options.slim )
    {
        fprintf( stderr, "Cannot apply diffs unless in slim mode\n" );
        util::exit_nicely();
    }
    relation_delete(rel.id());
    relation_add(rel);
    return 0;
}
开发者ID:openstreetmap,项目名称:osm2pgsql,代码行数:11,代码来源:output-pgsql.cpp


示例20: complete_relation

 void complete_relation(const osmium::Relation& relation) noexcept {
     for (const auto& member : relation.members()) {
         if (member.type() == osmium::item_type::node) {
             ++count_nodes;
             const auto* node = get_member_node(member.ref());
             REQUIRE(node);
             buffer().add_item(*node);
             buffer().commit();
         }
     }
 }
开发者ID:KnockSoftware,项目名称:osrm-backend,代码行数:11,代码来源:test_relations_manager.cpp



注:本文中的osmium::Relation类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ osmium::Way类代码示例发布时间:2022-05-31
下一篇:
C++ osmium::OSMObject类代码示例发布时间:2022-05-31
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap