您应将这些点存储在数据类型的单列中,
Point该列可以用索引建立
SPATIAL索引(如果表类型为
MyISAM):
CREATE SPATIAL INDEX sx_place_location ON place (location)SELECt *FROM mytableWHERe MBRContains ( LineString ( Point($x - $radius, $y - $radius), Point($x + $radius, $y + $radius) ) location ) AND Distance(Point($x, $y), location) <= $radius
这将大大提高查询的速度,例如“在给定半径内查找所有对象”。
请注意,最好使用简单的
TM公制坐标(东和北),而不是极坐标(纬度和经度)。对于小半径,它们足够精确,并且计算也大大简化了。如果您所有的点都在一个半身中并且远离极点,则可以使用单个中央子午线。
当然,您仍然可以使用极坐标,但是用于计算
MBR和的公式将更加复杂。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)