如何判断经纬度坐标是否处于指定矩形区域内?
判断经纬度坐标是否在矩形区域内的实现方案
一、基础矩形范围判断(无需第三方库)
你的区域是轴对齐的矩形,直接通过经纬度范围比较就能快速判断,逻辑最简单:
- 先从给定的两个对角点,算出矩形的纬度和经度边界:
- 纬度范围:
minLat = min(43.672162, 43.629845),maxLat = max(43.672162, 43.629845) - 经度范围:
minLon = min(-79.43585, -79.314585),maxLon = max(-79.43585, -79.314585)
- 纬度范围:
- 待检查坐标
(checkLat, checkLon)满足以下所有条件,就说明在矩形内:checkLat >= minLat && checkLat <= maxLat && checkLon >= minLon && checkLon <= maxLon
针对你的示例坐标43.651989 , -79.371993:
- 纬度在43.62984543.672162之间,经度在-79.43585-79.314585之间,所以该坐标在矩形内。
二、正确使用github.com/kellydunn/golang-geo包
你之前的代码问题在于,创建多边形需要矩形的四个顶点,而非两个对角点。正确实现如下:
import ( "fmt" "math" "github.com/kellydunn/golang-geo" ) func main() { // 给定的矩形对角点 lat1, lon1 := 43.672162, -79.43585 lat2, lon2 := 43.629845, -79.314585 // 推导矩形四个顶点 minLat := math.Min(lat1, lat2) maxLat := math.Max(lat1, lat2) minLon := math.Min(lon1, lon2) maxLon := math.Max(lon1, lon2) // 创建四个顶点的Point实例 p1 := geo.NewPoint(maxLat, minLon) // 左上 p2 := geo.NewPoint(maxLat, maxLon) // 右上 p3 := geo.NewPoint(minLat, maxLon) // 右下 p4 := geo.NewPoint(minLat, minLon) // 左下 // 创建闭合多边形(最后重复第一个点确保闭合) poly := geo.NewPolygon(p1, p2, p3, p4, p1) // 待检查的目标点 checkPoint := geo.NewPoint(43.651989, -79.371993) // 判断是否在多边形内 isInside := poly.Contains(checkPoint) fmt.Println(isInside) // 输出:true }
三、Google Maps API 实现方案
如果用前端场景的Google Maps API,可以直接利用LatLngBounds对象的contains方法:
// 定义矩形边界(西南角、东北角) const bounds = new google.maps.LatLngBounds( new google.maps.LatLng(43.629845, -79.43585), new google.maps.LatLng(43.672162, -79.314585) ); // 待检查的坐标点 const checkPoint = new google.maps.LatLng(43.651989, -79.371993); // 判断是否在范围内 const isInside = bounds.contains(checkPoint); console.log(isInside); // 输出:true
后端场景建议直接用第一种范围比较的逻辑,避免API调用的开销和延迟。
内容的提问来源于stack exchange,提问作者HLT
相关产品推荐
相关产品推荐

