Comments 42
Здорово. Но вот поддержку сглаженных полигонов (кривых безье или квадратичных) гугл карты почему-то не поддерживают до ныне, что слегка огорчает. Несколько месяцев назад нужно было разработать полноценный инструмент для создания сложных фигур на картах, всё было реализовано в полном объёме, но сглаженные полигоны и поли-линии пришлось делать через обычные полигоны, и, впоследствие, сглаживать их другим алгоритмом для отрисовки данных уже на отдельном canvas'е.
Несколько месяцев назад нужно было разработать полноценный инструмент для создания сложных фигур на картах, всё было реализовано в полном объёме, но сглаженные полигоны и поли-линии пришлось делать через обычные полигоны, и, впоследствие, сглаживать их другим алгоритмом для отрисовки данных уже на отдельном canvas'е.
Не поделитесь, для какого проекта? :)
Безье лучше не через канваc организовывать, а через svg
А кто-нибудь сталкивался с задачей отрисовки многочисленных (несколько тысяч) полигонов на карте Google Maps?
Предполагаю, что при наличии хотя бы нескольких десятков полигонов начинаются жуткие тормоза. Сам с таким количеством не сталкивался, но знаю как ведёт себя слабенький комп при наличии десятка полигонов. Думаю, единственный выход отображать полигоны в зависимости от видимой области.
Да на Flesh-e работает на ура. Только Гугл больше Flash API не развивает. А на JS API таки да — тормоза жуткие…
вот тут 3200 полигонов работают на ура code.google.com/p/polygonzo/
Можно попробовать через KML. Создать полигоны в KML, а потом подгрузить на карту.
ну вот… запугали монетизацией карт
а я уже на api.yandex перешел (
а я уже на api.yandex перешел (
Интересно, как им удалось сделать отрисовку и скейлинг фигур таким быстрым в IE8? Мне кажется, что ребята используют VML, но нам такой производительности добиться не удается.
Да Вы правы.
В Internet Explorer в Google Maps для создания ломаных линий служит язык VML, в других браузерах — SVG (если доступен). В остальных случаях изображение линии запрашивается с серверов Google, накладывается на карту и обновляется по мере масштабирования и перетаскивания карты. Источник
В Internet Explorer в Google Maps для создания ломаных линий служит язык VML, в других браузерах — SVG (если доступен). В остальных случаях изображение линии запрашивается с серверов Google, накладывается на карту и обновляется по мере масштабирования и перетаскивания карты. Источник
Странно, VML всего в 500 раз медленнее канваса.
В итоге, при аккуратном, использовании работает нормально.
В итоге, при аккуратном, использовании работает нормально.
это все здорово, но когда уже карты российских городов, хотя бы миллионников будут.
Спасибо, главное вовремя. Как раз в проекте полигоны рисовать надо. Лень моя просит еще поиск точек внутри фигур, но придется самому как–нибудь.
если б они ещё стирание фигурами организовали(типа как екструд в иллюстраторе), цены б им не было!
я еще год назад показывал как прикрутить к картам рафаель
mabp.kiev.ua/2010/09/10/raphael-overlay/
mabp.kiev.ua/2010/09/10/raphael-overlay/
В принципе, эти инструменты(круги, маркеры, полилинии) были и раньше известны по отдельности. Были попытки создать различные библиотеки (например, 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
Пример,
Подробнее здесь
Про изменения фигур:
Если не установить опцию 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.
Новая библиотека Drawing в Google Maps API V3