Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выход за координаты полигона Google Map. Как определить?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Alt.F4
Добрый день.
Стоит задача определить на web-сервере, вышел ли объект за установленную геозону (полигон на карте).
Каким образом это делают бывалые?
Спасибо.
з.ы. в распоряжении имеются координаты объекта (долгота и широта) и PHP.
DpInRock
Бывалые используют ошейник на сварной цепи.

А любители - GPS c GSM или WiFi.
Alt.F4
Цитата
А любители - GPS c GSM или WiFi.
Исходные данные: территория города и координаты объекта (широта, долгота)
Задача: определить, находится ли объект на территории города или нет?
Спасибо.
Herz
Шпиономания какая-то. Если есть координаты объекта и карта города, то задачка решается без применения техники за шесть секунд.
DpInRock
Т.е. -
Точку на карту поставить можете (раз есть координаты и карта), а сделать логический вывод (например, карта Минска, точка получилась на Северном полюсе) не можете?

Палыч
Цитата(DpInRock @ Oct 10 2011, 09:27) *
сделать логический вывод ... не можете?

Вероятно, у ТС "проблемы" с полярными координатами. Если объект/геозона "далеко" от полюсов - см. "проекция Меркатора"...
DpInRock
Вообще-то "карта" - с точки зрения координат - всегда верна. Вернее, верна настолько, насколько это возможно.

Скорее всего ТС имеет ввиду (телепатия) рисунок карты города. Как в кино у ментов, с лампочками, флажками и магнитиками от холодильника.
Alt.F4
Расскажу ситуацию более конкретно.
На сайте есть гугл-карта, в БД лежат координаты объекта. Юзер задает полигон, а я должен проверить, находится ли объект из БД на это территории или нет.
SSerge
Из точки, где находится объект, поочерёдно смотрите на все вершины полигона. При переходе от одной вершины к следующей угол зрения поворачивается на некоторый угол (теорема косинусов, однако). Обходя последовательно все вершины и возвращаясь к первой суммируете углы поворота.
Если объект внутри, получите 360 градусов (2пи), если снаружи, то ноль.
Tanya
Цитата(Alt.F4 @ Oct 10 2011, 10:46) *
Расскажу ситуацию более конкретно.
На сайте есть гугл-карта, в БД лежат координаты объекта. Юзер задает полигон, а я должен проверить, находится ли объект из БД на это территории или нет.

Занумеруем вершины полигона. Проводим радиус-вектор от объекта до 1-й вершины. Поворачиваем до второй .... Если после прихода в первую угол поворота будет(-)2pi - объект внутри. Если 0 - снаружи.

Цитата(SSerge @ Oct 10 2011, 11:00) *
Если объект внутри, получите 360 градусов (2пи), если снаружи, то ноль.

Почти слово в слово. Только про минус забыли написать.
Alt.F4
SSerge, Tanya, а как это будет выглядеть в формулах? blush.gif
Спасибо.
Палыч
Цитата(Alt.F4 @ Oct 10 2011, 12:21) *
а как это будет выглядеть в формулах?

По геометрии в школе двойка была? rolleyes.gif

Строите два вектора: от точки положения объекта до двух соседних точек контура "геозоны".
Косинус угла между векторами: отношение скалярного произведения векторов к произведению их длинн.
Tanya
Цитата(Палыч @ Oct 10 2011, 13:05) *
По геометрии в школе двойка была? rolleyes.gif

Строите два вектора: от точки положения объекта до двух соседних точек контура "геозоны".
Косинус угла между векторами: отношение скалярного произведения векторов к произведению их длинн.

Лучше векторное произведение - знак автоматически будет получаться.

Цитата(Alt.F4 @ Oct 10 2011, 12:21) *
SSerge, Tanya, а как это будет выглядеть в формулах? blush.gif
Спасибо.

А куда приходить за деньгами?
Спасибо.
Палыч
Цитата(Tanya @ Oct 10 2011, 13:11) *
Лучше векторное произведение.

Для векторного произведения - то же, но синус угла...

Кстати, значение угла только по синусу, или только по косинусу - получить без дополнительных ограничений нельзя. Поэтому для определения угла необходим синус и косинус...
Tanya
Цитата(Палыч @ Oct 10 2011, 13:26) *
Для векторного произведения - то же, но синус угла...

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

Неправда.
Палыч
Цитата(Tanya @ Oct 10 2011, 13:33) *
Неправда.

В чем я не прав?
Tanya
Цитата(Палыч @ Oct 10 2011, 13:35) *
В чем я не прав?

В том, что ориентированный угол так нельзя получить. Можно. Знак векторного произведения дает ориентацию угла.
Палыч
Цитата(Tanya @ Oct 10 2011, 13:39) *
В том, что ориентированный угол так нельзя получить. Можно. Знак векторного произведения дает ориентацию угла.

Чудесно... Вы получили синус угла = плюс 1/2. Чему равен угол? 30 градусов? 150?

Поскольку выше были раскрыты все "тайны" геометрии, то можно привести и результирующую формулу:

угол между направлениями на точку 2 и 1 из положения объекта= atan2( R2x * R1y - R2y * R1x , R1x * R2x + R1y * R2y)

где Rix - проекция вектора "объект - точка контура i" на ось Х (т.е. координата Х точки i минус координата Х объекта).
Riy - проекция вектора "объект - точка контура i" на ось Y (вычисляется аналогично).

To Alt.F4
C Вас объяснение: куда делись произведения длин векторов? ...и пиво!

P.S. Кстати, вычисления не будут иметь смысл, если положение объекта вточности совпадает с одной из точек контура "геозоны". На это - нужна дополнительная проверка!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.