You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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),自然只会显示三条线(你说两条可能是视觉上的错觉)。要画矩形,必须要有四个不同的顶点,并且按顺时针或逆时针的顺序依次连接,最后回到起点闭合。

解决方案步骤

  1. 从两个对角点生成矩形的四个顶点
    给定两个坐标点,我们需要计算出矩形的最小/最大纬度和经度,从而得到四个角的坐标:

    • 最小纬度(minLat):两个点中纬度更小的那个(更靠南)
    • 最大纬度(maxLat):两个点中纬度更大的那个(更靠北)
    • 最小经度(minLng):两个点中经度更小的那个(更靠西)
    • 最大经度(maxLng):两个点中经度更大的那个(更靠东)
  2. 按正确顺序添加顶点
    按顺时针(或逆时针)的顺序添加四个顶点,最后再回到第一个点,确保多边形完全闭合。

完整代码示例

// 你的原始坐标点
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:27:13