xxxxxxxxxx
<?php
// Function to calculate distance between two lat/long points using Haversine formula
function haversineDistance($lat1, $lon1, $lat2, $lon2, $radius = 6371) {
$lat1 = deg2rad($lat1);
$lon1 = deg2rad($lon1);
$lat2 = deg2rad($lat2);
$lon2 = deg2rad($lon2);
$dlat = $lat2 - $lat1;
$dlon = $lon2 - $lon1;
$a = sin($dlat / 2) * sin($dlat / 2) +
cos($lat1) * cos($lat2) * sin($dlon / 2) * sin($dlon / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
return $radius * $c; // Distance in kilometers
}
// Define user location
$userLat = 40.7128; // Example latitude (New York City)
$userLon = -74.0060; // Example longitude (New York City)
// Define radius in kilometers
$radius = 10; // 10 km
// List of job locations (example data)
$jobs = [
['id' => 1, 'title' => 'Software Engineer', 'lat' => 40.730610, 'lon' => -73.935242], // New York
['id' => 2, 'title' => 'Data Scientist', 'lat' => 40.748817, 'lon' => -73.985428], // Empire State Building
['id' => 3, 'title' => 'Product Manager', 'lat' => 40.7831, 'lon' => -73.9712], // Central Park
['id' => 4, 'title' => 'Marketing Specialist', 'lat' => 41.0082, 'lon' => 28.9784], // Istanbul (far away)
];
// Filter jobs within the specified radius
$filteredJobs = array_filter($jobs, function ($job) use ($userLat, $userLon, $radius) {
$distance = haversineDistance($userLat, $userLon, $job['lat'], $job['lon']);
return $distance <= $radius; // Include job if within radius
});
// Display filtered jobs
foreach ($filteredJobs as $job) {
echo "Job ID: {$job['id']}, Title: {$job['title']}, Location Distance: " . round(haversineDistance($userLat, $userLon, $job['lat'], $job['lon']), 2) . " km\n";
}
xxxxxxxxxx
static double coordinateDistance(
double lat1, double lng1, double lat2, double lng2) {
const p = 0.017453292519943295;
const c = cos;
final a = 0.5 -
c((lat2 - lat1) * p) / 2 +
c(lat1 * p) * c(lat2 * p) * (1 - c((lng2 - lng1) * p)) / 2;
return 12742 * asin(sqrt(a));
}
// calculate distance from polyline-coordinates (list of locations)
static double calculateDistance(
{@required List<Location> polylineCoordinates}) {
double _totalDistance = 0.0;
for (int i = 0; i < polylineCoordinates.length - 1; i++) {
_totalDistance += coordinateDistance(
polylineCoordinates[i].lat,
polylineCoordinates[i].lng,
polylineCoordinates[i + 1].lat,
polylineCoordinates[i + 1].lng,
);
}