Pull to refresh

Comments 42

Здорово. Но вот поддержку сглаженных полигонов (кривых безье или квадратичных) гугл карты почему-то не поддерживают до ныне, что слегка огорчает. Несколько месяцев назад нужно было разработать полноценный инструмент для создания сложных фигур на картах, всё было реализовано в полном объёме, но сглаженные полигоны и поли-линии пришлось делать через обычные полигоны, и, впоследствие, сглаживать их другим алгоритмом для отрисовки данных уже на отдельном canvas'е.
Несколько месяцев назад нужно было разработать полноценный инструмент для создания сложных фигур на картах, всё было реализовано в полном объёме, но сглаженные полигоны и поли-линии пришлось делать через обычные полигоны, и, впоследствие, сглаживать их другим алгоритмом для отрисовки данных уже на отдельном canvas'е.

Не поделитесь, для какого проекта? :)
Проект о недвижимости, в стадии разработки, Бангкок (увы пока всё, что могу сказать).
Безье лучше не через канваc организовывать, а через svg
А кто-нибудь сталкивался с задачей отрисовки многочисленных (несколько тысяч) полигонов на карте Google Maps?
Предполагаю, что при наличии хотя бы нескольких десятков полигонов начинаются жуткие тормоза. Сам с таким количеством не сталкивался, но знаю как ведёт себя слабенький комп при наличии десятка полигонов. Думаю, единственный выход отображать полигоны в зависимости от видимой области.
Да на Flesh-e работает на ура. Только Гугл больше Flash API не развивает. А на JS API таки да — тормоза жуткие…
В IE8 отрисовка 3200 полигонов заняла 12-14 секунд, а попытка приблизить повесила браузер напрочь (убили через 30 сек).

А в остальных браузерах да, неплохо работает.
возможно я не совсем понял вашу задачу, но думаю это может помочь и натолкнуть на мысль google
спасибо, но это не совсем то — кластеризация ориентированна на маркеры, не на полигоны
Можно попробовать через KML. Создать полигоны в KML, а потом подгрузить на карту.
UFO just landed and posted this here
Да, будет видимо пилить в этом направлении
ну вот… запугали монетизацией карт
а я уже на api.yandex перешел (
Интересно, как им удалось сделать отрисовку и скейлинг фигур таким быстрым в IE8? Мне кажется, что ребята используют VML, но нам такой производительности добиться не удается.
Да Вы правы.
В Internet Explorer в Google Maps для создания ломаных линий служит язык VML, в других браузерах — SVG (если доступен). В остальных случаях изображение линии запрашивается с серверов Google, накладывается на карту и обновляется по мере масштабирования и перетаскивания карты. Источник
Да ну? А canvas'ы, распиленные на сектора, где?
Там и есть Canvas. Видимо не хотят в документации честно написать, что SVG используется не там, где поддерживается, а там, где Canvas уж совсем тормозной.
А где канвас медленнее SVG?
Имелась в виду технология или задача?
Неведомо где. Речь просто о том, что в доках по Google Maps API говорится, что используется SVG, тогда как на деле в основных (не-IE) браузерах они используеют Canvas. Как раз потому что быстрее.
Странно, VML всего в 500 раз медленнее канваса.
В итоге, при аккуратном, использовании работает нормально.
UFO just landed and posted this here
вообще сделано специально.
Такое практически на всех картах.
Обратное вы никак не объясните людям которые живут на границах проектора меркатора, но при этом думают что земля — круглая
это все здорово, но когда уже карты российских городов, хотя бы миллионников будут.
За пределами их даже дороги липовые нарисованы :) Упаси господь по картам Гугля ориентироваться в России.
Спасибо, главное вовремя. Как раз в проекте полигоны рисовать надо. Лень моя просит еще поиск точек внутри фигур, но придется самому как–нибудь.
Есть там. В самом полигоне эти функции и есть
Вот это круто. Значит, будем ртфм-ить!
если б они ещё стирание фигурами организовали(типа как екструд в иллюстраторе), цены б им не было!
Тьфу, тоесть, pathfinder
зато в яндекс картах такое есть :)
В принципе, эти инструменты(круги, маркеры, полилинии) были и раньше известны по отдельности. Были попытки создать различные библиотеки (например, raphael), сервисы для рисования (scribblemaps.com, quikmaps.com). Видно Google решила, что это хорошая идея и добавила инструменты для рисования в API в подключаемую библиотеку Drawing.
это хорошо что теперь есть нативные объекты, вопрос в другом как я понял что рисовать не проблема, нарисовать перед созданием тоже вроде не проблема, а как сохранить то что пользователь нарисовал?! надо каждый раз слушать событие overlaycomplete? и при помощи аджакса и какой-то матери сохранять это в своем собственном формате в свою же базу?
Ну если хотите, чтобы то что нарисовал пользователь осталось, нужно его где-то сохранить. Вы можете сохранить все, что пользователь нарисовал в свою БД или, к примеру, в kml-файл. Можно сохранять после каждого добавления нового объекта с помощью ajax, а можно после того как пользователь все нарисовал — сделать кнопку «Сохранить» и потом сохранить все сразу.
мммм… вопрос был такой: это все надо делать самому или есть какой-то метод «экспорт» который соберет всё нарисованное и вернет кмл
Метода, который сам все соберет и вернет kml, кажется нету.
Нужно самому все сохранять.
Хотя такой метод совсем не помешал бы.
Что-то вроде этого сервиса Digitizer tool — нанес нужные объекты и получил kml.
сервис это прекрасно, но я про конкретно про эту библиотеку. Просто дело в том что насколько я помню нету метода который вернет все overlay. тоесть нельзя по нажатию кнопки сохранить выгрести с карты все оверлеи, обойти циклом и получить выхлоп. Нужно при создании каждого ловить его overlaycomplete и там засовывать ссылку на него в какотой-то массив проеденный в 'общей для всех' области видимости. потом при сохранении обходить этот массив. Но вопрос что (какое) происходит при изменении оверлея и как это отслеживать.
Вы правы нету метода, который вернет все Overlay. Если делать общую кнопку «Сохранить», то придется скорее всего делать как вы описали.
Про изменения фигур:
Если не установить опцию editable в true для фигур, то по умолчанию юзер не сможет их изменять после создания.
Если же editable: true, то когда юзер изменит фигуру — это можно отследить с помощью соответствующих событий:
Circle
radius_changed
center_changed
Polygon
insert_at
remove_at
set_at
Polyline
insert_at
remove_at
set_at
Rectangle
bounds_changed

Пример,
google.maps.event.addListener(circle, 'radius_changed', function() {
  radius = circle.getRadius();
});

Подробнее здесь
Sign up to leave a comment.

Articles