Клуб API Карт

Вставка в код API 2.0 координат в Base64

ovall
6 сентября 2012, 21:54

Второй день бьюсь над темой - ничего не выходит :(
Доки все прочитал, но не понял, как в таких случаях вставить коодинаты линии не в виде lonlat, а в формате Base64:

var myPolyline = new ymaps.GeoObject({
geometry: {
type: "LineString",
coordinates: [[...]]
}
});

или
var myPolyline = new ymaps.Polyline(
[[55.80, 37.30],[55.80, 37.40],[55.70, 37.30],[55.70, 37.40]]
);

Подскажите, пожалуйста!
В API 1.x проблем с этим небыло...
8 комментариев
Подписаться на комментарии к посту

Это все, видимо, уплыло в util.base64, util.coordinates.decode и...

После чтения исходничков, нашел geometry.LineString.fromEncodedCoordinates

Ну и оттуда уже в доках тоже нашел: http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/geometry.LineString.fromEncodedCoordinates.xml

Думаю, загружается не всегда. Не проверял, но, наверное, надо грузить либо все, либо дополнительно пакет geometry

load=packages.full

load=packages.standard,packages.geometry

 

Дали бы строку с вашими координатами в base64 - проверил бы. ;-)

В общем:

var base64LineStringObject = ymaps,geometry.LineString.fromEncodedCoordinates( yourBase64String );



Addendum

Упс. Вам полигон нужен же.

 

Там же рядом в доках:

 

var yourPoly = ymaps.geometry.Polygon.fromEncodedCoordinates( base64EncodedString )

 

У классов геометрий линии и полигона есть статические методы fromEncodedCoordinates, которые принимают координаты закодированные в Base64, а возвращают экземпляр геометрии.

Способ кодирования по сравнению с 1.1 не изменялся. 
Вот пример кодирующий координаты http://api.yandex.ru/maps/doc/jsapi/1.x/examples/mappolylineencodepoints.html 

Дабавление линии с координатами из Base64 строки выглядит примерно так:

 

myMap.geoObjects.add(new ymaps.Polyline(ymaps.geometry.LineString.fromEncodedCoordinates("ag85ArYIVAPOHQIA_OP-_7hIAgCDzQAABO8CAJv0_f8=")))

Всем откликнувшимся - огромное спасибо!!!


Кодировка в Base64 нужна для сокращения кода выводимой страницы.

Длина кода уменьшается почти в два раза. 

 Вот рабочий пример:

var pl1 = new ymaps.Polyline(ymaps.geometry.LineString.fromEncodedCoordinates(" bqvPAS6MkAN1____8P___5r8__99BgAAA____-gBAACi_v__jQIAAGX___8pAQAAZv___yEBAABm____JQEAAFz____LAAAAoP7___4AAAAo_v__AwEAAGP-___nAAAAAf7__ycBAAAh_v__DAEAAIv-___RAAAAFP___28AAABr_P__NgIAALT8___5AQAA4fv__1gCAADp_P__QQEAAJn9__8NAQAAz_3__7EAAABG_v__3AAAAMf___9FAAAA3f___yUAAADJ____IQAAAKr___8DAAAAv_____L____F____5P____X____W____JAAAANX___9iAAAA8v___30AAAAMAAAAZAAAAPb____JAQAAIP___zICAABN_____wEAACL____lAAAAnP___5UCAAD2_v__DAMAAEX-___5____BAAAAFr___-4____pgAAAEgAAAAHAAAA_P___7QAAACX____AgIAANH-__8jAgAAtv7__xMDAAAc_v__6gAAAJD____AAgAAdv7__3sCAACY_v__yQAAAIf____kAAAAhf____MBAADv_v__VgEAAAn___-qAAAAJv___18AAABY____YwEAAEz9__-9AAAAqf7__7cAAACh_v__bAAAADz____JAgAAovr__0D____q____wAAAABYAAACHAQAAnvz__2oCAABlAAAAmQEAAEwAAAAJ_v__SwMAAGoAAAAUAAAAif____L___9i____JAEAAO3-__8tAgAAVf___28BAAAAAAAAAAAAAOb____jAQAA1f____YAAACi____VQEAAAv9__9NBgAAIf7__8ADAABV____YwEAAJj___94AAAALf___38AAACM_v__TAAAAJX-__8WAAAACv___9H___8e_v__k____6X-___W____-_7__xsAAAAj____QgAAAJ____9YAAAABP___9QAAACE____YQAAAFn-__9nAQAAwfz___8BAADX_v__uAAAAOv9___gAAAAXgAAAD4AAACi____wv___9H-__99AAAAov7__48AAABT_P__VwEAAD78__9WAQAAAAAAAAAAAACx-___eAEAAHL8__9yAQAAyfz__6ABAACI9___UAQAANv4___8AwAA-_7__5wAAAAH____ggAAAMH9__8nAQAAIP3__0sBAAA__v__7QAAAA_-__8JAQAAE_7__wcBAABM_P___QEAAOX8__-oAQAATwAAADgAAACx____yv___1_n__9tDQAAAAAAAAAAAAAL_f__mAEAAGUAAAA7AAAAm____8X___-16___3woAAIXr___2CgAABgIAAPQAAABWAAAA1____6r___8pAAAAgwQAACYCAABvBAAAHwIAAAUBAAB6AAAAuf___-kBAADY____PQEAAM3___84AQAApf___w8BAAC0____lQAAAHL___9tAAAADPX___0FAACgAAAAQwAAAIYAAAAcAAAAngoAAPQAAABhAgAAKAAAABMAAABk____-P___5wAAAAOCAAAqAAAAD4MAADrAAAAiQwAABMBAABcAQAAKAAAAAMDAABgAAAAHQAAAML____j____PgAAABYLAABZAQAABgYAAMEAAAAbBQAAowAAAAYAAAC1____5P___0MAAADtAQAAQQAAAJUBAAA8AAAAmAAAAAP___8= ")
,{
}, {
strokeColor: '#ff0000',
strokeWidth: 2,
});

Функцию geometry.LineString.fromEncodedCoordinates я нашел сразу, но вот с синтаксисом ее применения и были проблемы.

Просьба к разработчикам: добавьте, пожалуйста, в Справочник по программному интерфейсу после описания каждого элемента "боевой" пример его применения в листинге программы. Думаю, у пользователей API очень много вопросов бы отпало.

 

Обязательно добавим.

 

Функцию geometry.LineString.fromEncodedCoordinates я нашел сразу, но вот с синтаксисом ее применения и были проблемы.

А, расскажите, пожалуйста, какие именно проблемы с синтаксисом у Вас возникли

после прочтения документации по этому методу, и над чем Вы "бились" 2 дня?

Хочется понять что именно вызывает затруднения, вроде бы всё просто, метод принимает - один параметр base64-строку

Конечно просто, но то, что эта строка должна быть в двойных кавычках... :)
Над этим и бился - пробовал в разных скобках (квадратных, круглых), в одинарных кавычках и разных сочетаниях.
До двойных кавычек не дошел - устал :)
Хотя пример от chalyu, приведенный под описанием функции разрешил бы все проблемы.

Понятно, можно еще в опострофах попробовать =)

рекомендую хорошую книжку по javascript