4

私は、データベースによって提供されたアドレスを使用して、MySQLデータベースとGeoCodeに場所を保存するWebサイトを持っています。

次に、指定したポイントに最も近い場所を見つける機能を追加します。たとえば、現在立っている場所や入力している場所などです。ジオコーダーとグーグルマップをJavaScriptとjQueryでコーディングしており、PHPを使用してデータベースからフェッチした結果を取得しています。

私はそれについて読みましたviewportが、Googleではなく自分のデータベースの場所を表示する必要がある私の状況でそれがどのように機能するかを理解できません。

誰か助けてもらえますか?そして、あなたが何らかの例を持っているならば、それは素晴らしいでしょう。

4

3 に答える 3

3

半径検索:

select *,
    acos(cos(centerLat * (PI()/180)) *
     cos(centerLon * (PI()/180)) *
     cos(lat * (PI()/180)) *
     cos(lon * (PI()/180))
     +
     cos(centerLat * (PI()/180)) *
     sin(centerLon * (PI()/180)) *
     cos(lat * (PI()/180)) *
     sin(lon * (PI()/180))
     +
     sin(centerLat * (PI()/180)) *
     sin(lat * (PI()/180))
    ) * 3959 as Dist
from TABLE_NAME
having Dist < radius
order by Dist

3959 はマイル単位の地球半径です。この値を KM または任意の単位の半径に置き換えて、同じ単位で結果を取得します。 centerLatcenterLonは検索の中心 (入力) であり、lat と lon はテーブル内のフィールドです。

于 2012-09-02T10:23:26.863 に答える
2

Here's what I would do:

  • Since you use a database anyway, convert and save the human-readable address to a LatLng (once) every time you add a place to your DB

  • Query user for his/her location

  • geocode the user location to a LatLng

  • use a SQL query to find places matching desired distance. (see here https://developers.google.com/maps/articles/phpsqlsearch_v3)

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

  • display SQL results back to Javascript map
于 2012-09-02T10:23:09.190 に答える
0

古典的な店舗ロケーターのように聞こえます。PHP と MySQL を使用した例については、Google Maps API v3 ドキュメントのこの記事を参照してください。

于 2012-09-02T13:17:50.397 に答える