So finden Sie mit PHP, MySQL aus einer Sammlung von Koordinaten (Längen- und Breitengrad) die nächstgelegenen StandorteL

Eine der beliebtesten Funktionen, die heutzutage von vielen Anwendungen angeboten wird, ist die Möglichkeit, die nächstgelegenen Register aus einer Datenbank zu finden, wenn eine benutzerdefinierte Position angegeben ist (Ihre aktuelle Position möglicherweise unter Angabe des Breiten- und Längengrads). Zum Beispiel im Immobiliengeschäft ist eine ziemlich nützliche Implementierung, wenn Sie sich einfach im Zentrum einer Stadt, zum Beispiel New York, platzieren könnten und die Anwendung es Ihnen ermöglicht, in den Karten die nächstgelegenen verfügbaren Häuser / Wohnungen in anzuzeigen ein Radius von 50/100 km:

Filter places by coordinates Google Maps

Die Idee an sich ist ziemlich cool, oder? Offensichtlich schließen wir keine Orte aus Google Maps ein, was bedeutet, dass die Markierungen offensichtlich unsere sind und in unserer eigenen Datenbank gespeichert werden. In diesem Artikel erklären wir Ihnen, wie Sie den nächstgelegenen Standort aus einer Sammlung von Koordinaten in MySQL ermitteln.

1. Unsere Marker-Datenbank verstehen

Zu Beginn benötigen Sie natürlich Speicherorte in Ihrer Datenbank. In unserem Fall verfügen wir über eine sehr einfache Datenbankstruktur, die für alle leicht verständlich ist. Die Datenbank kann mit der folgenden Abfrage erstellt werden:

CREATE TABLE `markers` (
  `id` bigint(20) NOT NULL,
  `lat` decimal(10,8) NOT NULL,
  `lng` decimal(11,8) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 NOT NULL
) ENGINE=
InnoDB DEFAULT CHARSET=utf8;

Es werden einfach Markierungen gespeichert, die durch einen Namen gekennzeichnet sind und die Koordinaten von Breite und Länge enthalten. Es enthält folgende Daten:

Data Markers Coordinates

Wenn wir die Markierungen der genannten Orte in Google Maps mit JavaScript platzieren:

var markers = [
    {
        "id": "1",
        "lat": "4.66455174",
        "lng": "-74.07867091",
        "name": "Bogot\u00e1"
    }, 
    {
        "id": "2",
        "lat": "6.24478548",
        "lng": "-75.57050110",
        "name": "Medell\u00edn"
    }, 
    {
        "id": "3",
        "lat": "7.06125013",
        "lng": "-73.84928550",
        "name": "Barrancabermeja"
    }, 
    {
        "id": "4",
        "lat": "7.88475514",
        "lng": "-72.49432589",
        "name": "C\u00facuta"
    }, 
    {
        "id": "5",
        "lat": "3.48835279",
        "lng": "-76.51532198",
        "name": "Cali"
    }, 
    {
        "id": "6",
        "lat": "4.13510880",
        "lng": "-73.63690401",
        "name": "Villavicencio"
    }, 
    {
        "id": "7",
        "lat": "6.55526689",
        "lng": "-73.13373892",
        "name": "San Gil"
    }
];

function setMarkers(map) {
    var image = {
        url: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png',
        size: new google.maps.Size(20, 32),
        origin: new google.maps.Point(0, 0),
        anchor: new google.maps.Point(0, 32)
    };

    for (var i = 0; i < markers.length; i++) {
        var marker = markers[i];
        var marker = new google.maps.Marker({
            position: {
                lat: parseFloat(marker.lat), 
                lng: parseFloat(marker.lng)
            },
            map: map,
            icon: image,
            shape: {
                coords: [1, 1, 1, 20, 18, 20, 18, 1],
                type: 'poly'
            },
            title: marker.name
        });
    }
}

Wir werden die folgende Ausgabe in unserer Karte erhalten:

Google Maps Markers Example

Jetzt funktioniert alles wie es sollte, die Karte funktioniert, die Markierungen befinden sich an der richtigen Stelle, aber jetzt müssen wir sie nach unserer Position (Bucaramanga) und nach einem bestimmten Entfernungsradius filtern. In diesem Artikel wird nicht behandelt, wie sie mit JavaScript gefiltert werden, sondern nur auf der Serverseite. Es liegt also an Ihnen, wie Sie sie später im Frontend anzeigen.

2. Verstehen, was wir tun müssen

Wir müssen als erstes verstehen, was wir in der Datenbank und theoretisch tun werden. Das folgende Schema enthält zwei Fragen, die wir beantworten müssen, um die Aufgabe zu erfüllen. Dabei müssen wir einen kreisförmigen Bereich durchsuchen, der durch eine Entfernung definiert ist, die wir als Suchradius bezeichnen:

Distance Between Coordinates Google Maps MySQL

Zu wissen, dass der Abstand zwischen dem ursprünglichen Ort und den anderen Koordinaten unbekannt ist: