私が開発していない PHP プログラムでは、フォームを介して、指定された米国の郵便番号 (マイル単位の半径) からの距離を入力して、そこから近接検索を行うことができます。
たとえば、ノースカロライナ州ガストニアの郵便番号が 28054、半径距離が 10 マイルであるとします。
PHP コードは、SQL クエリを動的に生成します。その時点に到達する前に、舞台裏で計算を行い、次の値を提供します。
:minlat (Float) 35.084832880851
:maxlat (Float) 35.374297119149
:minlon (Float) -81.305653802747
:maxlon (Float) -80.951286197253
また、次の距離が得られます。
:distance (Float) 16093.47
フォームに入力した距離を指定して、これらの値を生成するコードを表示または操作できません。ただし、これらの計算された各変数の値をオーバーライドできます。
:minlat
とを理解しました:minlon
。これは私の郵便番号の中心点です。私が理解していないのは、それが何であり:distance
、それが と にどのような関係を持っている:maxlat
の:maxlon
かということです。
:distance
フォームで 10 マイルとして開始された測定の種類は何ですか?
明らかに:distance
追加されている:maxlat
か:maxlon
、意味がありません。
私が最終的にできるようにしたいのは、ポイントのデータベースを持っている:minlat
andを取得し:minlon
、特定の を検索すること:distance
です。
20 マイルを検索したい場合、距離は 32186 のようになりますが、これは maxlat と maxlon にどのように影響しますか?
SQL クエリ全体に関心がある場合は、次のとおりです。
SELECT node.title AS node_title,
node.nid AS nid,
node.created AS node_created,
'node' AS field_data_field_item_photos_node_entity_type,
(COALESCE(ACOS(0.81684734668492*COS(RADIANS(location.latitude))*(0.15421945466762*COS(RADIANS(location.longitude)) + -0.9880366186544*SIN(RADIANS(location.longitude))) + 0.57685389156511*SIN(RADIANS(location.latitude))), 0.00000)*6370997.0816549) AS location_distance
FROM
{node} node
LEFT JOIN {location_instance} location_instance ON node.vid = location_instance.vid
LEFT JOIN {location} location ON location_instance.lid = location.lid
WHERE (( (node.status = '1')
AND (location.latitude > '35.084832880851'
AND location.latitude < '35.374297119149'
AND location.longitude > '-81.305653802747'
AND location.longitude < '-80.951286197253')
AND ((COALESCE(ACOS(0.81684734668492*COS(RADIANS(location.latitude))*(0.15421945466762*COS(RADIANS(location.longitude)) + -0.9880366186544*SIN(RADIANS(location.longitude))) + 0.57685389156511*SIN(RADIANS(location.latitude))), 0.00000)*6370997.0816549) < '16093.47') ))
テーブル構造
+-----------+---------------+------+-----+-------- --+---------+ | | フィールド | フィールド タイプ | ヌル | キー | キー | デフォルト | エクストラ | +-----------+---------------+------+-----+-------- --+---------+ | | zip | varchar(16) | いいえ | マル | 0 | | | | | 都市 | varchar(30) | いいえ | | | | | | | | | 状態 | varchar(30) | いいえ | | | | | | | | | 緯度 | 10 進数 (10,6) | いいえ | マル | 0.000000 | | | | | 経度 | 10 進数 (10,6) | いいえ | マル | 0.000000 | | | | | タイムゾーン | tinyint(4) | いいえ | | | 0 | | | | | dst | tinyint(4) | いいえ | | | 0 | | | | | 国 | char(2) | いいえ | マル | | | | | +-----------+---------------+------+-----+-------- --+---------+