From d78482f1bf7ad16e98ec1417532dcbd182a3e090 Mon Sep 17 00:00:00 2001 From: Eugene Burmakin Date: Sat, 8 Mar 2025 19:08:47 +0100 Subject: [PATCH] Get 20 places results and dont round coordinates --- app/javascript/maps/visits.js | 1 + .../reverse_geocoding/places/fetch_data.rb | 2 +- app/services/visits/place_finder.rb | 20 +++++++++---------- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/app/javascript/maps/visits.js b/app/javascript/maps/visits.js index 4a9389df..941b1a8b 100644 --- a/app/javascript/maps/visits.js +++ b/app/javascript/maps/visits.js @@ -909,6 +909,7 @@ export class VisitsManager { status: ${visit.status.charAt(0).toUpperCase() + visit.status.slice(1)} + ${visit.place.latitude}, ${visit.place.longitude}
diff --git a/app/services/reverse_geocoding/places/fetch_data.rb b/app/services/reverse_geocoding/places/fetch_data.rb index c2fb29bd..3b6309a1 100644 --- a/app/services/reverse_geocoding/places/fetch_data.rb +++ b/app/services/reverse_geocoding/places/fetch_data.rb @@ -88,7 +88,7 @@ class ReverseGeocoding::Places::FetchData limit: 10, distance_sort: true, radius: 1, - units: ::DISTANCE_UNIT + units: ::DISTANCE_UNIT, ) data.reject do |place| diff --git a/app/services/visits/place_finder.rb b/app/services/visits/place_finder.rb index 99b0a621..adb9b65a 100644 --- a/app/services/visits/place_finder.rb +++ b/app/services/visits/place_finder.rb @@ -5,7 +5,7 @@ module Visits class PlaceFinder attr_reader :user - SEARCH_RADIUS = 500 # meters + SEARCH_RADIUS = 100 # meters SIMILARITY_RADIUS = 50 # meters def initialize(user) @@ -13,8 +13,8 @@ module Visits end def find_or_create_place(visit_data) - lat = visit_data[:center_lat].round(5) - lon = visit_data[:center_lon].round(5) + lat = visit_data[:center_lat] + lon = visit_data[:center_lon] # First check if there's an existing place existing_place = find_existing_place(lat, lon, visit_data[:suggested_name]) @@ -23,7 +23,7 @@ module Visits if existing_place return { main_place: existing_place, - suggested_places: find_suggested_places(lat, lon, existing_place.id) + suggested_places: find_suggested_places(lat, lon) } end @@ -60,8 +60,8 @@ module Visits # Step 2: Collect potential places from all sources def collect_potential_places(visit_data) - lat = visit_data[:center_lat].round(5) - lon = visit_data[:center_lon].round(5) + lat = visit_data[:center_lat] + lon = visit_data[:center_lon] # Get places from points' geodata places_from_points = extract_places_from_points(visit_data[:points], lat, lon) @@ -143,7 +143,7 @@ module Visits # Step 5: Fetch places from API def fetch_places_from_api(lat, lon) # Get broader search results from Geocoder - geocoder_results = Geocoder.search([lat, lon], radius: (SEARCH_RADIUS / 1000.0), units: :km) + geocoder_results = Geocoder.search([lat, lon], units: :km, limit: 20, distance_sort: true) return [] if geocoder_results.blank? places = [] @@ -221,10 +221,8 @@ module Visits end # Step 9: Find suggested places - def find_suggested_places(lat, lon, exclude_id = nil) - query = Place.near([lat, lon], SEARCH_RADIUS, :m).with_distance([lat, lon], :m) - query = query.where.not(id: exclude_id) if exclude_id - query.limit(5) + def find_suggested_places(lat, lon) + Place.near([lat, lon], SEARCH_RADIUS, :m).with_distance([lat, lon], :m) end # Helper methods