6

私は2つのテーブルを取得しました:

Events:
 - id
 - name
 - place

Places:
 - id
 - name
 - lat
 - lng

andから(場所&10KM radiusに基づいて) にあるすべてのイベントを取得したいと思います。どうやってやるの?latlngcurrent latlng

ありがとう!

4

4 に答える 4

4

拡張機能を使用する場合、MySQL 5.6 以降の地理空間拡張機能は、まさにこのタイプの質問に対処することを目的としています。場所テーブルに空間インデックスを作成する必要があります。

ALTER TABLE places ADD SPATIAL INDEX lat, lng

select name from places
order by st_distance(point(@lng, @lat), point(lng, lat))
limit 10

実際の距離の実際の検出は、少し計算量が多いです。次の投稿では、試してみたいと思われるいくつかの方法について説明しています: http://www.plumislandmedia.net/mysql/using-mysqls-geospatial-extension-location-finder/

さらに詳細については、http://www.percona.com/blog/2013/10/21/using-the-new-spatial-functions-in-mysql-5-6-for-geo-enabled-applicationsをご覧ください。 /

于 2014-12-25T00:23:30.063 に答える
1

多分これはあなたに役立ちますhttp://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

基本的に問題は、lat/lng が球座標 (lat と lng は角度) であり、球面上の直線距離を使用して検索を行うことです。次に、2 つの異なるもの、つまり角度とキロメートルを比較しようとしています。そのためには、座標変換を行ってから比較する必要があります。

于 2012-05-12T14:32:32.023 に答える
0

この簡単なクエリが役立つことを願っています

SELECT 
    *
FROM 
    `locator`
WHERE
    SQRT(POW(X(`center`) - 49.843317 , 2) + POW(Y(`center`) - 24.026642, 2)) * 100 < `radius`

詳細はこちらhttp://dextr.com/post/83498801191/how-to-determine-point-inside-circle-using-mysql

于 2014-04-23T05:16:28.427 に答える