За последние 24 часа нас посетили 52367 программистов и 1756 роботов. Сейчас ищут 2233 программиста ...

Мониторинг и управление грузоперевозками с отображением ГИС

Тема в разделе "PHP для новичков", создана пользователем Dark19, 13 май 2014.

  1. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    Здравствуйте, стоит задача создать систему мониторинга и управления грузоперевозками с отображением ГИС. Например создается БД в 10 машин(можно и больше) с разной грузоподьёмностью(каждая машина - запись в таблице), так вот нужно найти наиболее близкую машину со свободным местом и которая едет по наиболее похожему маршруту или которая может по срокам сделать крюк. Со стороны пользователя он должен: тыкнуть на карте на одну точку (начальный город) и на вторую (конечный) и ввести вес его груза, а система должна рассчитать и подобрать удобный для него вариант (что-то типа такого).
    Подскажите как реализовать это все (думаю использовать php)? И еще думаю как-то привязать это все к карте (думаю использовать api яндекс карт), нужно как-то подтягивать данные с БД в api Ymaps, может кто-то знает как такое делать?
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Re: Мониторинг и управление грузоперевозками с отображением

    в двух словах это не описать. поиск оптимального пути, ближайшего транспорта либо самому считать(теория графов) либо юзать какойто готовый софт. приклеить к гуглокартам или якартам непроблема.

    в общем начните делать по шагам. будут конкретные вопросы - подскажем может.
     
  3. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    Re: Мониторинг и управление грузоперевозками с отображением

    В api карт, насколько я знаю, есть поиск оптимального пути, к нему можно привязаться?
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Re: Мониторинг и управление грузоперевозками с отображением

    Тов. Dark19, Вы не запрашиваете создание какого-то скрипта, речь у вас идёт о разработке полноценной логистической системы, даже функциональный запрос на которую (не говоря о техническом задании на разработку) невозможно описать в 7 строках поста.
    Для того, чтобы иметь шанс "это всё" реализовать, для начала необходимо четко сформулировать цели и функции системы из которых получится выделить отдельные задачи, которые, в свою очередь, система будет решать. Только после этого можно переходить к подготовке описательного технического задания где будут выявлены сообразно с задачами технологии, сервисы, по и железо и другие неотъемлимые составляющие разработки подобной системы.
    Ваша ошибка в том, что вы привязываетесь к фронтенду, ошибочно полагая что основное о чем стоит задумываться в реализации подобных систем связано с визуальным отображением маршрутов и автомобилей на графической карте. Так вот, в системе указанная составляющая будет одной из самых тривиальных в реализации.
    А как только вы составите полноценный функциональный запрос, в ходе фомирования требований к системе сразу всплывут вопросы, которые вас приведут к постановке задач по решению таких проблем, как:

    • отслеживание местоположения и gsm-модули и контроллеры для транспортных средств;
      отслеживание и передача данных о состояннии тс, в особенности уровня горючего в топливном баке;
      обратная связь с водителем и контрагентами в рамках системы;
      интеграция с собственным складом и складами контрагентов по маршруту и автоматизация учета загруженности автомобилей;
    И т.д. и т.п.
     
  5. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    Re: Мониторинг и управление грузоперевозками с отображением

    подскажите как мне передать переменные distance и address в php код с js кода(Ymaps api) без перезагрузки страницы? Когда делаю вот так:
    Код (Text):
    1. $.ajax({
    2.                                     url: "http://geo/index.php",
    3.                                     type : "GET",
    4.                                     data : ({distance:distance}),
    5.                                     success: function (responseText) {
    6.                                         alert(responseText);
    7.                                     }
    то карта не загружается
    Вот код Ymaps:
    Код (Text):
    1. <!-- Если вы используете API локально, то в URL ресурса необходимо указывать протокол в стандартном виде (http://...)-->
    2.     <script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
    3.     <style>
    4.         html, body, #map {
    5.             width: 100%;
    6.             height: 100%;
    7.             padding: 0;
    8.             margin: 0;
    9.         }
    10.     </style>
    11.  
    12.     <script type="text/javascript">
    13.         function init() {
    14.             var myMap = new ymaps.Map('map', {
    15.                     center: [50.340512, 30.534661],
    16.                     zoom: 10,
    17.                     type: 'yandex#map',
    18.                     behaviors: ['scrollZoom', 'drag'],
    19.                     controls: []
    20.                 }),
    21.                 searchStartPoint = new ymaps.control.SearchControl({
    22.                     options: {
    23.                         useMapBounds: true,
    24.                         noPlacemark: true,
    25.                         noPopup: true,
    26.                         placeholderContent: 'Адрес начальной точки',
    27.                         size: 'large'
    28.                     }
    29.                 }),
    30.                 searchFinishPoint = new ymaps.control.SearchControl({
    31.                     options: {
    32.                         useMapBounds: true,
    33.                         noCentering: true,
    34.                         noPopup: true,
    35.                         noPlacemark: true,
    36.                         placeholderContent: 'Адрес конечной точки',
    37.                         size: 'large',
    38.                         float: 'none',
    39.                         position: { left: 10, top: 44 }
    40.                     }
    41.                 }),
    42.                 calculator = new DeliveryCalculator(myMap, myMap.getCenter());
    43.  
    44.             myMap.controls.add(searchStartPoint);
    45.             myMap.controls.add(searchFinishPoint);
    46.  
    47.             searchStartPoint.events.add('resultselect', function (e) {
    48.                 var results = searchStartPoint.getResultsArray(),
    49.                     selected = e.get('index'),
    50.                     point = results[selected].geometry.getCoordinates();
    51.  
    52.                 calculator.setStartPoint(point);
    53.             })
    54.                 .add('load', function (event) {
    55.                     // По полю skip определяем, что это не дозагрузка данных.
    56.                     // По getRusultsCount определяем, что есть хотя бы 1 результат.
    57.                     if (!event.get('skip') && searchStartPoint.getResultsCount()) {
    58.                         searchStartPoint.showResult(0);
    59.                     }
    60.                 });
    61.  
    62.             searchFinishPoint.events.add('resultselect', function (e) {
    63.                 var results = searchFinishPoint.getResultsArray(),
    64.                     selected = e.get('index'),
    65.                     point = results[selected].geometry.getCoordinates();
    66.  
    67.                 calculator.setFinishPoint(point);
    68.             })
    69.                 .add('load', function (event) {
    70.                     // По полю skip определяем, что это не дозагрузка данных.
    71.                     // По getRusultsCount определяем, что есть хотя бы 1 результат.
    72.                     if (!event.get('skip') && searchFinishPoint.getResultsCount()) {
    73.                         searchFinishPoint.showResult(0);
    74.                     }
    75.                 });
    76.         }
    77.  
    78.         function DeliveryCalculator(map, finish) {
    79.             this._map = map;
    80.             this._start = null;
    81.             this._route = null;
    82.  
    83.             map.events.add('click', this._onClick, this);
    84.         }
    85.  
    86.         var ptp = DeliveryCalculator.prototype;
    87.  
    88.         ptp._onClick= function (e) {
    89.             if (this._start) {
    90.                 this.setFinishPoint(e.get('coords'));
    91.             } else {
    92.                 this.setStartPoint(e.get('coords'));
    93.             }
    94.         };
    95.  
    96.         ptp._onDragEnd = function (e) {
    97.             this.getDirection();
    98.         }
    99.  
    100.         ptp.getDirection = function () {
    101.             if(this._route) {
    102.                 this._map.geoObjects.remove(this._route);
    103.             }
    104.  
    105.             if (this._start && this._finish) {
    106.                 var self = this,
    107.                     start = this._start.geometry.getCoordinates(),
    108.                     finish = this._finish.geometry.getCoordinates();
    109.  
    110.                 ymaps.geocode(start, { results: 1 })
    111.                     .then(function (geocode) {
    112.                         var address = geocode.geoObjects.get(0) &&
    113.                             geocode.geoObjects.get(0).properties.get('balloonContentBody') || '';
    114.  
    115.                         ymaps.route([start, finish])
    116.                             .then(function (router) {
    117.                                 var distance = Math.round(router.getLength() / 1000),
    118.                                     message = '<span>Расстояние: ' + distance + 'км.</span><br/>' +
    119.                                         '<span style="font-weight: bold; font-style: italic">Стоимость доставки: %sр.</span>';
    120.  
    121.                                 self._route = router.getPaths();
    122.  
    123.                                 self._route.options.set({ strokeWidth: 5, strokeColor: '0000ffff', opacity: .5 });
    124.                                 self._map.geoObjects.add(self._route);
    125.                                 self._start.properties.set('balloonContentBody', address + message.replace('%s', self.calculate(distance)));
    126.  
    127.                             });
    128.                     });
    129.                 self._map.setBounds(self._map.geoObjects.getBounds())
    130.             }
    131.         };
    132.  
    133.         ptp.setStartPoint = function (position) {
    134.             if(this._start) {
    135.                 this._start.geometry.setCoordinates(position);
    136.             }
    137.             else {
    138.                 this._start = new ymaps.Placemark(position, { iconContent: 'А' }, { draggable: true });
    139.                 this._start.events.add('dragend', this._onDragEnd, this);
    140.                 this._map.geoObjects.add(this._start);
    141.             }
    142.             if (this._finish) {
    143.                 this.getDirection();
    144.             }
    145.         };
    146.  
    147.         ptp.setFinishPoint = function (position) {
    148.             if(this._finish) {
    149.                 this._finish.geometry.setCoordinates(position);
    150.             }
    151.             else {
    152.                 this._finish = new ymaps.Placemark(position, { iconContent: 'Б' }, { draggable: true });
    153.                 this._finish.events.add('dragend', this._onDragEnd, this);
    154.                 this._map.geoObjects.add(this._finish);
    155.             }
    156.             if (this._start) {
    157.                 this.getDirection();
    158.             }
    159.         };
    160.  
    161.         ptp.calculate = function (len) {
    162.             // Константы.
    163.             var DELIVERY_TARIF = 20,
    164.                 MINIMUM_COST =  500;
    165.  
    166.             return Math.max(len * DELIVERY_TARIF, MINIMUM_COST);
    167.         };
    168.  
    169.         ymaps.ready(init);
    170.  
    171.  
    172.     </script>
    173.  
    174. <div id="map"></div>
     
  6. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    Передача значения переменной в php c Ymaps

    Здравствуйте, подскажите как мне передать переменные distance и address в php код с js кода(Ymaps api) без перезагрузки страницы?
    Когда передаю вот так:
    Код (Text):
    1. $.ajax({
    2.                                     url: "http://geo/index.php",
    3.                                     type : "GET",
    4.                                     data : ({distance:distance}),
    5.                                     success: function (responseText) {
    6.                                         alert(responseText);
    7.                                     }
    то карта не загружается

    Вот код Ymaps:
    Код (Text):
    1. <!-- Если вы используете API локально, то в URL ресурса необходимо указывать протокол в стандартном виде (http://...)-->
    2.     <script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
    3.     <style>
    4.         html, body, #map {
    5.             width: 100%;
    6.             height: 100%;
    7.             padding: 0;
    8.             margin: 0;
    9.         }
    10.     </style>
    11.  
    12.     <script type="text/javascript">
    13.         function init() {
    14.             var myMap = new ymaps.Map('map', {
    15.                     center: [50.340512, 30.534661],
    16.                     zoom: 10,
    17.                     type: 'yandex#map',
    18.                     behaviors: ['scrollZoom', 'drag'],
    19.                     controls: []
    20.                 }),
    21.                 searchStartPoint = new ymaps.control.SearchControl({
    22.                     options: {
    23.                         useMapBounds: true,
    24.                         noPlacemark: true,
    25.                         noPopup: true,
    26.                         placeholderContent: 'Адрес начальной точки',
    27.                         size: 'large'
    28.                     }
    29.                 }),
    30.                 searchFinishPoint = new ymaps.control.SearchControl({
    31.                     options: {
    32.                         useMapBounds: true,
    33.                         noCentering: true,
    34.                         noPopup: true,
    35.                         noPlacemark: true,
    36.                         placeholderContent: 'Адрес конечной точки',
    37.                         size: 'large',
    38.                         float: 'none',
    39.                         position: { left: 10, top: 44 }
    40.                     }
    41.                 }),
    42.                 calculator = new DeliveryCalculator(myMap, myMap.getCenter());
    43.  
    44.             myMap.controls.add(searchStartPoint);
    45.             myMap.controls.add(searchFinishPoint);
    46.  
    47.             searchStartPoint.events.add('resultselect', function (e) {
    48.                 var results = searchStartPoint.getResultsArray(),
    49.                     selected = e.get('index'),
    50.                     point = results[selected].geometry.getCoordinates();
    51.  
    52.                 calculator.setStartPoint(point);
    53.             })
    54.                 .add('load', function (event) {
    55.                     // По полю skip определяем, что это не дозагрузка данных.
    56.                     // По getRusultsCount определяем, что есть хотя бы 1 результат.
    57.                     if (!event.get('skip') && searchStartPoint.getResultsCount()) {
    58.                         searchStartPoint.showResult(0);
    59.                     }
    60.                 });
    61.  
    62.             searchFinishPoint.events.add('resultselect', function (e) {
    63.                 var results = searchFinishPoint.getResultsArray(),
    64.                     selected = e.get('index'),
    65.                     point = results[selected].geometry.getCoordinates();
    66.  
    67.                 calculator.setFinishPoint(point);
    68.             })
    69.                 .add('load', function (event) {
    70.                     // По полю skip определяем, что это не дозагрузка данных.
    71.                     // По getRusultsCount определяем, что есть хотя бы 1 результат.
    72.                     if (!event.get('skip') && searchFinishPoint.getResultsCount()) {
    73.                         searchFinishPoint.showResult(0);
    74.                     }
    75.                 });
    76.         }
    77.  
    78.         function DeliveryCalculator(map, finish) {
    79.             this._map = map;
    80.             this._start = null;
    81.             this._route = null;
    82.  
    83.             map.events.add('click', this._onClick, this);
    84.         }
    85.  
    86.         var ptp = DeliveryCalculator.prototype;
    87.  
    88.         ptp._onClick= function (e) {
    89.             if (this._start) {
    90.                 this.setFinishPoint(e.get('coords'));
    91.             } else {
    92.                 this.setStartPoint(e.get('coords'));
    93.             }
    94.         };
    95.  
    96.         ptp._onDragEnd = function (e) {
    97.             this.getDirection();
    98.         }
    99.  
    100.         ptp.getDirection = function () {
    101.             if(this._route) {
    102.                 this._map.geoObjects.remove(this._route);
    103.             }
    104.  
    105.             if (this._start && this._finish) {
    106.                 var self = this,
    107.                     start = this._start.geometry.getCoordinates(),
    108.                     finish = this._finish.geometry.getCoordinates();
    109.  
    110.                 ymaps.geocode(start, { results: 1 })
    111.                     .then(function (geocode) {
    112.                         var address = geocode.geoObjects.get(0) &&
    113.                             geocode.geoObjects.get(0).properties.get('balloonContentBody') || '';
    114.  
    115.                         ymaps.route([start, finish])
    116.                             .then(function (router) {
    117.                                 var distance = Math.round(router.getLength() / 1000),
    118.                                     message = '<span>Расстояние: ' + distance + 'км.</span><br/>' +
    119.                                         '<span style="font-weight: bold; font-style: italic">Стоимость доставки: %sр.</span>';
    120.  
    121.                                 self._route = router.getPaths();
    122.  
    123.                                 self._route.options.set({ strokeWidth: 5, strokeColor: '0000ffff', opacity: .5 });
    124.                                 self._map.geoObjects.add(self._route);
    125.                                 self._start.properties.set('balloonContentBody', address + message.replace('%s', self.calculate(distance)));
    126.  
    127.                             });
    128.                     });
    129.                 self._map.setBounds(self._map.geoObjects.getBounds())
    130.             }
    131.         };
    132.  
    133.         ptp.setStartPoint = function (position) {
    134.             if(this._start) {
    135.                 this._start.geometry.setCoordinates(position);
    136.             }
    137.             else {
    138.                 this._start = new ymaps.Placemark(position, { iconContent: 'А' }, { draggable: true });
    139.                 this._start.events.add('dragend', this._onDragEnd, this);
    140.                 this._map.geoObjects.add(this._start);
    141.             }
    142.             if (this._finish) {
    143.                 this.getDirection();
    144.             }
    145.         };
    146.  
    147.         ptp.setFinishPoint = function (position) {
    148.             if(this._finish) {
    149.                 this._finish.geometry.setCoordinates(position);
    150.             }
    151.             else {
    152.                 this._finish = new ymaps.Placemark(position, { iconContent: 'Б' }, { draggable: true });
    153.                 this._finish.events.add('dragend', this._onDragEnd, this);
    154.                 this._map.geoObjects.add(this._finish);
    155.             }
    156.             if (this._start) {
    157.                 this.getDirection();
    158.             }
    159.         };
    160.  
    161.         ptp.calculate = function (len) {
    162.             // Константы.
    163.             var DELIVERY_TARIF = 20,
    164.                 MINIMUM_COST =  500;
    165.  
    166.             return Math.max(len * DELIVERY_TARIF, MINIMUM_COST);
    167.         };
    168.  
    169.         ymaps.ready(init);
    170.  
    171.  
    172.     </script>
    173.  
    174. <div id="map"></div>
     
  7. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Re: Мониторинг и управление грузоперевозками с отображением

    Смотрите ошибки в отладчике. По обрывкам кода сложно предсказать ошибки которые у вас возникают если не предоставляете код всей страницы или ссылку на неё.
     
  8. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Re: Передача значения переменной в php c Ymaps

    Зачем вы плодите темы в разных форумах и подфорумах этого форума?
    Вы не сможете разработать никогда серьёзное приложение если не научитесь отлаживать ошибки или хотябы искать их.
    Ответил вам в прошлой вашей теме.
     
  9. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    Re: Передача значения переменной в php c Ymaps

    Там никто не отвечал, вот я и создал новую
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Re: Передача значения переменной в php c Ymaps

    Значит вы считаете, что если вам никто не отвечает или не хочет, не знает, то нужно плодить темы?
    К тому же вы еще и разделом ошиблись. а если бы еще и глаза открыли то увидели бы сразу тему про такую точно как у вас.

    Сча. Все сбежались и помогаем быстро ему!