说,我在地址“Infinite Loop,Cupertino,CA”有一家餐馆。我也有这个地址的纬度/经度。我的交付半径是4英里。如何获取此地址周围的多边形并使用谷歌地图将其存储到我的数据库?
我想在我的网站上显示送货多边形,如果客户输入送货地址,我该如何检查输入的地址是否在多边形内?
答案 0 :(得分:2)
快速/廉价的方法是计算矩形边界框(相对于圆),并存储该位置的边界框的NW / SE角。然后检查新地址的Lat / Lng是否在另一个位置的边界框内。这是一些伪代码:
// location is an object that has bounding box and location information (e.g., address)
// bounding box is represented as two points: NW and SE corner
foreach location in locations do
{
boundingbox = location.boundingbox;
NW = boundingbox.NW;
SE = boundingbox.SE;
if ( ( Lat <= NW.Lat && lat >= SE.Lat ) &&
( Lon >= NW.Lon && Lon <= SE.Lon ) )box
{
// The lat/lng of the new address is within the bounding box of this location
}
}
这是一个快速/约。公式(伪代码),用于计算边距离中心10英里的位置的边界框(其中Lat / Lon是该位置的中心):
NW.Lat = Lat - 0.145;
SE.Lat = Lat + 0.145;
rLat = Lat * 0.0174532925; // radians
coff = Math.cos(rlat); // approximating curvature of longitude lines
NW.Lon = Lon + (0.145 * coff);
SE.Lon = Lon - (0.145 * coff);