1

私のデータベースには、さまざまなベンダーが独自の緯度と縦方向の位置で保存されています。

次に、グーグルマップを使用して地図上でそれらを特定しますが、5/10/20km/マイルの「周囲」で任意の住所を入力できる検索機能もあります。

したがって、たとえば、ロンドンとその周辺10 kmを検索すると、ロンドンからのすべてのベンダーが、その地点の周囲に緯度と経度+10kmを返すことを期待します。

今、私はわずかな違いで関数を動作させています(明らかに半径オプションなしで)

private function findServicesNearLocation($filter = array(), $lat, $lng) {
    // set radius
    $difference = 0.07;

    // build filter
    $latitude_from = floatval($lat) - $difference;
    $latitude_to = floatval($lat) + $difference;
    $longitude_from = floatval($lng) - $difference;
    $longitude_to = floatval($lng) + $difference;

    $filter[] = "a.gps_latitude >= {$latitude_from}";
    $filter[] = "a.gps_latitude <= {$latitude_to}";
    $filter[] = "a.gps_longitude >= {$longitude_from}";
    $filter[] = "a.gps_longitude <= {$longitude_to}";

    // return services
    return $this->vendors->getVendors(implode(' AND ', $filter));
}

適切な見積もりを行い、特定の「周囲10 km」からすべてのベンダーを選択するために、上記の関数をどのように変更する必要がありますか。

ありがとうございました

4

3 に答える 3

1

これはあなたが求めていることへの答えだと思います。緯度と経度は約 111 km 離れているため、計算に入れることができます。これがあなたの求めているものであることを願っています。

private function findServicesNearLocation($filter = array(), $lat, $lng, $distanceKilometers=0) {
    // set radius
    $difference = 0.07;
    $distance=$distanceKilometers!=0?ceil($distanceKilometers/111):0;
    // build filter
    $latitude_from = floatval($lat) - $difference - $distance;
    $latitude_to = floatval($lat) + $difference + $distance;
    $longitude_from = floatval($lng) - $difference - $distance;
    $longitude_to = floatval($lng) + $difference + $distance;

    $filter[] = "a.gps_latitude >= {$latitude_from}";
    $filter[] = "a.gps_latitude <= {$latitude_to}";
    $filter[] = "a.gps_longitude >= {$longitude_from}";
    $filter[] = "a.gps_longitude <= {$longitude_to}";

    // return services
    return $this->vendors->getVendors(implode(' AND ', $filter));
}
于 2012-04-25T14:56:02.250 に答える
1

半径ではなく、長方形を検索しているように見えます。

そのために、 MySQL Spatial Extensionを使用して、ここで実装の詳細を読むことができます: Geo-Distance-Search-with-MySQL

ただし、参考までに、mongoDBは単純な「SELECT」でそれを行うことができます。彼に位置と範囲を与えれば完了です。詳細情報 : MongoDB 地理空間インデックス作成

于 2012-04-25T14:54:03.920 に答える