initial attempt at panoramax layer

Signed-off-by: zyphlar <zyphlar@gmail.com>
This commit is contained in:
zyphlar
2026-01-03 16:44:29 -08:00
parent 899df496ba
commit 5eeeaeb288
20 changed files with 192 additions and 3 deletions

View File

@@ -706,6 +706,7 @@ void Framework::FillInfoFromFeatureType(FeatureType & ft, place_page::Info & inf
info.SetFromFeatureType(ft);
FillDescription(ft, info);
CheckPanoramaxImagery(info);
auto const mwmInfo = ft.GetID().m_mwmId.GetInfo();
bool const isMapVersionEditable = CanEditMapForPosition(info.GetMercator());
@@ -3263,6 +3264,43 @@ void Framework::FillDescription(FeatureType & ft, place_page::Info & info) const
}
}
void Framework::CheckPanoramaxImagery(place_page::Info & info) const
{
// Query features within 50m radius
auto constexpr radiusM = 50.0;
auto const center = info.GetMercator();
auto const rect = mercator::RectByCenterXYAndSizeInMeters(center, radiusM);
auto const panoramaxType = classif().GetTypeByPath({"panoramax", "image"});
bool hasPanoramax = false;
std::string panoramaxImageId;
std::string panoramaxUrl;
m_featuresFetcher.GetDataSource().ForEachInRect([&](FeatureType & ft)
{
if (ft.GetTypes().Has(panoramaxType))
{
auto const imageId = ft.GetMetadata(feature::Metadata::FMD_PANORAMAX);
if (!imageId.empty())
{
hasPanoramax = true;
panoramaxImageId = std::string(imageId);
panoramaxUrl = "https://panoramax.openstreetmap.fr/#focus=pic:" + panoramaxImageId;
return base::ControlFlow::Break; // Found one, stop searching
}
}
return base::ControlFlow::Continue;
}, rect, df::GetDrawTileScale(rect));
if (hasPanoramax)
{
info.m_hasPanoramax = true;
info.m_panoramaxImageId = std::move(panoramaxImageId);
info.m_panoramaxUrl = std::move(panoramaxUrl);
}
}
void Framework::OnPowerFacilityChanged(power_management::Facility const facility, bool enabled)
{
if (facility == power_management::Facility::PerspectiveView || facility == power_management::Facility::Buildings3d)