From f43fb90ff71690f6d8c3e0a04da275622d264888 Mon Sep 17 00:00:00 2001 From: Aleksandr Panchenko Date: Tue, 16 Apr 2024 17:18:14 +0300 Subject: [PATCH 1/2] add onlyJointMap --- .../OARequiredMapsResourceViewController.mm | 10 +++----- .../MissingMapsCalculator.mm | 25 +++++++++++++++---- Sources/OAWorldRegion.h | 3 +++ Sources/OAWorldRegion.mm | 17 ++++++++++++- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/Sources/Controllers/Resources/OARequiredMapsResourceViewController/OARequiredMapsResourceViewController.mm b/Sources/Controllers/Resources/OARequiredMapsResourceViewController/OARequiredMapsResourceViewController.mm index c2f8136ffb..b4aa65e923 100644 --- a/Sources/Controllers/Resources/OARequiredMapsResourceViewController/OARequiredMapsResourceViewController.mm +++ b/Sources/Controllers/Resources/OARequiredMapsResourceViewController/OARequiredMapsResourceViewController.mm @@ -432,14 +432,10 @@ - (void)configureResourceItems NSArray *resources = [NSArray arrayWithArray:[_missingMapsResources arrayByAddingObjectsFromArray:_mapsToUpdateResources]]; - NSArray *sortedRegionsMaps = [resources sortedArrayUsingComparator:^NSComparisonResult(OAResourceItem *obj1, OAResourceItem *obj2) { - return [obj1.title compare:obj2.title]; - }]; - - if (sortedRegionsMaps.count > 0) + if (resources.count > 0) { - _resourcesItems = sortedRegionsMaps; - _selectedResourcesItems = [sortedRegionsMaps mutableCopy]; + _resourcesItems = resources; + _selectedResourcesItems = [resources mutableCopy]; [self.tableView reloadData]; } } diff --git a/Sources/Helpers/MissingMapsCalculator/MissingMapsCalculator.mm b/Sources/Helpers/MissingMapsCalculator/MissingMapsCalculator.mm index 6f96ded886..f7f76f6859 100644 --- a/Sources/Helpers/MissingMapsCalculator/MissingMapsCalculator.mm +++ b/Sources/Helpers/MissingMapsCalculator/MissingMapsCalculator.mm @@ -11,6 +11,9 @@ #import "OsmAnd_Maps-Swift.h" #import "OARoutingHelper.h" #import "OARouteProvider.h" +#import "OACurrentPositionHelper.h" +#import "OACustomRegion.h" + #include #include @@ -90,7 +93,6 @@ - (BOOL)checkIfThereAreMissingMaps:(std::shared_ptr)ctx for (auto* file : getOpenMapFiles()) { - NSString *regionName = [NSString stringWithCString:file->inputName.c_str() encoding:[NSString defaultCStringEncoding]]; NSString *downloadName = regionName.lastPathComponent; @@ -270,7 +272,8 @@ - (void)addPoint:(std::shared_ptr)ctx { NSMutableArray *regions = [NSMutableArray array]; - NSArray *regionsArray = [_or getWorldRegionsAt:loc.coordinate.latitude longitude:loc.coordinate.longitude]; + NSArray *regionsArray = [_or getWorldRegionsAtWithoutSort:loc.coordinate.latitude longitude:loc.coordinate.longitude]; + BOOL onlyJointMap = YES; for (OAWorldRegion *region in regionsArray) { @@ -280,13 +283,15 @@ - (void)addPoint:(std::shared_ptr)ctx regionDownloadId = [regionDownloadId substringToIndex:[regionDownloadId length] - 1]; } [regions addObject:regionDownloadId]; + if (!region.regionJoinMap && !region.regionJoinRoads) { + onlyJointMap = NO; + } } [regions sortUsingComparator:^NSComparisonResult(NSString * _Nonnull o1, NSString * _Nonnull o2) { NSInteger lengthComparisonResult = [@(o1.length) compare:@(o2.length)]; return (NSComparisonResult)(-lengthComparisonResult); }]; - - if (pointsToCheck.count == 0 || ![regions isEqualToArray:_lastKeyNames]) + if ((pointsToCheck.count == 0 || ![regions isEqualToArray:_lastKeyNames]) && !onlyJointMap) { MissingMapsCalculatorPoint *pnt = [MissingMapsCalculatorPoint new]; _lastKeyNames = regions; @@ -339,7 +344,17 @@ SearchQuery q((uint32_t)(x31 << zoomToLoad), (uint32_t)((x31 + 1) << zoomToLoad) [worldRegions addObject:worldRegion]; } } - return [[worldRegions sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]] copy]; + return [[self getSortedByDistanceRegions:worldRegions lat:self.startPoint.coordinate.latitude lon:self.startPoint.coordinate.longitude] copy]; +} + +- (NSArray *) getSortedByDistanceRegions:(NSArray *)array lat:(double)lat lon:(double)lon +{ + return [array sortedArrayUsingComparator:^NSComparisonResult(OAWorldRegion *obj1, OAWorldRegion *obj2) + { + const auto distance1 = OsmAnd::Utilities::distance(lon, lat, obj1.regionCenter.longitude, obj1.regionCenter.latitude); + const auto distance2 = OsmAnd::Utilities::distance(lon, lat, obj2.regionCenter.longitude, obj2.regionCenter.latitude); + return distance1 > distance2 ? NSOrderedDescending : distance1 < distance2 ? NSOrderedAscending : NSOrderedSame; + }]; } - (BOOL)addMapEditions:(NSDictionary *)knownMaps diff --git a/Sources/OAWorldRegion.h b/Sources/OAWorldRegion.h index 3a7f6e75f9..54432710f2 100644 --- a/Sources/OAWorldRegion.h +++ b/Sources/OAWorldRegion.h @@ -31,6 +31,8 @@ @property (readonly) NSString* regionRoadSigns; @property (readonly) NSString* wikiLink; @property (readonly) NSString* population; +@property (readonly) BOOL regionJoinMap; +@property (readonly) BOOL regionJoinRoads; @property (readonly) CLLocationCoordinate2D bboxTopLeft; @property (readonly) CLLocationCoordinate2D bboxBottomRight; @@ -54,6 +56,7 @@ - (NSArray *) queryAtLat:(double)lat lon:(double)lon; - (NSArray *) getWorldRegionsAt:(double)latitude longitude:(double)longitude; +- (NSArray *)getWorldRegionsAtWithoutSort:(double)latitude longitude:(double)longitude; - (OAWorldRegion *) findAtLat:(double)latitude lon:(double)longitude; - (NSString *) getCountryNameAtLat:(double)latitude lon:(double)longitude; - (double) getArea; diff --git a/Sources/OAWorldRegion.mm b/Sources/OAWorldRegion.mm index 48ea91b196..5ba45b75b5 100644 --- a/Sources/OAWorldRegion.mm +++ b/Sources/OAWorldRegion.mm @@ -71,6 +71,8 @@ - (instancetype) initFrom:(const std::shared_ptr &)re _regionRoadSigns = _worldRegion->regionRoadSigns.toNSString(); _wikiLink = _worldRegion->wikiLink.toNSString(); _population = _worldRegion->population.toNSString(); + _regionJoinMap = _worldRegion->regionJoinMap; + _regionJoinRoads = _worldRegion->regionJoinRoads; OsmAnd::LatLon latLonTopLeft = OsmAnd::Utilities::convert31ToLatLon(region->mapObject->bbox31.topLeft); OsmAnd::LatLon latLonBottomRight = OsmAnd::Utilities::convert31ToLatLon(region->mapObject->bbox31.bottomRight); @@ -659,7 +661,20 @@ - (BOOL) isBoundary return [NSArray arrayWithArray:res]; } -- (NSArray *) getWorldRegionsAt:(double)latitude longitude:(double)longitude +- (NSArray *)getWorldRegionsAtWithoutSort:(double)latitude longitude:(double)longitude +{ + NSMutableArray *mapRegions = [NSMutableArray arrayWithArray:[self queryAtLat:latitude lon:longitude]]; + if (mapRegions.count > 0) + { + [mapRegions.copy enumerateObjectsUsingBlock:^(OAWorldRegion * _Nonnull region, NSUInteger idx, BOOL * _Nonnull stop) { + if (![region contain:latitude lon:longitude]) + [mapRegions removeObject:region]; + }]; + } + return mapRegions; +} + +- (NSArray *)getWorldRegionsAt:(double)latitude longitude:(double)longitude { NSMutableArray *mapRegions = [NSMutableArray arrayWithArray:[self queryAtLat:latitude lon:longitude]]; if (mapRegions.count > 0) From 0a57df8f113024d5c17fcaf731bb920d675af486 Mon Sep 17 00:00:00 2001 From: Aleksandr Panchenko Date: Tue, 16 Apr 2024 17:30:57 +0300 Subject: [PATCH 2/2] clear code --- Sources/Helpers/MissingMapsCalculator/MissingMapsCalculator.mm | 3 --- 1 file changed, 3 deletions(-) diff --git a/Sources/Helpers/MissingMapsCalculator/MissingMapsCalculator.mm b/Sources/Helpers/MissingMapsCalculator/MissingMapsCalculator.mm index f7f76f6859..f74548f001 100644 --- a/Sources/Helpers/MissingMapsCalculator/MissingMapsCalculator.mm +++ b/Sources/Helpers/MissingMapsCalculator/MissingMapsCalculator.mm @@ -11,9 +11,6 @@ #import "OsmAnd_Maps-Swift.h" #import "OARoutingHelper.h" #import "OARouteProvider.h" -#import "OACurrentPositionHelper.h" -#import "OACustomRegion.h" - #include #include