Имя: Пароль:
1C
1C 7.7
v7: Принадлежность точки к площади
0 gabatel
 
31.05.12
16:06
Помогите пожалуйста два дня мучусь никак решить не могу.
Есть SQL база данных в которой имеются координаты транспортного средства которые передает навигатор.Нужно как то определитель находиться ли транспортное средство например на с/х поле и не превышает ли скорость на нём,дорогу. Думаю создать базу данных из координатами полей примерно от 15 до 50 точек,и как то с ними оперировать,из 1С 7.7
1 МихаилМ
 
31.05.12
16:08
в скл 2008 появились Пространственные типы
http://msdn.microsoft.com/ru-ru/library/ff848797
2 palpetrovich
 
31.05.12
16:15
тут смотрел? wiki:Задача_о_принадлежности_точки_многоугольнику
зы: ну и задачки однако  :)
3 gabatel
 
31.05.12
16:41
Нашол js скрипт который проверяет количество пересечений,нужно ка кто это скрипт из 1С выполнить,выводит ошибку,подскажите в чём ошибка.

   Скрипт= СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Скрипт.AddCode("
   |function isPointInPoly(poly, pt){
   |for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)
   |((poly[i].y <= pt.y && pt.y < poly[j].y) || (poly[j].y <= pt.y && pt.y < poly[i].y))
   |&& (pt.x < (poly[j].x - poly[i].x) * (pt.y - poly[i].y) / (poly[j].y - poly[i].y) + poly[i].x)
   |&& (c = !c);
   |return c;
   |}
   |points = [
   |{x: 0, y: 0},
   |{x: 0, y: 50},
   |{x: 50, y: 10},
   |{x: -50, y: -10},
   |{x: 0, y: -50},
   |{x: 0, y: 0}
   |];
   |");
//    |alert(isPointInPoly(points, {x: 10, y: 10}) ? "In" : "Out");    
   Текст=СокрЛП(Скрипт.Run("isPointInPoly(points, {x: 10, y: 10})"));
КонецПроцедуры
4 gabatel
 
31.05.12
16:43
И смогу ли я в массив points загнать ТаблицуЗначений с координатами полей
5 vde69
 
31.05.12
16:45
есть такое "Триангуляция Делона"

суть твоей задачи сводится к 2м этапам

1. с помощью триангуляции разбиваень произвольную площадь на треугольники
2. для каждого треугольника определяешь внутри точка или нет

задачка совсем не сложная :) я делал куда сложнее
6 vde69
 
31.05.12
16:47
(3) на сколько я понял скрипт в (3) примерно так и работает, только вот он только для выпуклых полигонов подходит :)
7 gabatel
 
31.05.12
16:51
У меня есть еще в базе и высота над уровнем моря
8 vde69
 
31.05.12
16:51
кстати у меня даже код на 1с был для трехмерной триангуляцции
9 andrewalexk
 
31.05.12
16:52
(8) :) сурово....что моделировал?
10 vde69
 
31.05.12
16:54
(9) сканер 3д выдает поле точек обьекта, нужно построить твердотельное тела для солид систем.
11 vde69
 
31.05.12
16:55
(9) только очень долго, лям точек обрабатывается примерно неделю
12 gabatel
 
31.05.12
16:55
Скинь код если можешь
13 Злопчинский
 
31.05.12
23:38
на ИС есть разработки с мапами, в т.ч. иконтроль нахожденяи транспортного средсва в периметре
14 Злопчинский
 
31.05.12
23:40
определить находится или нет можно тупо - если совсем никак.
есть карта, пусть будет двухцветный битмап. контролируемая площадь - черный цвет, запределы - белый. получаем координаты нужнйо точки, читаем цвет - определяем что мы либо за пределами, либо внутри. При предварительной подготовке битмапов контролируемых площадей - практически мгновенно...
15 gabatel
 
01.06.12
09:38
Вариант с цветом неплохой,только как реализовать это,где я буду хранить эти поля,или есть какая та программа?, и как их потом считывать и знать где они находятся?
16 vde69
 
01.06.12
09:39
вариант с цветом плох тем, что мы перемешиваем раст и вектор, может боком вылезти
17 gabatel
 
01.06.12
09:45
Согласен
18 dk
 
01.06.12
09:49
(16) имхо зависит от нужной погрешности, если +/- 100 метров, то при растре 1 точка = 10..50 метров пофиг
не нужна для данной задачки высокая точность, это не резка лазером
19 gabatel
 
01.06.12
10:13
Не согласен,есть много полей вокруг которых идет полевая дорого,и есть через поле,будит сообщать что превышение на поле
20 dk
 
01.06.12
10:21
ты бы сначала точность своих gps приемников проверил, а уже потом у нужной тебе точности рассуждал
21 gabatel
 
01.06.12
12:25
Не могу найти в чем ошибка?,в html код работает

   Скрипт= СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Скрипт.AddCode("
   |function isPointInPoly(poly, pt){
   |for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)
   |            ((poly[i].y <= pt.y && pt.y < poly[j].y) || (poly[j].y <= pt.y && pt.y < poly[i].y))
   |            && (pt.x < (poly[j].x - poly[i].x) * (pt.y - poly[i].y) / (poly[j].y - poly[i].y) + poly[i].x)
   |            && (c = !c);
   |        return c;
   |        }            
   |        points = [
   |        {x: 49.325829, y: 26.854756},
   |        {x: 49.326994, y: 26.857169},
   |        {x: 49.324019, y: 26.860754},
   |        {x: 49.325577, y: 26.853961},
   |        {x: 49.325439, y: 26.864316},
   |        {x: 49.327067, y: 26.866709},
   |        {x: 49.323869, y: 26.871692},
   |        {x: 49.323246, y: 26.867334},
   |        {x: 49.322805, y: 26.866486},
   |        {x: 49.320791, y: 26.865787},
   |        {x: 49.320452, y: 26.860936},
   |        {x: 49.320955, y: 26.859675},
   |        {x: 49.322664, y: 26.858469},
   |        {x: 49.323591, y: 26.858516},
   |        {x: 49.324285, y: 26.857736},
   |        {x: 49.324858, y: 26.856305},
   |        ];
   |        alert(isPointInPoly(points, {x: 49.323296, y: 26.857411}) ? "+"да "+": "+"нет"+");
   |");
   Текст=СокрЛП(Скрипт.Run("isPointInPoly(points, {x: 10, y: 10})"));  
22 gabatel
 
01.06.12
12:27
И возможно ли в массив points загнать координаты из таблицы значений