Mar*_*tin 9 mysql spatial latitude-longitude
我想在mysql数据库表中存储位置的纬度和经度值.考虑到未来,我希望能够在特定位置的特定半径范围内找到这些位置.话虽如此,我应该将纬度和经度值存储在哪些数据类型?请你能为我提供一个创建表脚本,如下所示:
place_id | lat | long
Run Code Online (Sandbox Code Playgroud)
上表中是否有一个我缺少的专栏,它将为我提供我目前可能看不到的其他信息?
谢谢你的帮助.
Qua*_*noi 21
您应该将点存储在数据类型的单一列中Point,您可以使用索引进行SPATIAL索引(如果您的表类型为MyISAM):
CREATE SPATIAL INDEX sx_place_location ON place (location)
SELECT *
FROM mytable
WHERE MBRContains
(
LineString
(
Point($x - $radius, $y - $radius),
Point($x + $radius, $y + $radius)
)
location
)
AND Distance(Point($x, $y), location) <= $radius
Run Code Online (Sandbox Code Playgroud)
这将极大地提高查询速度,例如"在给定半径内查找全部".
请注意,最好使用普通的TM度量坐标(东向和北向)而不是极坐标(纬度和经度).对于小半径,它们足够精确,并且计算得到了极大的简化.如果你的所有点都在一个半边形并远离两极,你可以使用一个中央子午线.
当然,您仍然可以使用极坐标,但计算MBR距离和距离的公式会更复杂.
| 归档时间: |
|
| 查看次数: |
8091 次 |
| 最近记录: |