android - 如何在 Android Google Maps API v2 上管理多边形的 InfoWindows

标签 android google-maps polygon infowindow google-maps-api-2

我正在寻找一种方法来管理多边形的信息窗口(打开、关闭、设置内容),就像对标记所做的那样
我可能可以监听 onClick 事件并在那里放置一些隐藏的标记,然后为该标记打开一个 InfoWindow。不过,查找多边形以检索 InfoWindow 内容时出现问题。
有更优雅的解决方案吗?

最佳答案

我一直在研究与您的问题类似的解决方案。

如您所说,主要问题是如何获取从 OnMapLongClickListener() 获取的 LatLng 坐标是否在多边形内。

有一种流行的算法可用于执行此操作,称为 Point-in-polygon algorithm. .这是该算法对 Java 的改编。

private boolean containsInPolygon(LatLng latLng, Polygon polygon) {

    boolean oddTransitions = false;
    List<VerticesPolygon> verticesPolygon = polygon.getVertices();
    float[] polyY, polyX;
    float x = (float) (latLng.latitude);
    float y = (float) (latLng.longitude);

    // Create arrays for vertices coordinates
    polyY = new float[verticesPolygon.size()];
    polyX = new float[verticesPolygon.size()];
    for (int i=0; i<verticesPolygon.size() ; i++) {
        VerticesPolygon verticePolygon = verticesPolygon.get(i);
        polyY[i] = (float) (verticePolygon.getVertice().getLongitude());
        polyX[i] = (float) (verticePolygon.getVertice().getLatitude());
    }
    // Check if a virtual infinite line cross each arc of the polygon
    for (int i = 0, j = verticesPolygon.size() - 1; i < verticesPolygon.size(); j = i++) {
        if ((polyY[i] < y && polyY[j] >= y)
                || (polyY[j] < y && polyY[i] >= y)
                && (polyX[i] <= x || polyX[j] <= x)) {
            if (polyX[i] + (y - polyY[i]) / (polyY[j] - polyY[i])
                    * (polyX[j] - polyX[i]) < x) {
                // The line cross this arc
                oddTransitions = !oddTransitions;
            }
        }
    }
    // Return odd-even number of intersecs
    return oddTransitions;
}

最后,创建一个 CustomInfoWindowsAdapter 来管理您要显示的内容。

关于android - 如何在 Android Google Maps API v2 上管理多边形的 InfoWindows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13900148/

相关文章:

android - SharedPreferences getFloat 返回 ClassCastException 并强制关闭

java - Android:alertdialog中的微调器崩溃

javascript - 谷歌地图 initMap 函数添加参数

javascript - 谷歌地图 : Multiple InfoWindows always show last value

Android:Eclipse 不会将新版本的应用程序推送到模拟器

android - 如何在 Android 中从 Json 批量插入到 Sqlite

ios - 尝试在点击 Google map 标记时运行函数

android - 无法用颜色填充多边形

c# - 多边形三角剖分 c#

java - 在 paint 方法实现中减小了多边形的大小