Клуб API Карт

Найдено на тему «точка внутри области»:
Пример: определение попадания точки в область
tekunova
8 ноября 2012, 14:26
Пример: определение попадания точки в область

Сделали пример, в котором показано, как определять попала ли метка в какую-либо область карты. Пример сделан для разных типов геометрий.

Посмотреть пример в новом окне.


Попадание точки в область

Пользуйтесь и присылайте свои примеры реализации в комментариях или на нашей страничке в Фейсбуке.

API 2.0,примеры,точка внутри области
Полигон в Api 2.x
Артем А
31 октября 2012, 10:59

Прочитал статью на 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 км

        ]
      ]
    }
});

 

 

Подскажите плиз, как проставить полигон по координатам мкада?

10 комментариев
точка внутри области,API 2.0,полигон
Сижу туплю! Проверить находится ли адрес внутри (или) вне области (полигона)
bel30197
28 августа 2012, 14:27

Строю карту примрено таким скриптом (не весь):

 

 // Как только будет загружен API и готов DOM, выполняем инициализацию
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);
myCollection = new ymaps.GeoObjectCollection();
jQuery('.mapsearch').click(function () {
var id = jQuery(this).attr('id');
var c = jQuery('#jform_' + id + '_city').val();
var s = jQuery('#jform_' + id + '_street').val();
var h = jQuery('#jform_' + id + '_house').val();
var k = jQuery('#jform_' + id + '_korpus').val();
var search_query = c + ', ' + s + ', ' + h + '';
if (id == 'start')
{
jQuery('#maplist').innerText='';
jQuery('#startcoord').val('');
jQuery('#endcoord').val('');
}
jQuery('#' + id + 'coord').val(search_query);
ymaps.geocode(search_query, {results:1}).then(function (res) {
if (id == 'start')
{
jQuery('#maplist').innerText='';
myCollection.removeAll();
}
myCollection = res.geoObjects;
myMap.geoObjects.add(myCollection);
});
return false;
});

 

Начальная и конечная точки прекрасно добавляются на карту, получаю расстояние и прочее. Это все ниже по коду. Но мне нужно определить что конечная точка находится внутри полигона (polygon ) или вне его, что проще.

А с этим вот беда какая-то.

Для API 1.x решение есть в интернете polygon.contains(point). А для 2.0 не дается, ругается.

4 комментария
точка внутри области,полигон
Попадание координаты в замкнутый контур
edaby
16 сентября 2010, 10:50

На карте имеется замкнутый контур (многоугольник или ломаная).

Нужно определить, попадает ли внутрь этого замкнутого контура заданная координата, либо нет.

Есть ли стандартные функции для этой вакхналии? Если нет, то как посоветуете решить задачу?

Заранее спасибо за ответы!

5 комментариев
точка внутри области
Определение принадлежности точки многоугольнику (для xml)
ovvk-info
11 июня 2010, 16:42

Есть замечательный код, который позволяет определить принадлежит ли точка заданной области.

Вот сама функция:

 

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

10 комментариев
точка внутри области,полигон,YMapsML
Использование модуля Регионы.
Удалённый пользователь
3 июня 2010, 13:20

Подскажите пожалуйста. Мне необходимо при установке балуна

 placemark.setGeoPoint(geoResult.getGeoPoint());

 placemark.openBalloon();

 получать название активной области ( названия области Украины), где установлен данный балун.

 Подключила модуль регионы, загрузила регионы. дальше не пойму как делать. Подскажите пожалуйста.

 

3 комментария
регионы,точка внутри области,модули
3 вопроса: "Линейка-флажок", определение региона и ближайшая точка
ovvk-info
24 апреля 2010, 14:51

1. На странице в разделевнешние элементы управления показано как сделать кнопку "Линейка-переключатель", а как сделать кнопку-флажок для линейки?


Следующий код не сработал:




var toolBar = new YMaps.ToolBar([]

//Даже, если просто написать var toolBar = new YMaps.ToolBar(



// Добавляем кнопку "Линейка"

var buttonRul = new YMaps.ToolBarToggleButton(YMaps.ToolBar.DEFAULT_GROUP, {
 
        icon: "http://api-maps.yandex.ru/i/0.3/icons/icon-ruler.png", 
 
        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/jsapi/doc/ref/reference/geopoint.xml#distance - можно ли посмотреть на рабочий пример?

7 комментариев
точка внутри области,линейка,элементы управления,геокодирование