【问题标题】:Error:Object #<ui> has no method 'containsLatLng'错误:对象 #<ui> 没有方法 'containsLatLng'
【发布时间】:2013-06-25 13:34:01
【问题描述】:

我正在尝试查找给定坐标所在的多边形。

下面是解析kml文件的代码:

for (var i = 0; i < doc[0].placemarks.length; i++) 
            {
                for(var j= 0; j<doc[0].placemarks[i].Polygon[0].outerBoundaryIs[0].coordinates.length; j++)
                {
                    var poly_lat = doc[0].placemarks[i].Polygon[0].outerBoundaryIs[0].coordinates[j].lat;
                    var poly_lon = doc[0].placemarks[i].Polygon[0].outerBoundaryIs[0].coordinates[j].lng;
                    arr_cord[j] = new google.maps.LatLng(poly_lat,poly_lon);
                    //arr_cord[i] = poly_lat + "," + poly_lon;

                //;
                }
                //alert(arr_cord);
                arr_polyoptions[i] = { path: arr_cord,strokeColor: "#FF0000",strokeOpacity: 0.8,strokeWeight: 2,fillColor: "#0000FF",fillOpacity: 0.6 };
                //polygons[i] = new google.maps.Polygon(cord_polyOptions);
                styles[i] = doc[0].placemarks[i].styleID;
                //alert(doc[0].placemarks.polygon.outerBoundaryis.LinearRing.coordinates);
            }

现在检查我使用的多边形:

for(var curr = 0;curr<arr_polyoptions.length;curr++)
            {
                //var curr_polygon = polygons[curr];
                console.log(arr_polyoptions[curr]);
                var curr_polygon = new google.maps.Polygon(arr_polyoptions[curr]);
                //var isWithinPolygon = curr_polygon.containsLatLng(place.geometry.location);
                var isWithinPolygon = curr_polygon.containsLatLng(place.geometry.location);
                alert("isWithinPolygon = " + isWithinPolygon);
                if(isWithinPolygon == 'true')
                {
                    alert(styles[curr]);
                    break;
                }
            }

但代码产生错误 Object # has no method 'containsLatLng' on line var isWithinPolygon = curr_polygon.containsLatLng(place.geometry.location);

有没有人可以帮助我解决这个问题?提前谢谢你

在记录 curr_polygon 对象时,控制台中的结果是

ui
fillColor: "#0000FF"
fillOpacity: 0.6
gm_accessors_: Object
gm_bindings_: Object
latLngs: hg
b: Array[1]
0: hg
b: Array[2418]
[0 … 99]
0: N
jb: 41.8019457978553
kb: -87.62588976266039

如果有帮助

【问题讨论】:

  • 您是否尝试过检查 Chrome 控制台中的内容?你应该可以看到curr_polygon
  • ui fillColor: "#0000FF" fillOpacity: 0.6 gm_accessors_: Object gm_bindings_: Object latLngs: hg b: Array[1] 0: hg b: Array[2418] [0 … 99] 0: N jb:41.8019457978553 kb:-87.62588976266039

标签: javascript google-maps kml polygon geoxml3


【解决方案1】:

多边形的方法名称是 containsLocation,而不是 containsLatLng。

geometry library

 containsLocation(point:LatLng, polygon:Polygon) | boolean | Computes whether the given point lies inside the specified polygon.

您没有发布包含 API 的代码,但您还需要加载几何库。

Example using geoxml3 and the geometry library

【讨论】:

  • 我将检查更改为 var isWithinPolygon = containsLocation(place.geometry.location,curr_polygon);但显示错误 containsLocation 未定义。顺便说一句,这是 gogole 地图 decalration -
  • 完整的方法是 google.maps.geometry.poly.containsLocation() (example)。如果这不能解决问题,请发布更完整的代码或显示问题的 jsfiddle。
  • 这更正了错误。但我正在寻找城市本身的位置。但对 kml 文件中的所有多边形返回 false。如果我给函数的参数不正确,会不会有任何错误信息或者直接返回false?
  • 要回答这个问题,您需要提供更多数据:1. 多边形; 2. 位于该多边形中的位置,其中 containsLocation 返回 false。
  • 您能否提供您的电子邮件ID或个人联系ID或其他信息,以便我可以直接与您聊天? @geocodezip
【解决方案2】:

在 Google 地图 v3 中,我们有另一种方法。您必须使用 containsLocation 而不是 containsLatLng。这是最好的例子。

https://developers.google.com/maps/documentation/javascript/examples/poly-containsLocation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多