Сергей Константинов — Простая обработка групп геообъектов на картеYandex
API Яндекс.Карт — это мощный инструмент для работы с геообъектами. Мы решили упростить работу с API начинающим разработчикам и опытным программистам и написали модуль geoQuery. Он предоставляет удобный интерфейс для манипуляций с группами объектов — помещения их в геометрическую область, фильтрации, поиска объектов и других. Мы расскажем, как создавался этот модуль и как применять его в боевых условиях. Доклад будет интересен всем разработчикам, которые используют или планируют использовать API Яндекс.Карт.
Правильная организация клиент-карточного взаимодействия — Антон КорзуновYandex
Как говорил один человек, нет данных — нет проблемы. Но проблема в том, что в современном мире данные есть, и их много . Ещё в современном мире очень любят данные отображать, например, на карте — только это не всегда хорошо получается.
Из доклада вы узнаете о типичных ошибках передачи данных на карту и простых способах этих ошибок избежать.
Что API Карт забыл на сервере — Антон КорзуновYandex
Принято считать, что API Карт — это JavaScript-библиотека, которая работает в браузере. Это утверждение верно ровно в той степени, в какой сферичен конь в вакууме.
Из доклада вы узнаете, зачем API нужен бэкенд, почему писать его придётся вам и как API Карт будет помогать этой задаче с фронтенда.
P.S. Будет интересно разным слоям населения.
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
При разработке интерфейсов для API, неизбежно сталкиваешься с несколькими проблемами. Во-первых, мы не знаем заранее, как будет выглядеть сервис или сайт со встроенными Картами. Важно обеспечить его будущим пользователям наилучший результат — даже если у разработчиков, использующих наш API, вообще нет в команде дизайнера. Во-вторых, проблемы могут возникнуть при адаптации дизайна для разных устройств и размеров экранов. В докладе мы поговорим о том, как и с помощью чего делаются прототипы, и зачем они нужны разработчикам и дизайнерам. А самое главное, разберёмся с адаптивным поведением элементов управления картой, рассмотрим схему работы менеджера контролов. Также мы кратко обсудим другие варианты реализации этого механизма и объясним, почему они не подошли нам.
Сергей Константинов — Простая обработка групп геообъектов на картеYandex
API Яндекс.Карт — это мощный инструмент для работы с геообъектами. Мы решили упростить работу с API начинающим разработчикам и опытным программистам и написали модуль geoQuery. Он предоставляет удобный интерфейс для манипуляций с группами объектов — помещения их в геометрическую область, фильтрации, поиска объектов и других. Мы расскажем, как создавался этот модуль и как применять его в боевых условиях. Доклад будет интересен всем разработчикам, которые используют или планируют использовать API Яндекс.Карт.
Правильная организация клиент-карточного взаимодействия — Антон КорзуновYandex
Как говорил один человек, нет данных — нет проблемы. Но проблема в том, что в современном мире данные есть, и их много . Ещё в современном мире очень любят данные отображать, например, на карте — только это не всегда хорошо получается.
Из доклада вы узнаете о типичных ошибках передачи данных на карту и простых способах этих ошибок избежать.
Что API Карт забыл на сервере — Антон КорзуновYandex
Принято считать, что API Карт — это JavaScript-библиотека, которая работает в браузере. Это утверждение верно ровно в той степени, в какой сферичен конь в вакууме.
Из доклада вы узнаете, зачем API нужен бэкенд, почему писать его придётся вам и как API Карт будет помогать этой задаче с фронтенда.
P.S. Будет интересно разным слоям населения.
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
При разработке интерфейсов для API, неизбежно сталкиваешься с несколькими проблемами. Во-первых, мы не знаем заранее, как будет выглядеть сервис или сайт со встроенными Картами. Важно обеспечить его будущим пользователям наилучший результат — даже если у разработчиков, использующих наш API, вообще нет в команде дизайнера. Во-вторых, проблемы могут возникнуть при адаптации дизайна для разных устройств и размеров экранов. В докладе мы поговорим о том, как и с помощью чего делаются прототипы, и зачем они нужны разработчикам и дизайнерам. А самое главное, разберёмся с адаптивным поведением элементов управления картой, рассмотрим схему работы менеджера контролов. Также мы кратко обсудим другие варианты реализации этого механизма и объясним, почему они не подошли нам.
«Опыт использования каналов в корутинах в боевом проекте» Григорий ФедоровMail.ru Group
Каналы — это способ передавать поток данных между корутинами.
В этом докладе пойдет речь об опыте применения корутин и каналов в нашем новом проекте “Маруся”:
- Почему мы решились использовать каналы, несмотря на экспериментальный статус, и были ли альтернативы?
- Как использовали каналы мы, и как использовать правильно?
- А также о том, как пришлось написать пару операторов из Rx, и чем их можно заменить?
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...solit
Виктор Русакович, Минск, Web-developer c 6-ти летним опытом разработки, компания GP Software.travel
«Реактивный JavaScript. Победа над асинхронностью и вложенностью». Development секция. Для разработчиков. Высокий уровень подготовки.
«Непрерывная интеграция сложного проекта. Кто всё сломал?». IT секция. Agile отделение. Для всех уровней подготовки.
Сергей Константинов "Координаты, слои и тайлы в API 2.0"Yandex
APIшник Яндекс.Карт, Москва, 26.04.2012
Рассказ, Сергея Константинова (руководителя группы разработки алгоритмов API Яндекс.Карт) о геокоординатах, тайлах, слоях и о том, как использовать API 2.0 для отображения собственной карты.
Короткое знакомство с Mongo; Коротко про GeoJson; Какие данные можно хранить в Mongo; Как хранить геоданные в Mongo; Как индексировать геоданные; Как выполнять запросы к данным (поиск объектов рядом/внутри/на пересечении с областями); Примеры использования геовозможностей MongoDb в Geo2Tag
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Yandex
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Я.Субботник в Челябинске в рамках конференции UWDC
О докладе:
Все, что вы хотели узнать про одностраничное ajax-приложение Яндекс.Почта, но боялись спросить. Изнанка фронтенда, загрузка данных, обновление страниц и взаимодействие с пользователями без регистрации, без смс. Бонус-трек: как работают сторонние приложения в рамках одной платформы.
«Опыт использования каналов в корутинах в боевом проекте» Григорий ФедоровMail.ru Group
Каналы — это способ передавать поток данных между корутинами.
В этом докладе пойдет речь об опыте применения корутин и каналов в нашем новом проекте “Маруся”:
- Почему мы решились использовать каналы, несмотря на экспериментальный статус, и были ли альтернативы?
- Как использовали каналы мы, и как использовать правильно?
- А также о том, как пришлось написать пару операторов из Rx, и чем их можно заменить?
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...solit
Виктор Русакович, Минск, Web-developer c 6-ти летним опытом разработки, компания GP Software.travel
«Реактивный JavaScript. Победа над асинхронностью и вложенностью». Development секция. Для разработчиков. Высокий уровень подготовки.
«Непрерывная интеграция сложного проекта. Кто всё сломал?». IT секция. Agile отделение. Для всех уровней подготовки.
Сергей Константинов "Координаты, слои и тайлы в API 2.0"Yandex
APIшник Яндекс.Карт, Москва, 26.04.2012
Рассказ, Сергея Константинова (руководителя группы разработки алгоритмов API Яндекс.Карт) о геокоординатах, тайлах, слоях и о том, как использовать API 2.0 для отображения собственной карты.
Короткое знакомство с Mongo; Коротко про GeoJson; Какие данные можно хранить в Mongo; Как хранить геоданные в Mongo; Как индексировать геоданные; Как выполнять запросы к данным (поиск объектов рядом/внутри/на пересечении с областями); Примеры использования геовозможностей MongoDb в Geo2Tag
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Yandex
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Я.Субботник в Челябинске в рамках конференции UWDC
О докладе:
Все, что вы хотели узнать про одностраничное ajax-приложение Яндекс.Почта, но боялись спросить. Изнанка фронтенда, загрузка данных, обновление страниц и взаимодействие с пользователями без регистрации, без смс. Бонус-трек: как работают сторонние приложения в рамках одной платформы.
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)Ontico
AlaSQL - это библиотека для обработки данных с помощью языка SQL, которая написана на JavaScript и может работать в браузере (в том числе, и в режиме WebWorker) или Node.js. Библиотека может быть использована в приложениях для обработки данных, а также для решения задач ETL (extract-transform-loading), таких как приложения бизнес-аналитики.
Тезисы - http://frontendconf.ru/2015/abstracts/1713
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
Сергей Коржнев
Архитектор версии 1.4 2ГИС Web API
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Тезисы:
● Как организован код в старой версии.
● Вдумчиво смотрим, как мы используем Yii, хватаемся за голову и клавиатуру. Там отрезаем, тут пришиваем, и вуаля!
● Ну и делаем выводы, как мы забороли две классические проблемы программирования: борьба с дублированием кода и сложностью системы.
Как повышать продажи с сайта за счет комплекснового поискового продвижения са...Optima-PROMO
Грамотная оценка эффективности поисковой оптимизации и хода работ по комплексному продвижению сайта в поиске позволит заказчику эффективно контролировать и выстраивать сотрудничество с SEO-специалистами.
8. 8
Типичные операции
Многие сайты реализуют одни и те же
действия:
• Показать/скрыть группу объектов
• Выбрать все объекты с определённым
свойством
• Отсортировать объекты по критерию
• Найти ближайшие объекты
• Найти все объекты, попадающие в область
(прямоугольник, круг, границы региона и т.д.)
9. 9
Типичные операции
Однако операции
с географическими
сущностями – непростая штука.
• Как посчитать
расстояния на сфере?
• Как посчитать попадание
точки в сферический
треугольник?
А в многоугольник?
13. 13
Исследования
Мы перебрали самые популярные вопросы,
касающиеся работы с географическими
объектами:
• Наш собственный клуб
http://clubs.ya.ru/mapsapi
• Stack Overflow
• Форумы MSDN
• Experts Exchange
15. 15
Use-Cases
В итоге мы получили набор из 2 групп кейсов
• Геометрические операции
• Манипуляции над данными
16. 16
Геометрические операции
• Вычисление границ и масштабов
• Пересечения геометрий
• Выборки: по типу геометрии, по
ограничивающей области
• Сортировка по удалённости
• Центры и крайние точки геометрий
• Поиск ближайших к данной геометрии
объектов
17. 17
Манипуляции над данными
• Поиск по полям данных
• Фильтрация
• Сортировка
• Перебор
• Кластеризация
• Подписка на события
• Смена опций
20. 20
Выборка
Результат – объект типа ymaps.GeoQueryResult
• Набор геообъектов
• Можно итерироваться (.each), выбирать
объекты (.get), добавлять и удалять объекты
(.add, .remove)
• Можно добавлять объекты на карту и удалять
их с карты
• Можно делать всякие крутые штуки!
var geoQueryResult =
ymaps.geoQuery(что-то);
21. 21
Выборка
И ещё несколько интересных особенностей:
• Набор объектов неизменяем
• Операции асинхронны
• Операции чайнятся
var geoQueryResult =
ymaps.geoQuery(что-то);
22. 22
Immutable
• Ни одна операция не изменяет состав
исходного geoQueryResult
• Каждая операция, изменяющая набор
результатов, возвращает новый экземпляр
ymaps.GeoQueryResult
var geoQueryResult1 = ymaps.geoQuery(что-то),
geoQueryResult2 =
geoQueryResult1.filter(что-то),
geoQueryResult3 =
geoQueryResult2.remove(что-то);
// в итоге geoQueryResult1 не изменился
23. 23
Async
• Некоторые операции асинхронны всегда
(геокодирование, загрузка xml)
• Некоторые операции синхронны, но не стоит
на это полагаться
• Для выполнения кода после завершения всех
действий используйте .then
var geoQueryResult =
ymaps.geoQuery(ymaps.geoXml.load(<url>))
// Фильтр сработает после загрузки
.filter(<expression>)
// Сработает после выполнения
// всех предыдущих операций
.then(function (res) { soSomething() });
24. 24
Promises
• Promises – замена обычным callback-ам. Они
удобнее и функциональнее
• Мы имплементируем стандарт Promises/A в
нашем ymaps.util.Promise
• ymaps.GeoQueryResult.then вернёт promise,
который будет подтвержден после
выполнения всех операций
ymaps.geoXml.load(<url>)
.then(
// обработчик положительного ответа
function (res) { doSomething(); },
// обработчик отрицательного ответа
function (err) { doSomething(); }
);
25. 25
Chaining
• Все операции, которые имеет смысл чайнить
– чайнятся
• Чайнинг работает даже для асинхронных
операций
var geoQueryResult1 =
ymaps.geoQuery(map)
.filter(…)
.setOptions(…)
.addToMap(…)
// Продолжать до полного удовлетворения
26. 26
Лучше один раз увидеть
var result = ymaps.geoQuery({
type: 'FeatureCollection',
features: [{
type: 'Feature',
geometry: {
type: 'Circle',
coordinates: [15, 15],
radius: 100
}
}, {
type: 'Feature',
geometry: {
type: 'LineString',
coordinates: [[15, 16], [66, 23], [10, 12]]
}
}]
}).addToMap(map);
27. 27
Лучше второй раз увидеть
// Найдём Москву и Екатеринбург
// Приятный бонус – теперь можно чайнить
// асинхронные операции
var result = ymaps.geoQuery(
ymaps.geocode(‘Москва’, { results: 1 })
).add(
ymaps.geocode(‘Екатеринбург’, { results: 1 })
).then(function () {
var moscow = result.get(0),
ekat = result.get(1);
// сделаем что-нибудь с полученным знанием
});
29. 29
Что умеет geoQuery?
• Выбирать объекты,
попадающие
в указанную
область на карте
// Например, загрузим список точек
// и подсветим те, которые попадают в круг
var circle = new ymaps.Circle([ center, 2000 ]);
myMap.geoObjects.add(circle);
ymaps.geoQuery(ymaps.geocode([56.8, 60.6], { kind: 'metro' }))
.addToMap(myMap)
.searchInside(circle)
.setOptions({ preset: 'twirl#redDotIcon' });
30. 30
Что умеет geoQuery?
• Выбирать объекты,
пересекающиеся
с другими объектами
// Например, загрузим траектории летящих самолётов
// и подсветим те, которые пересекают территорию России
ymaps.geoQuery(ymaps.geoXml.load(
"http://openflights.org/demo/openflights-sample.kml"
))
.addToMap(myMap)
.searchIntersect(RUGeometry)
.setOptions({ strokeColor: "FF0000" });
31. 31
Intermezzo: ymaps.regions
• В версии 2.0.31 мы добавили сервис
"регионы", позволяющий работать с
границами регионов России, Украины,
Беларуси и Казахстана
• Данные берутся из OSM
ymaps.geoQuery(ymaps.regions.load(
// Код страны
"RU", {
// Язык подписей
lang: "ru",
// Уровень подробности границ
quality: 2
}))
.addToMap(map)
.then(function () { doSomething(); });
33. 33
Что умеет geoQuery?
• Выбирать объекты,
в которые попадает
целиком другой объект
// Проверим, попадает ли интересующая нас область
// (например, круг) в какой-то из регионов целиком
var circle = new ymaps.Circle([[55.6, 36.7], 1e4], null, {
fillColor: "FF0000", zIndex: 10000
});
myMap.geoObjects.add(circle);
ymaps.geoQuery(ymaps.regions.load("RU"))
.addToMap(myMap)
.searchContaining(circle)
.setOptions({ fillColor: "00FF0080" });
34. 34
Что умеет geoQuery?
• Сортировать объекты по
удалённости от другого
объекта
// Отсортируем регионы России по удалённости от Екатеринбурга
ymaps.geoQuery(ymaps.regions.load("RU"))
.addToMap(myMap)
.sortByDistance([60.6, 56.8])
.each(function (region, index) {
region.options.set("opacity", index/100);
});
35. 35
Что умеет geoQuery?
• Фильтровать объекты
по критерию
// Покажем на карте регионы, в названии которых
// есть слово «область»
ymaps.geoQuery(ymaps.regions.load("RU"))
// Можно фильтровать по: координатам, свойствам, опциям
// И даже писать регулярки
.search("properties.name RLIKE '(о|О)бласть'")
.addToMap(myMap);
36. 36
Что умеет geoQuery?
• Находить «центр»
объекта и его крайние
точки
// Например, подсветим самый западный регион России
var regions = ymaps.geoQuery(ymaps.regions.load("RU"))
.addToMap(myMap).then(function () {
westRegion = regions.getExtremeObject("left");
westRegion.options.set({ fillColor: "FF0000" });
});
37. 37
Что умеет geoQuery?
• Кластеризовать
// Например, загрузим траектории летящих самолётов,
// возьмём все точки отправлений и прибытий и кластеризуем
var clusters = ymaps.geoQuery(ymaps.geoXml.load(
"http://openflights.org/demo/openflights-sample.kml"
))
.search("geometry.type == 'Point'")
.clusterize();
map.geoObjects.add(clusters);
38. 38
Что умеет geoQuery?
• Находить оптимальный
центр
и масштаб карты
// Например, найдём Москву и Екатеринбург и покажем их
// на карте
ymaps.geoQuery(
ymaps.geocode("Москва", { results: 1 }))
.add(ymaps.geocode("Екатеринбург", { results: 1 }))
.addToMap(map)
.applyBoundsToMap(map)
39. 39
Что умеет geoQuery?
• Подписываться
на события и
отписываться от них
// Поставим метки «Москва» и «Екатеринбург»
// и будем по клику выводить alert-ом полное описание
ymaps.geoQuery(ymaps.geocode("Москва", { results: 1 }))
.add(ymaps.geocode("Екатеринбург", { results: 1 }))
.addToMap(map)
.addEvents("click", function (e) {
alert(e.get("target").properties.get("text"));
});