OsmAnd::GeoInfoPresenter::MapObject::MapObject( const std::shared_ptr<const GeoInfoDocument>& geoInfoDocument_, const std::shared_ptr<const GeoInfoDocument::ExtraData>& extraData /*= nullptr*/) : geoInfoDocument(geoInfoDocument_) { const auto mapping = std::make_shared<AttributeMapping>(); attributeMapping = mapping; if (extraData) { auto lastUsedRuleId = 0; const auto values = extraData->getValues(); for (const auto valueEntry : rangeOf(constOf(values))) { const auto& tag = valueEntry.key(); auto value = valueEntry.value().toString(); if (tag == QLatin1String("color")) value = Utilities::resolveColorFromPalette(value, false); uint32_t attributeId; if (!mapping->encodeTagValue(tag, value, &attributeId)) { attributeId = ++lastUsedRuleId; mapping->registerMapping(attributeId, tag, value); } additionalAttributeIds.append(attributeId); } } mapping->verifyRequiredMappingRegistered(); additionalAttributeIds.append(geoInfoDocument->locationMarks.isEmpty() ? mapping->waypointsNotPresentAttributeId : mapping->waypointsPresentAttributeId); additionalAttributeIds.append(geoInfoDocument->tracks.isEmpty() ? mapping->trackpointsNotPresentAttributeId : mapping->trackpointsPresentAttributeId); additionalAttributeIds.append(geoInfoDocument->routes.isEmpty() ? mapping->routepointsNotPresentAttributeId : mapping->routepointsPresentAttributeId); }
void OsmAnd::GeoInfoPresenter::MapObject::AttributeMapping::registerRequiredMapping(uint32_t& lastUsedEntryId) { if (waypointAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("osmand"), QLatin1String("file_waypoint")); } if (trackpointAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("osmand"), QLatin1String("file_trackpoint")); } if (routepointAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("osmand"), QLatin1String("file_routepoint")); } if (tracklineAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("osmand"), QLatin1String("file_trackline")); } if (routelineAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("osmand"), QLatin1String("file_routeline")); } if (routelineAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("osmand"), QLatin1String("file_routeline")); } if (waypointsPresentAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("file_has_waypoints"), QLatin1String("true")); } if (waypointsNotPresentAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("file_has_waypoints"), QLatin1String("false")); } if (trackpointsPresentAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("file_has_trackpoints"), QLatin1String("true")); } if (trackpointsNotPresentAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("file_has_trackpoints"), QLatin1String("false")); } if (routepointsPresentAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("file_has_routepoints"), QLatin1String("true")); } if (routepointsNotPresentAttributeId == std::numeric_limits<uint32_t>::max()) { registerMapping(++lastUsedEntryId, QLatin1String("file_has_routepoints"), QLatin1String("false")); } }