Android中根据两点坐标计算矩形边界并解决Polygon绘制异常问题
解决Google Maps Android SDK矩形绘制只显示两条线的问题
嘿,我来帮你搞定这个矩形绘制的坑!你现在遇到的问题主要有两个原因:一是只用了两个对角点,没生成矩形的四个顶点;二是点的添加顺序不对,导致多边形没有正确闭合形成矩形。
问题分析
你提供的示例代码里,add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0)) 其实画的是三角形——从(0,0)到(0,5)到(3,5)再回到(0,0),自然只会显示三条线(你说两条可能是视觉上的错觉)。要画矩形,必须要有四个不同的顶点,并且按顺时针或逆时针的顺序依次连接,最后回到起点闭合。
解决方案步骤
从两个对角点生成矩形的四个顶点
给定两个坐标点,我们需要计算出矩形的最小/最大纬度和经度,从而得到四个角的坐标:- 最小纬度(minLat):两个点中纬度更小的那个(更靠南)
- 最大纬度(maxLat):两个点中纬度更大的那个(更靠北)
- 最小经度(minLng):两个点中经度更小的那个(更靠西)
- 最大经度(maxLng):两个点中经度更大的那个(更靠东)
按正确顺序添加顶点
按顺时针(或逆时针)的顺序添加四个顶点,最后再回到第一个点,确保多边形完全闭合。
完整代码示例
// 你的原始坐标点 LatLng pointA = new LatLng(37.18312184219552, -122.5216064453125); LatLng pointB = new LatLng(37.74655686277364, -122.63720703125); // 计算矩形四个顶点的坐标 double minLat = Math.min(pointA.latitude, pointB.latitude); double maxLat = Math.max(pointA.latitude, pointB.latitude); double minLng = Math.min(pointA.longitude, pointB.longitude); double maxLng = Math.max(pointA.longitude, pointB.longitude); LatLng bottomLeft = new LatLng(minLat, minLng); // 西南角 LatLng topLeft = new LatLng(maxLat, minLng); // 西北角 LatLng topRight = new LatLng(maxLat, maxLng); // 东北角 LatLng bottomRight = new LatLng(minLat, maxLng); // 东南角 // 绘制闭合矩形 Polygon polygon = map.addPolygon(new PolygonOptions() .add(bottomLeft, topLeft, topRight, bottomRight, bottomLeft) // 顺时针顺序,最后回到起点闭合 .strokeColor(Color.RED) .fillColor(Color.BLUE));
关键注意点
- 顶点顺序很重要:必须按连续的方向(顺时针/逆时针)添加,不能跳着加,否则会出现折线而非矩形。
- 一定要闭合:最后一个点要和第一个点重复,确保多边形的边完全闭合,避免出现“缺口”。
这样修改后,你就能看到完整的红色边框、蓝色填充的矩形啦!
内容的提问来源于stack exchange,提问作者gorp88
相关产品推荐
相关产品推荐

