我有两张桌子,一张桌子包含各个国家的北,东,南,西三角形的国家,这是结构,
+--------------+----------------------+------+-----+---------+----------------+
| 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),
+-------------+----------------+--------------+-------------+------------+------------+-------------+
| boundary_id |国家| country_code | 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 |
+---------+-----------+-----------+
我是否需要将坐标转换为东北和西南,以及如何有效地匹配那些坐标?
由于限制,我更愿意避免地理定位服务。
答案 0 :(得分:1)
您可能应该使用某种地理定位服务(即谷歌地图)。只知道一个国家的最北端,最南端等坐标并不意味着这个国家的形状。
例如美国最北端的坐标(在阿拉斯加),南部和西部的坐标(夏威夷),以及eastermost(缅因州)将绘制一个巨大的矩形,其中还可能包括加拿大,墨西哥,加勒比海的大片区域,等
如果像对待矩形一样处理国家,你会如何处理所有重叠?
答案 1 :(得分:0)
@Mike Brant刚刚描述了我要提出的要点。
MySQL支持空间数据类型,因此我建议您采用以下方法:
如果这是你想要的路径,你应该考虑转移到http://gis.stackexchange.com
答案 2 :(得分:0)
只是一个想法......获取一个包含世界地图的360x360位图。用RGB的不同颜色绘制每个国家,例如,对于id 1国家#010000,对于id 2国家等#020000(是除了水,是整个世界最终会以红色阴影)。然后,当你想检查一个用户时,取xy像素(记住,它将从-180到+180,所以实际上它将是x + 180,y + 180),找到那个像素的颜色,然后从国家?
准备这个位图可能会有很多工作,但一旦完成,休息应该很容易。
正如我所说,只是一个想法。