google maps v3: недопустимое значение для параметра конструктора 0 при рисовании полилиний - PullRequest
3 голосов
/ 03 сентября 2011

У меня проблема при построении многоугольника. Сообщение об ошибке говорит что-то вроде:

Неверное значение для параметра конструктора 0: (49.27862248020283, -122.79301448410035), (49.277964542440955, -122.79370112960816), (49.278524490028595, -122.7950207764435)

Это должно быть что-то смехотворно простое, но я просто не вижу этого. Любые ваши советы полезны.

Я в основном рисую карту внутри фрейма в модальном окне (с калиткой). Все в порядке, но когда я пытаюсь показать многоугольник (точки загружаются из базы данных и отправляются веб-службой), я получаю сообщение об ошибке.

код iframe: (только соответствующий)

 /**
 * Draws the polygon.
 */
function drawPolygon() {
    if (order >= 3) {
        deleteMarkers();

    // Construct the polygon
    // Note that we don't specify an array or arrays, but instead just
    // a simple array of LatLngs in the paths property


    polygonObject = new google.maps.Polygon({
                        paths: polygonCoords,
                        strokeColor: "#FF0000",
                        strokeOpacity: 0.8,
                        strokeWeight: 2,
                        fillColor: "#FF0000",
                        fillOpacity: 0.35
                      });

    polygonObject.setMap(map);

    isPolygonDrawed = true;

    //After we create the polygon send the points to wicket
    parent.sendPoints();

    //Change the message on the top label
    controlText.style.color = '#ADAAAA';
    controlText.innerHTML = polygonCreated;

    //With this we make sure no other markers are created after the polygon is drawed.
    //Is assigned (order - 1) because when this code is called the order has already been added 1.
    MAX_POLYGON_VERTEX = order - 1;

    //Disable the create polygon button.
    enable = false;
    createControlText.style.color = '#ADAAAA';
}
else alert(alertMessage);

}

Теперь код на родителе (модальное окно)

    /**
 * Show the polygon on map.
 */
function showPolygon(zoneId) {
    var url = applicationRootUrl + 'zonePointsOnMap?zoneId=' + zoneId;
    $.getJSON(url, function(data) {
        if(data.length == 0) {
            return false;
        }
        frames['zoneMapIFrame'].order = parseInt(data.length);
        alert(data.length);
        $.each(data, function(i, item) {
            if(item != null) {
                if(item.latitude != null && item.longitude != null) {
                    var lat = parseFloat(item.latitude);
                    var lng = parseFloat(item.longitude);
                    var latlng = new google.maps.LatLng(lat, lng);
                    var pointOrder = item.order;
                    frames['zoneMapIFrame'].polygonCoords[pointOrder] = latlng;
                    alert(item.order + " point " + latlng);
                    frames['zoneMapIFrame'].bounds.extend(latlng);
                 }

            }

          });
    });
    setTimeout("frames['zoneMapIFrame'].drawPolygon()", 200); 
    setTimeout("frames['zoneMapIFrame'].fitMapZoomPolygon()", 300);
}

Я вижу, что точки загружены нормально с оповещениями, но я получаю сообщение об ошибке.

Помоги мне!

1 Ответ

2 голосов
/ 08 ноября 2011

У меня была такая же проблема. Не знаю, будет ли это лучшим решением, возможно, нет, но у меня это сработало.

Проблема заключалась в том, что Латлонг не были опознаны. Поэтому я воссоздал массив.

var lats = [];
var lat_size = steps[step].lat_lngs.length;

for (var t=0; t <lat_size; t++) {

lats.push(new google.maps.LatLng(steps[step].lat_lngs[t].lat(), steps[step].lat_lngs[t].lng()))
          }
var polylineOptions = {
map: map,
path: lats
 }

new google.maps.Polyline(polylineOptions);
...