Get 20 places results and dont round coordinates

This commit is contained in:
Eugene Burmakin 2025-03-08 19:08:47 +01:00
parent 52fd54e39f
commit d78482f1bf
3 changed files with 11 additions and 12 deletions

View file

@ -909,6 +909,7 @@ export class VisitsManager {
<span class="text-sm mb-1 ${statusColorClass} font-semibold"> <span class="text-sm mb-1 ${statusColorClass} font-semibold">
status: ${visit.status.charAt(0).toUpperCase() + visit.status.slice(1)} status: ${visit.status.charAt(0).toUpperCase() + visit.status.slice(1)}
</span> </span>
<span>${visit.place.latitude}, ${visit.place.longitude}</span>
</div> </div>
</div> </div>
<form class="visit-name-form" data-visit-id="${visit.id}"> <form class="visit-name-form" data-visit-id="${visit.id}">

View file

@ -88,7 +88,7 @@ class ReverseGeocoding::Places::FetchData
limit: 10, limit: 10,
distance_sort: true, distance_sort: true,
radius: 1, radius: 1,
units: ::DISTANCE_UNIT units: ::DISTANCE_UNIT,
) )
data.reject do |place| data.reject do |place|

View file

@ -5,7 +5,7 @@ module Visits
class PlaceFinder class PlaceFinder
attr_reader :user attr_reader :user
SEARCH_RADIUS = 500 # meters SEARCH_RADIUS = 100 # meters
SIMILARITY_RADIUS = 50 # meters SIMILARITY_RADIUS = 50 # meters
def initialize(user) def initialize(user)
@ -13,8 +13,8 @@ module Visits
end end
def find_or_create_place(visit_data) def find_or_create_place(visit_data)
lat = visit_data[:center_lat].round(5) lat = visit_data[:center_lat]
lon = visit_data[:center_lon].round(5) lon = visit_data[:center_lon]
# First check if there's an existing place # First check if there's an existing place
existing_place = find_existing_place(lat, lon, visit_data[:suggested_name]) existing_place = find_existing_place(lat, lon, visit_data[:suggested_name])
@ -23,7 +23,7 @@ module Visits
if existing_place if existing_place
return { return {
main_place: existing_place, main_place: existing_place,
suggested_places: find_suggested_places(lat, lon, existing_place.id) suggested_places: find_suggested_places(lat, lon)
} }
end end
@ -60,8 +60,8 @@ module Visits
# Step 2: Collect potential places from all sources # Step 2: Collect potential places from all sources
def collect_potential_places(visit_data) def collect_potential_places(visit_data)
lat = visit_data[:center_lat].round(5) lat = visit_data[:center_lat]
lon = visit_data[:center_lon].round(5) lon = visit_data[:center_lon]
# Get places from points' geodata # Get places from points' geodata
places_from_points = extract_places_from_points(visit_data[:points], lat, lon) places_from_points = extract_places_from_points(visit_data[:points], lat, lon)
@ -143,7 +143,7 @@ module Visits
# Step 5: Fetch places from API # Step 5: Fetch places from API
def fetch_places_from_api(lat, lon) def fetch_places_from_api(lat, lon)
# Get broader search results from Geocoder # 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? return [] if geocoder_results.blank?
places = [] places = []
@ -221,10 +221,8 @@ module Visits
end end
# Step 9: Find suggested places # Step 9: Find suggested places
def find_suggested_places(lat, lon, exclude_id = nil) def find_suggested_places(lat, lon)
query = Place.near([lat, lon], SEARCH_RADIUS, :m).with_distance([lat, lon], :m) 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)
end end
# Helper methods # Helper methods