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