本文整理汇总了C++中osmium::Way::is_closed方法的典型用法代码示例。如果您正苦于以下问题:C++ Way::is_closed方法的具体用法?C++ Way::is_closed怎么用?C++ Way::is_closed使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类osmium::Way
的用法示例。
在下文中一共展示了Way::is_closed方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: pgsql_out_way
void output_pgsql_t::pgsql_out_way(osmium::Way const &way, taglist_t *tags,
bool polygon, bool roads)
{
if (polygon && way.is_closed()) {
auto wkb = m_builder.get_wkb_polygon(way);
if (!wkb.empty()) {
expire.from_wkb(wkb.c_str(), way.id());
if (m_enable_way_area) {
char tmp[32];
auto const area =
m_options.reproject_area
? ewkb::parser_t(wkb).get_area<reprojection>(
m_options.projection.get())
: ewkb::parser_t(wkb)
.get_area<osmium::geom::IdentityProjection>();
snprintf(tmp, sizeof(tmp), "%g", area);
tags->push_override(tag_t("way_area", tmp));
}
m_tables[t_poly]->write_row(way.id(), *tags, wkb);
}
} else {
double const split_at = m_options.projection->target_latlon() ? 1 : 100 * 1000;
for (auto const &wkb : m_builder.get_wkb_line(way.nodes(), split_at)) {
expire.from_wkb(wkb.c_str(), way.id());
m_tables[t_line]->write_row(way.id(), *tags, wkb);
if (roads) {
m_tables[t_roads]->write_row(way.id(), *tags, wkb);
}
}
}
}
示例2: feed_way
void feed_way(const osmium::Way& way) {
try {
const char* street = way.tags().get_value_by_key("addr:street");
const char* housenumber = way.tags().get_value_by_key("addr:housenumber");
const char* full = way.tags().get_value_by_key("addr:full");
const char* conscriptionnumber = way.tags().get_value_by_key("addr:conscriptionnumber");
const char* housename = way.tags().get_value_by_key("addr:housename");
const char* place = way.tags().get_value_by_key("addr:place");
const char* postcode = way.tags().get_value_by_key("addr:postcode");
const char* flats = way.tags().get_value_by_key("addr:flats");
const char* door = way.tags().get_value_by_key("addr:door");
const char* unit = way.tags().get_value_by_key("addr:unit");
const char* floor = way.tags().get_value_by_key("addr:floor");
const char* city = way.tags().get_value_by_key("addr:city");
const char* country = way.tags().get_value_by_key("addr:country");
const char* hamlet = way.tags().get_value_by_key("addr:hamlet");
const char* suburb = way.tags().get_value_by_key("addr:suburb");
const char* district = way.tags().get_value_by_key("addr:district");
const char* subdistrict = way.tags().get_value_by_key("addr:subdistrict");
const char* province = way.tags().get_value_by_key("addr:province");
const char* region = way.tags().get_value_by_key("addr:region");
const char* state = way.tags().get_value_by_key("addr:state");
if (!way.is_closed() && (street || housenumber || full ||
conscriptionnumber || housename || place || postcode ||
flats || door || unit || floor || city || country ||
hamlet || suburb || district || subdistrict || province ||
region || state)) {
std::unique_ptr<OGRLineString> ogr_linestring = m_factory.create_linestring(way);
OGRFeature* const feature = OGRFeature::CreateFeature(m_layer->GetLayerDefn());
feature->SetGeometryDirectly(static_cast<OGRGeometry*>(ogr_linestring.release()));
feature->SetField("way_id", static_cast<double>(way.id())); //TODO: node.id() is of type int64_t. is this ok?
feature->SetField("lastchange", way.timestamp().to_iso().c_str());
create_feature(feature);
}
} catch (osmium::geometry_error& e) {
catch_geometry_error(e, way);
}
}
示例3: feed_way
void feed_way(const osmium::Way& way) {
try {
const char* building = way.tags().get_value_by_key("building");
if (building && way.is_closed()) {
std::unique_ptr<OGRLineString> ogr_linestring = m_factory.create_linestring(way);
OGRFeature* feature = OGRFeature::CreateFeature(m_layer->GetLayerDefn());
OGRPolygon polygon;
polygon.addRing(static_cast<OGRLinearRing*>(ogr_linestring.get()));
feature->SetGeometry(static_cast<OGRGeometry*>(&polygon));
feature->SetField("way_id", static_cast<double>(way.id())); //TODO: node.id() is of type int64_t. is this ok?
feature->SetField("lastchange", way.timestamp().to_iso().c_str());
create_feature(feature);
}
} catch (osmium::geom::geometry_error& e) {
catch_geometry_error(e, way);
}
}
示例4: feed_way
void feed_way(const osmium::Way& way) {
try {
const char* building = way.tags().get_value_by_key("building");
if (building && way.is_closed()) {
const char* street = way.tags().get_value_by_key("addr:street");
const char* houseno = way.tags().get_value_by_key("addr:housenumber");
if (street || houseno) {
std::unique_ptr<OGRLineString> ogr_linestring = m_factory.create_linestring(way);
OGRFeature* feature = OGRFeature::CreateFeature(m_layer->GetLayerDefn());
OGRPolygon polygon;
polygon.addRing(static_cast<OGRLinearRing*>(ogr_linestring.get()));
feature->SetGeometry(static_cast<OGRGeometry*>(&polygon));
feature->SetField("way_id", static_cast<double>(way.id())); //TODO: node.id() is of type int64_t. is this ok?
feature->SetField("lastchange", way.timestamp().to_iso().c_str());
const char* postcode = way.tags().get_value_by_key("addr:postcode");
const char* city = way.tags().get_value_by_key("addr:city");
const char* country = way.tags().get_value_by_key("addr:country");
const char* fulladdr = way.tags().get_value_by_key("addr:full");
const char* place = way.tags().get_value_by_key("addr:place");
if (street) { feature->SetField("street" , street); }
if (houseno) { feature->SetField("houseno" , houseno); }
if (postcode) { feature->SetField("postcode", postcode); }
if (city) { feature->SetField("city", city); }
if (country) { feature->SetField("country", country); }
if (fulladdr) { feature->SetField("fulladdr", fulladdr); }
if (place) { feature->SetField("place", place); }
create_feature(feature);
}
}
}
catch (osmium::geometry_error& e) {
catch_geometry_error(e, way);
}
}
示例5: feed_way
//.........这里部分代码省略.........
feature->SetField("error", "unknown interpolation type");
} else if (
strcmp(interpolation, "alphabetic") && // don't overwrite more precise error messages set before
(first == 0 ||
last == 0 ||
first_raw.length() != floor(log10(first))+1 || // make sure 123%& is not recognized as 123
last_raw.length() != floor(log10(last) )+1 //
)) {
feature->SetField("error", "endpoint has wrong format");
} else if (abs_diff(first,last) > 1000) {
feature->SetField("error", "range too large");
} else if (((!strcmp(interpolation,"even") || !strcmp(interpolation,"odd")) && abs_diff(first,last)==2) ||
(!strcmp(interpolation,"all") && abs_diff(first,last)==1) ) {
feature->SetField("error", "needless interpolation");
} else if (!strcmp(interpolation,"even") && ( first%2==1 || last%2==1 )) {
feature->SetField("error", "interpolation even but number odd");
} else if (!strcmp(interpolation,"odd") && ( first%2==0 || last%2==0 )) {
feature->SetField("error", "interpolation odd but number even");
} else if (
(first_taglist.get_value_by_key("addr:street") != last_taglist.get_value_by_key("addr:street")) ||
(first_taglist.get_value_by_key("addr:postcode") != last_taglist.get_value_by_key("addr:postcode")) ||
(first_taglist.get_value_by_key("addr:city") != last_taglist.get_value_by_key("addr:city")) ||
(first_taglist.get_value_by_key("addr:country") != last_taglist.get_value_by_key("addr:country")) ||
(first_taglist.get_value_by_key("addr:full") != last_taglist.get_value_by_key("addr:full")) ||
(first_taglist.get_value_by_key("addr:place") != last_taglist.get_value_by_key("addr:place")) ) {
feature->SetField("error", "different tags on endpoints");
} else if (way.is_closed()) {
feature->SetField("error", "interpolation is a closed way");
} else if ( // no interpolation error
(!strcmp(interpolation, "all")) ||
(!strcmp(interpolation, "odd")) ||
(!strcmp(interpolation, "even")) ||
(is_alphabetic_ip_correct == true)) {
double length = ogr_linestring.get()->get_Length();
int increment;
if (strcmp(interpolation, "all") && strcmp(interpolation, "alphabetic")) {
increment = 2; // even , odd
} else {
increment = 1; //all , alphabetic
}
double fraction;
unsigned int lower, upper;
if (first < last) {
fraction = 1/static_cast<double>(last-first);
lower = first;
upper = last;
} else {
fraction = 1/static_cast<double>(first-last);
increment *= -1;
lower = last;
upper = first;
}
for (unsigned int nr=first+increment; nr<upper && nr>lower; nr+=increment) {
std::unique_ptr<OGRPoint> point (new OGRPoint);