ErBhati Ответов: 1

Как показать маркер только внутри полигона. Если маркер вне полигона не должен отображаться на карте googlemap


Привет,

Мой вопрос заключается в том , как найти lat long внутри нарисованного полигона или нет у меня есть записи mutliple в моей базе данных, когда приложение запущено,то все маркеры видны, а когда мы рисуем форму и применяем, то только маркер внутри полигона показывает, это очень важно для меня, пожалуйста, помогите мне.

Заранее спасибо

Что я уже пробовал:

$("#poly_apply").on("click", function (e) {
        $(".loader-container").show();
        records = [];
        polySides = myaary.length - 1;
        for (var i = 0; i < myaary.length; i++) {
            latarr.push(myaary[i].lat());
            lanarr.push(myaary[i].lng());
        };
        var minlt = Math.min.apply(null, latarr);
        var maxlt = Math.max.apply(null, latarr);
        var minln = Math.min.apply(null, lanarr);
        var maxln = Math.max.apply(null, lanarr);
        var vald = {
            mn_lt: minlt,
            mx_lt: maxlt,
            mn_ln: minln,
            mx_ln: maxln
        }

        $.getJSON("/MapSearch/Get_Result/", vald, function (data) {
            var filtered = []; 
           for (var j = 0; j < records.length; j++) {
            var item = records[j];

            if (pointInPolygon(polySides, latarr, lanarr, item.lat, item.lng)) {
              
 var marker = new google.maps.Marker({
                        position: new google.maps.LatLng(item.lat, item.lng),
                        icon: img.jpg,
                        title: 'Click me',
                        map: map                       
                    });
            }
        }
        });
    });
function pointInPolygon(polySides, polyX, polyY, x, y) {
    var j = polySides - 1;
    oddNodes = 0;
    for (i = 0; i < polySides; i++) {
        if (polyY[i] < y && polyY[j] >= y || polyY[j] < y && polyY[i] >= y) {
            if (polyX[i] + (y - polyY[i]) / (polyY[j] - polyY[i]) * (polyX[j] - polyX[i]) < x) {
                oddNodes = !oddNodes;
            }
        }
        j = i;
    }
    return oddNodes;}

Patrice T

В чем проблема в коде ?

ErBhati

маркеры отображаются за пределами нарисованного многоугольника.

Patrice T

это означает, что pointInPolygon неудачи.
Попробуйте установить квадрат как многоугольник и проверить с точкой внутри и одной снаружи.

ErBhati

мы не можем ограничить пользователя рисовать квадрат как многоугольник.

1 Ответов

Рейтинг:
11

ErBhati

добавив Это я нашел свое решение:

function pointInPolygon(polySides, polyX, polyY, x, y) {
    polySides = polyX.length;
    var j = polySides - 1;
    oddNodes = 0;
    for (i = 0; i < polySides; i++) {
        if (polyY[i] < y && polyY[j] >= y || polyY[j] < y && polyY[i] >= y) {
            if (polyX[i] + (y - polyY[i]) / (polyY[j] - polyY[i]) * (polyX[j] - polyX[i]) < x) {
                oddNodes = !oddNodes;
            }
        }
        j = i;
    }
    return oddNodes;
}