Клуб API Карт

Ошибка сценария.

UryevAndrey
6 июня 2011, 12:29

 Уважаемые Гуру!

Ниже приведен текст скрипта, который по моему мнению полностью рабочий т.к. работает у большенства пользователей. Но у некоторых пользователей появляется стабильная ошибка: "getClosestPoint(...).point" - есть null или не является объектом. Проверял на одинаковых данных. Подскажите плиз., где копать? В чем может быть причина?

 

 

    |function FindPoligon (mLng, mLat) {
    |    var GroupPoligons = mapExport.getGroup;
    |    if (GroupPoligons){
    |        // найдем вхождение в полигон
    |        var found = false;
    |        var res = [];
    |        var polName = """";
    |        var geoPoint = new YMaps.GeoPoint(mLng, mLat);
    |        GroupPoligons.forEach(function (obj, objIndex, group) {
    |            if (found == false){
    |                if (obj.contains(geoPoint)){
    |                    found = true;
    |                    polName = obj.id;
    |                }
    |            }
    |        }
    |        // если точка не входит ни в один полигон, то найдем ближайший
    |        if (found == false){
    |            minDistance = 1000000;
    |            GroupPoligons.forEach(function (obj, objIndex, group) {
    |                cDistance = geoPoint.distance(obj.getClosestPoint(geoPoint).point);
    |                if (cDistance < minDistance){
    |                    minDistance = cDistance;
    |                    polName = obj.id;
    |                }
    |            }
    |        }
    |        res[0] = found;
    |        res[1] = polName;
    |       
    //|        f_alert(polName);
    |       return res;
    |    }else{
    |       return 0;
    |    }
    |}

 

6 комментариев
Подписаться на комментарии к посту

getClosestPoint возвращает null, если в полигоне нет точек, или если все вершины скрыты из-за симплификации. Т.е. например вершины начинают отображаться с 3го масшаба, а текущий масштаб 2.

Можете обернуть код в try catch и вывести (или ajax'ом залогировать на сервер) какую-то информацию из которой вам будет понятно, что происходит.

Это точно, что результат возвращаемый методом зависит от видимости вершин? 

Да. getClosestPoint находит визуальную ближайшую точку на основе информации об отображении гео-объекта. Если нет отображения - расчет не возможен.

1. В документации написано:

 

Если для какой-либо вершины значение уровня не задано, применяется значение по умолчанию "A".

 

Это значит что вершина будет видна при любом масштабе?

2. 

 

getClosestPoint возвращает null, если в полигоне нет точек, или если все вершины скрыты из-за симплификации.
Значит ли это, что для полигона, который не отображается в данный момент в окне браузера (при данном масштабе точки должны быть видны, но полигон находится за пределпми отображаемой области карты) будет возвращено значение null?

 

 

1. Да. Если вы сами не задаете масштабы, будет от 0го.

2. Нет. null будет возвращен если в полигоне вообще нет точек, или если имеет место симплификация, приводящая к тому что нет отображения. Если полигон просто вне вьпорта карты null не должен возвращаться.

Спасибо.