0

私が開発していない 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、意味がありません。

私が最終的にできるようにしたいのは、ポイントのデータベースを持っている:minlatandを取得し: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) | いいえ | マル | | | | |
+-----------+---------------+------+-----+-------- --+---------+
4

0 に答える 0