OGRFeature* create_area_feature(const shared_ptr<Osmium::OSM::Area const>& area) { OGRFeature* feature = OGRFeature::CreateFeature(m_layer_polygon->GetLayerDefn()); Osmium::Geometry::MultiPolygon mp(*area); OGRMultiPolygon* ogrgeom = Osmium::Geometry::create_ogr_geometry(mp); ogrgeom->transform(m_transformation); feature->SetGeometryDirectly(ogrgeom); sprintf(longint, "%ld", area->from_way() ? area->orig_id() : -area->orig_id()); feature->SetField("osm_id", longint); feature->SetField("z_order", calculate_z_order(area.get())); feature->SetField("way_area", ogrgeom->get_Area()); return feature; }
double Polygon::area() const { throwNoGeos(); OGRwkbGeometryType t = m_geom->getGeometryType(); // Not until GDAL 2.3 /** if (t == wkbPolygon || t == wkbPolygon25D) return m_geom->toPolygon()->get_Area(); else if (t == wkbMultiPolygon || t == wkbMultiPolygon25D) return m_geom->toMultiPolygon()->get_Area(); **/ if (t == wkbPolygon || t == wkbPolygon25D) { OGRPolygon *p = static_cast<OGRPolygon *>(m_geom.get()); return p->get_Area(); } else if (t == wkbMultiPolygon || t == wkbMultiPolygon25D) { OGRMultiPolygon *p = static_cast<OGRMultiPolygon *>(m_geom.get()); return p->get_Area(); } return 0; }