【问题标题】:How to manage InfoWindows for polygons on Android Google Maps API v2如何在 Android Google Maps API v2 上管理多边形的 InfoWindows
【发布时间】:2012-12-03 17:19:23
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    正如您所说,主要问题是如何获取从 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 来管理您想要显示的内容。

    【讨论】:

    • 我使用了相同的解决方案。还是谢谢!
    • Polygon 和 VerticesPolygon 类在哪个包中实现?
    • 嗨戈兰。两者都是自定义类。 Polygon 有一个 VerticesPolygon 实例。 VerticesPolygon 只是一个用于定义多边形的 Vertices 列表,最后,Vertice 有经纬度,这个和 LatLng 类似。问候
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    相关资源
    最近更新 更多