Сделали пример, в котором показано, как определять попала ли метка в какую-либо область карты. Пример сделан для разных типов геометрий.
Посмотреть пример в новом окне.
Пользуйтесь и присылайте свои примеры реализации в комментариях или на нашей страничке в Фейсбуке.
Прочитал статью на http://habrahabr.ru/post/127446/
На версии 1.x все получилось..вот теперь надо реализовать на второй версии.
А точнее построить полигон по километрам мкада и проверять, находится ли внутри полигона указанная точка или нет.
Делаю так.. Беру пример с сайта, и вместо этих координат, подставляю координаты каждого километра мкада, но полигон не рисуется =(
// Создадим геообъект с типом геометрии "полигон".
myGeoObject = new ymaps.GeoObject({
// Геометрия.
geometry: {
// Тип геометрии - полигон.
type: "Polygon",
// Координаты.
coordinates:
[
[
...
[37.842762,55.774558],
[37.842789,55.76522],
[37.842627,55.755723],
[37.841828,55.747399],
[37.841217,55.739103],
[37.840175,55.730482],
... // и так до 108 км
]
]
}
});
Подскажите плиз, как проставить полигон по координатам мкада?
Строю карту примрено таким скриптом (не весь):
ymaps.ready(init);
function init() {
// Создание экземпляра карты и его привязка к контейнеру с
// заданным id ("map")
var myMap = new ymaps.Map('map', {
// При инициализации карты, обязательно нужно указать
// ее центр и коэффициент масштабирования
center:[55.76, 37.64], // Москва
zoom:10
});
myMap.controls
// Кнопка изменения масштаба
.add('zoomControl')
// Список типов карты
.add('typeSelector')
// Стандартный набор кнопок
.add('mapTools');
// Создаем полигон МКАД по заданным координатам mkad
var polygon = new ymaps.Polygon([mkad],{},{fillColor: '#FCFDFF', opacity: 0, interactivityModel: 'default#transparent'});
myMap.geoObjects.add(polygon);
Начальная и конечная точки прекрасно добавляются на карту, получаю расстояние и прочее. Это все ниже по коду. Но мне нужно определить что конечная точка находится внутри полигона (polygon ) или вне его, что проще.
А с этим вот беда какая-то.
Для API 1.x решение есть в интернете polygon.contains(point). А для 2.0 не дается, ругается.
На карте имеется замкнутый контур (многоугольник или ломаная).
Нужно определить, попадает ли внутрь этого замкнутого контура заданная координата, либо нет.
Есть ли стандартные функции для этой вакхналии? Если нет, то как посоветуете решить задачу?
Заранее спасибо за ответы!
Есть замечательный код, который позволяет определить принадлежит ли точка заданной области.
Вот сама функция:
function inPolygon (polygon, point) {
var c = 0;
for (var i = 0, points = polygon.getPoints(), j = points.length - 1; i < points.length; j = i++) {
if ((((points[i].getLat() <= point.getLat()) && (point.getLat() < points[j].getLat())) || ((points[j].getLat() <= point.getLat()) && (point.getLat() < points[i].getLat()))) &&
(point.getLng() > (points[j].getLng() - points[i].getLng()) * (point.getLat() - points[i].getLat()) / (points[j].getLat() - points[i].getLat()) + points[i].getLng())
) {
c = !c;
}
}
return c;
}
У меня есть YMapsML-файл в котором содержится описание зон на карте полигонами:
<ymaps:GeoObjectCollection>
<ymaps:GeoObject>
<gml:Polygon>
Ну и так далее.
Загружаю я этот файл как обычно:
var zoneh = new YMaps.YMapsML('http://мой сайт/zone.xml');
map.addOverlay(zoneh);
Но выполнить следующий код не удается:
if (inPolygon(zoneh.get(0).get(1), obj4.getGeoPoint())) {
YMaps.jQuery(".ClDataCold").append("<p>Зона влажности: Влажная</p>");
alert("Зона найдена.");
}
Пример кода тут - http://ovvk-info.narod.ru/maps-climatrr.html
Подскажите пожалуйста. Мне необходимо при установке балуна
placemark.setGeoPoint(geoResult.getGeoPoint());
placemark.openBalloon();
получать название активной области ( названия области Украины), где установлен данный балун.
Подключила модуль регионы, загрузила регионы. дальше не пойму как делать. Подскажите пожалуйста.
1. На странице в разделевнешние элементы управления показано как сделать кнопку "Линейка-переключатель", а как сделать кнопку-флажок для линейки?
Следующий код не сработал:
var toolBar = new YMaps.ToolBar([]
//Даже, если просто написать var toolBar = new YMaps.ToolBar(
// Добавляем кнопку "Линейка"
var buttonRul = new YMaps.ToolBarToggleButton(YMaps.ToolBar.DEFAULT_GR OUP, {
icon: "http://api-maps.yandex.ru/i/0.3/icons/icon-ruler.p ",ng
hint: "Линейка"
}
// Включает линейку, когда кнопка активна
YMaps.Events.observe(buttonRul, buttonRul.Events.Select, function () {
this.getMap().enableRuler(
}, toolbar);
// Выключает линейку, когда кнопка неактивна
YMaps.Events.observe(buttonRul, buttonRuln.Events.Deselect, function () {
this.getMap().disableRuler(
}, toolbar);
Просто появилась кнопка без картинки и требуемых функций, хотя она работатет как положено "кнопке-флажку".
2. Как определить принадлежность точки к определнной области, в частности интересует принадлежность в модуле "Регионы". Ищешь в поиске город по названию, карта центруется на найденном населенном пункте и ты получаешь название региона.
3. Есть несколько подгруженных xml-файлов с координатами, можно ли средства яндекса определить ближайшую точку или надо мерить в цикле расстояние между всеми точками. И если мерить надо в цикле, то видимо это надо делать этим методом - http://api.yandex.ru/maps