Клуб API Карт

Баг кодирования полигона, редактора или геометрии?

nolan23
1 мая 2012, 20:37

Рисуем полигон.

Отправляем параметром  в урл. 

var area = (myGeoObject != null) ? '?area='+ymaps.geometry.Polygon.toEncodedCoordinates(myGeoObject.geometry) : '';

window.location.href = window.location.protocol+'//'+window.location.host+window.location.pathname+area;

после перезагрузки страницы - передаем геометрию отбратно:

if ('area' in urlParams)

{

var geom = ymaps.geometry.Polygon.fromEncodedCoordinates(urlParams.area),

myGeoObject = new ymaps.GeoObject({geometry: geom }, myOptions);

bounds = myGeoObject.geometry.getBounds(),

mapOptions = ymaps.util.bounds.getCenterAndZoom(bounds, [$('#map').width(), $('#map').height()]

Полигон рисуется таким же. 

Но это еще не все.

Забираем геометрию:

var coord = myGeoObject.geometry.getCoordinates(

Получаем больше точек! 

и назначаем ее обратно:

myGeoObject.geometry.set('coordinates', coord);

Полигон превращается в ломаную.

 

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

тут один сплошной баг.

ничего в вашем коде понять невозможно,

если вы нашли баг, напишите нормальный минимальный тест-кейс воспроизводящий проблему, в котором не будет феерических перезагрузок страницы через window.location.href и прочего мусора.

 

http://maps.1cs.su/bug.html

 надеюсь, разберетесь. 

Спасибо за сообщение.

Так происходит потому, что координаты кодируются приращениями от предыдущей точки и при раскодировании из-за погрешности первая точка получается не равна последней. Логика контроля консистентности данных полигона добавляет в конец еще одну точку, равную первой. И так происходит из раза в раз.

Мы подумаем как эту проблему решить.