Update location distance using directly distance, not driving distance

This commit is contained in:
2026-01-15 17:25:26 -05:00
parent d9428236ec
commit 41292adb6f
+10 -61
View File
@@ -640,11 +640,8 @@ def geocode_address_enhanced(address):
def calculate_distance_miles(lat1, lng1, lat2, lng2): def calculate_distance_miles(lat1, lng1, lat2, lng2):
""" """
Calculate distance between two points using Google Maps Distance Matrix API for road distance Calculate DIRECT straight-line distance between two points using Haversine formula
Falls back to Haversine formula for straight-line distance if Google Maps is unavailable
COMPLETELY REWRITTEN - TESTED AND VERIFIED
Args: Args:
lat1, lng1: First point coordinates (decimal degrees) lat1, lng1: First point coordinates (decimal degrees)
lat2, lng2: Second point coordinates (decimal degrees) lat2, lng2: Second point coordinates (decimal degrees)
@@ -680,62 +677,14 @@ def calculate_distance_miles(lat1, lng1, lat2, lng2):
# Log distance calculation attempt # Log distance calculation attempt
try: try:
logger_handler.log_user_activity( logger_handler.log_user_activity(
'distance_calculation', 'distance_calculation',
f'Calculating distance: ({lat1_val:.6f}, {lng1_val:.6f}) to ({lat2_val:.6f}, {lng2_val:.6f})' f'Calculating direct distance: ({lat1_val:.6f}, {lng1_val:.6f}) to ({lat2_val:.6f}, {lng2_val:.6f})'
) )
except: except:
pass # Ignore logging errors pass # Ignore logging errors
# PRIMARY: Try Google Maps Distance Matrix API for road distance # Use Haversine formula for straight-line distance
if gmaps_client: print(f"📐 Calculating direct straight-line distance using Haversine formula")
try:
print(f"🗺️ Attempting Google Maps Distance Matrix API")
origins = [(lat1_val, lng1_val)]
destinations = [(lat2_val, lng2_val)]
matrix = gmaps_client.distance_matrix(
origins=origins,
destinations=destinations,
mode="driving",
units="imperial",
avoid="tolls"
)
if (matrix['status'] == 'OK' and
matrix['rows'][0]['elements'][0]['status'] == 'OK'):
distance_data = matrix['rows'][0]['elements'][0]['distance']
distance_text = distance_data['text']
distance_value = distance_data['value'] # meters
# Convert to miles
if 'mi' in distance_text:
distance_miles = float(distance_text.replace(' mi', '').replace(',', ''))
else:
distance_miles = distance_value * 0.000621371
distance_miles = round(distance_miles, 4)
print(f"📏 Google Maps road distance: {distance_miles:.4f} miles")
try:
logger_handler.log_user_activity(
'distance_calculation_success',
f'Google Maps distance: {distance_miles:.4f} miles'
)
except:
pass
return distance_miles
else:
print(f"⚠️ Google Maps API returned no valid results")
except Exception as gmaps_error:
print(f"⚠️ Google Maps API error: {gmaps_error}")
# FALLBACK: Use Haversine formula for straight-line distance
print(f"📐 Using Haversine formula for straight-line distance")
# Step 1: Convert decimal degrees to radians # Step 1: Convert decimal degrees to radians
# CRITICAL: Only convert ONCE! # CRITICAL: Only convert ONCE!
@@ -779,7 +728,7 @@ def calculate_distance_miles(lat1, lng1, lat2, lng2):
distance = round(distance, 4) distance = round(distance, 4)
# Debug output # Debug output
print(f"📏 Haversine straight-line distance calculation:") print(f"📏 Direct straight-line distance calculation:")
print(f" Point 1: ({lat1_val:.10f}, {lng1_val:.10f})") print(f" Point 1: ({lat1_val:.10f}, {lng1_val:.10f})")
print(f" Point 2: ({lat2_val:.10f}, {lng2_val:.10f})") print(f" Point 2: ({lat2_val:.10f}, {lng2_val:.10f})")
print(f" Δlat: {abs(lat2_val - lat1_val):.10f}° = {dlat:.12f} radians") print(f" Δlat: {abs(lat2_val - lat1_val):.10f}° = {dlat:.12f} radians")
@@ -791,8 +740,8 @@ def calculate_distance_miles(lat1, lng1, lat2, lng2):
# Log fallback calculation # Log fallback calculation
try: try:
logger_handler.log_user_activity( logger_handler.log_user_activity(
'distance_calculation_fallback', 'distance_calculation_success',
f'Haversine distance: {distance:.4f} miles' f'Direct distance: {distance:.4f} miles'
) )
except: except:
pass pass