1

私は2つのテーブルを持っています。1つのテーブルには、各国の長方形の北、東、南、西の座標を持つ国が含まれています。これが構造です。

+--------------+----------------------+------+-----+---------+----------------+
| Field        | Type                 | Null | Key | Default | Extra          |
+--------------+----------------------+------+-----+---------+----------------+
| boundary_id  | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| country      | varchar(100)         | NO   |     | NULL    |                |
| country_code | varchar(4)           | NO   |     | NULL    |                |
| geo_west     | float(10,6)          | NO   |     | NULL    |                |
| geo_north    | float(10,6)          | NO   |     | NULL    |                |
| geo_south    | float(10,6)          | NO   |     | NULL    |                |
| geo_east     | float(10,6)          | NO   |     | NULL    |                |
+--------------+----------------------+------+-----+---------+----------------+

さて、他のテーブルにはユーザーの場所が保存されているので、ユーザーの場所(緯度と経度)をテーブルと照合して、選択した目的の国に該当するかどうかを確認する必要があります。つまり、選択した国の範囲内にあるユーザーのみをピックアップします。

これはテーブル(選択された4)からのデータです。

+-------------+----------------+--------------+-------------+------------+------------+-------------+

| border_id | 国| 国コード| geo_west | geo_north | geo_south | geo_east | + ------------- + ---------------- + -------------- + --- ---------- + ------------ + ------------ + ------------- + | 218 | アフガニスタン| AF | 60.478436 | 38.483425 | 29.377470 | 74.879463 | | 224 | アルバニア| AL | 19.293968 | 42.665615 | 39.648354 | 21.068476 | | 188 | アルジェリア| DZ | -8.673869 | 37.093727 | 18.960026 | 11.979549 | | 229 | アメリカ領サモア| AS | -170.841339 | -14.162115 | -14.382480 | -169.416061 | + ------------- + ---------------- + -------------- + --- ---------- + ------------ + ------------ + ------------- +

ユーザーテーブル、

+---------+-----------+-----------+
| user_id | latitude  | longitude |
+---------+-----------+-----------+
|       6 | 51.495010 | -0.071583 |
|       7 | 51.204731 |  1.251486 |
|       8 | 51.261860 |  1.327887 |
|       9 | 51.487850 | -0.071926 |
|      10 | 51.498699 | -0.201187 |
|      11 | 51.436462 | -0.100937 |
|      12 | 51.331093 |  0.829124 |
|      13 | 51.565121 | -0.065918 |
|      14 | 51.493568 | -0.248566 |
+---------+-----------+-----------+

座標を北東と南西に変換する必要がありますか、それともそれらと効果的に一致させる方法はありますか?

ジオロケーションサービスには限界があるため、避けたいと思います。

4

3 に答える 3

1

これには、おそらく何らかのジオロケーションサービス(つまり、Googleマップ)を使用する必要があります。国の最北端、最南端などの座標を知っているだけでは、その国の形をまったく意味しません。

たとえば、米国の最北端の座標(アラスカ)、最南端と最西端の座標(ハワイ)、および最東端(メイン)は、カナダ、メキシコ、カリブ海などの大きな帯を含む可能性のある巨大な長方形を描画します。

国を長方形のように扱う場合、すべての重複にどのように対処しますか?

于 2012-09-11T17:13:16.607 に答える
0

@Mike Brant は、私が提起しようとしていた要点を説明しました。

MySQL は空間データ型をサポートしているため、次のアプローチを取ることをお勧めします。

  1. 国の境界ポリゴンのソースをオンラインで検索します (Google で検索すると、ほとんどの場所にたどり着くことができます)。
  2. これらのポリゴンを MySQL にロードし、空間フィーチャ (基本的な座標文字列だけでなく、ジオメトリ オブジェクト) として保存します。
  3. ユーザーの位置を空間特徴として保存する
  4. MySQL の空間関係関数を使用して、ユーザー (ポイント) が国 (ポリゴン) 内にあるかどうかを判断します

これがあなたがたどりたい道なら、 http: //gis.stackexchange.comに移動することを検討すべきです。

于 2012-09-11T17:20:54.533 に答える
0

ちょっとしたアイデアです... 世界地図を保持する 360x360 ビットマップを取得します。id 1 の国では #010000、id 2 の国では #020000 など、RGB ですべての国を異なる色でペイントします (はい、水を除いて、世界全体が赤の色合いになります)。次に、ユーザーをチェックしたい場合は、xy ピクセルを取得し (-180 から +180 になるので、実際には x+180、y+180 になることを思い出してください)、そのピクセルの色を見つけ、そこから国 ?

そのビットマップを準備するのは大変な作業かもしれませんが、それが完了すると、残りは非常に簡単になるはずです.

私が言ったように、ただのアイデアです。

于 2012-09-11T17:23:49.063 に答える