Здравствуйте, стоит задача создать систему мониторинга и управления грузоперевозками с отображением ГИС. Например создается БД в 10 машин(можно и больше) с разной грузоподьёмностью(каждая машина - запись в таблице), так вот нужно найти наиболее близкую машину со свободным местом и которая едет по наиболее похожему маршруту или которая может по срокам сделать крюк. Со стороны пользователя он должен: тыкнуть на карте на одну точку (начальный город) и на вторую (конечный) и ввести вес его груза, а система должна рассчитать и подобрать удобный для него вариант (что-то типа такого). Подскажите как реализовать это все (думаю использовать php)? И еще думаю как-то привязать это все к карте (думаю использовать api яндекс карт), нужно как-то подтягивать данные с БД в api Ymaps, может кто-то знает как такое делать?
Re: Мониторинг и управление грузоперевозками с отображением в двух словах это не описать. поиск оптимального пути, ближайшего транспорта либо самому считать(теория графов) либо юзать какойто готовый софт. приклеить к гуглокартам или якартам непроблема. в общем начните делать по шагам. будут конкретные вопросы - подскажем может.
Re: Мониторинг и управление грузоперевозками с отображением В api карт, насколько я знаю, есть поиск оптимального пути, к нему можно привязаться?
Re: Мониторинг и управление грузоперевозками с отображением Тов. Dark19, Вы не запрашиваете создание какого-то скрипта, речь у вас идёт о разработке полноценной логистической системы, даже функциональный запрос на которую (не говоря о техническом задании на разработку) невозможно описать в 7 строках поста. Для того, чтобы иметь шанс "это всё" реализовать, для начала необходимо четко сформулировать цели и функции системы из которых получится выделить отдельные задачи, которые, в свою очередь, система будет решать. Только после этого можно переходить к подготовке описательного технического задания где будут выявлены сообразно с задачами технологии, сервисы, по и железо и другие неотъемлимые составляющие разработки подобной системы. Ваша ошибка в том, что вы привязываетесь к фронтенду, ошибочно полагая что основное о чем стоит задумываться в реализации подобных систем связано с визуальным отображением маршрутов и автомобилей на графической карте. Так вот, в системе указанная составляющая будет одной из самых тривиальных в реализации. А как только вы составите полноценный функциональный запрос, в ходе фомирования требований к системе сразу всплывут вопросы, которые вас приведут к постановке задач по решению таких проблем, как: отслеживание местоположения и gsm-модули и контроллеры для транспортных средств; отслеживание и передача данных о состояннии тс, в особенности уровня горючего в топливном баке; обратная связь с водителем и контрагентами в рамках системы; интеграция с собственным складом и складами контрагентов по маршруту и автоматизация учета загруженности автомобилей; И т.д. и т.п.
Re: Мониторинг и управление грузоперевозками с отображением подскажите как мне передать переменные distance и address в php код с js кода(Ymaps api) без перезагрузки страницы? Когда делаю вот так: Код (Text): $.ajax({ url: "http://geo/index.php", type : "GET", data : ({distance:distance}), success: function (responseText) { alert(responseText); } то карта не загружается Вот код Ymaps: Код (Text): <!-- Если вы используете API локально, то в URL ресурса необходимо указывать протокол в стандартном виде (http://...)--> <script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script> <style> html, body, #map { width: 100%; height: 100%; padding: 0; margin: 0; } </style> <script type="text/javascript"> function init() { var myMap = new ymaps.Map('map', { center: [50.340512, 30.534661], zoom: 10, type: 'yandex#map', behaviors: ['scrollZoom', 'drag'], controls: [] }), searchStartPoint = new ymaps.control.SearchControl({ options: { useMapBounds: true, noPlacemark: true, noPopup: true, placeholderContent: 'Адрес начальной точки', size: 'large' } }), searchFinishPoint = new ymaps.control.SearchControl({ options: { useMapBounds: true, noCentering: true, noPopup: true, noPlacemark: true, placeholderContent: 'Адрес конечной точки', size: 'large', float: 'none', position: { left: 10, top: 44 } } }), calculator = new DeliveryCalculator(myMap, myMap.getCenter()); myMap.controls.add(searchStartPoint); myMap.controls.add(searchFinishPoint); searchStartPoint.events.add('resultselect', function (e) { var results = searchStartPoint.getResultsArray(), selected = e.get('index'), point = results[selected].geometry.getCoordinates(); calculator.setStartPoint(point); }) .add('load', function (event) { // По полю skip определяем, что это не дозагрузка данных. // По getRusultsCount определяем, что есть хотя бы 1 результат. if (!event.get('skip') && searchStartPoint.getResultsCount()) { searchStartPoint.showResult(0); } }); searchFinishPoint.events.add('resultselect', function (e) { var results = searchFinishPoint.getResultsArray(), selected = e.get('index'), point = results[selected].geometry.getCoordinates(); calculator.setFinishPoint(point); }) .add('load', function (event) { // По полю skip определяем, что это не дозагрузка данных. // По getRusultsCount определяем, что есть хотя бы 1 результат. if (!event.get('skip') && searchFinishPoint.getResultsCount()) { searchFinishPoint.showResult(0); } }); } function DeliveryCalculator(map, finish) { this._map = map; this._start = null; this._route = null; map.events.add('click', this._onClick, this); } var ptp = DeliveryCalculator.prototype; ptp._onClick= function (e) { if (this._start) { this.setFinishPoint(e.get('coords')); } else { this.setStartPoint(e.get('coords')); } }; ptp._onDragEnd = function (e) { this.getDirection(); } ptp.getDirection = function () { if(this._route) { this._map.geoObjects.remove(this._route); } if (this._start && this._finish) { var self = this, start = this._start.geometry.getCoordinates(), finish = this._finish.geometry.getCoordinates(); ymaps.geocode(start, { results: 1 }) .then(function (geocode) { var address = geocode.geoObjects.get(0) && geocode.geoObjects.get(0).properties.get('balloonContentBody') || ''; ymaps.route([start, finish]) .then(function (router) { var distance = Math.round(router.getLength() / 1000), message = '<span>Расстояние: ' + distance + 'км.</span><br/>' + '<span style="font-weight: bold; font-style: italic">Стоимость доставки: %sр.</span>'; self._route = router.getPaths(); self._route.options.set({ strokeWidth: 5, strokeColor: '0000ffff', opacity: .5 }); self._map.geoObjects.add(self._route); self._start.properties.set('balloonContentBody', address + message.replace('%s', self.calculate(distance))); }); }); self._map.setBounds(self._map.geoObjects.getBounds()) } }; ptp.setStartPoint = function (position) { if(this._start) { this._start.geometry.setCoordinates(position); } else { this._start = new ymaps.Placemark(position, { iconContent: 'А' }, { draggable: true }); this._start.events.add('dragend', this._onDragEnd, this); this._map.geoObjects.add(this._start); } if (this._finish) { this.getDirection(); } }; ptp.setFinishPoint = function (position) { if(this._finish) { this._finish.geometry.setCoordinates(position); } else { this._finish = new ymaps.Placemark(position, { iconContent: 'Б' }, { draggable: true }); this._finish.events.add('dragend', this._onDragEnd, this); this._map.geoObjects.add(this._finish); } if (this._start) { this.getDirection(); } }; ptp.calculate = function (len) { // Константы. var DELIVERY_TARIF = 20, MINIMUM_COST = 500; return Math.max(len * DELIVERY_TARIF, MINIMUM_COST); }; ymaps.ready(init); </script> <div id="map"></div>
Передача значения переменной в php c Ymaps Здравствуйте, подскажите как мне передать переменные distance и address в php код с js кода(Ymaps api) без перезагрузки страницы? Когда передаю вот так: Код (Text): $.ajax({ url: "http://geo/index.php", type : "GET", data : ({distance:distance}), success: function (responseText) { alert(responseText); } то карта не загружается Вот код Ymaps: Код (Text): <!-- Если вы используете API локально, то в URL ресурса необходимо указывать протокол в стандартном виде (http://...)--> <script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script> <style> html, body, #map { width: 100%; height: 100%; padding: 0; margin: 0; } </style> <script type="text/javascript"> function init() { var myMap = new ymaps.Map('map', { center: [50.340512, 30.534661], zoom: 10, type: 'yandex#map', behaviors: ['scrollZoom', 'drag'], controls: [] }), searchStartPoint = new ymaps.control.SearchControl({ options: { useMapBounds: true, noPlacemark: true, noPopup: true, placeholderContent: 'Адрес начальной точки', size: 'large' } }), searchFinishPoint = new ymaps.control.SearchControl({ options: { useMapBounds: true, noCentering: true, noPopup: true, noPlacemark: true, placeholderContent: 'Адрес конечной точки', size: 'large', float: 'none', position: { left: 10, top: 44 } } }), calculator = new DeliveryCalculator(myMap, myMap.getCenter()); myMap.controls.add(searchStartPoint); myMap.controls.add(searchFinishPoint); searchStartPoint.events.add('resultselect', function (e) { var results = searchStartPoint.getResultsArray(), selected = e.get('index'), point = results[selected].geometry.getCoordinates(); calculator.setStartPoint(point); }) .add('load', function (event) { // По полю skip определяем, что это не дозагрузка данных. // По getRusultsCount определяем, что есть хотя бы 1 результат. if (!event.get('skip') && searchStartPoint.getResultsCount()) { searchStartPoint.showResult(0); } }); searchFinishPoint.events.add('resultselect', function (e) { var results = searchFinishPoint.getResultsArray(), selected = e.get('index'), point = results[selected].geometry.getCoordinates(); calculator.setFinishPoint(point); }) .add('load', function (event) { // По полю skip определяем, что это не дозагрузка данных. // По getRusultsCount определяем, что есть хотя бы 1 результат. if (!event.get('skip') && searchFinishPoint.getResultsCount()) { searchFinishPoint.showResult(0); } }); } function DeliveryCalculator(map, finish) { this._map = map; this._start = null; this._route = null; map.events.add('click', this._onClick, this); } var ptp = DeliveryCalculator.prototype; ptp._onClick= function (e) { if (this._start) { this.setFinishPoint(e.get('coords')); } else { this.setStartPoint(e.get('coords')); } }; ptp._onDragEnd = function (e) { this.getDirection(); } ptp.getDirection = function () { if(this._route) { this._map.geoObjects.remove(this._route); } if (this._start && this._finish) { var self = this, start = this._start.geometry.getCoordinates(), finish = this._finish.geometry.getCoordinates(); ymaps.geocode(start, { results: 1 }) .then(function (geocode) { var address = geocode.geoObjects.get(0) && geocode.geoObjects.get(0).properties.get('balloonContentBody') || ''; ymaps.route([start, finish]) .then(function (router) { var distance = Math.round(router.getLength() / 1000), message = '<span>Расстояние: ' + distance + 'км.</span><br/>' + '<span style="font-weight: bold; font-style: italic">Стоимость доставки: %sр.</span>'; self._route = router.getPaths(); self._route.options.set({ strokeWidth: 5, strokeColor: '0000ffff', opacity: .5 }); self._map.geoObjects.add(self._route); self._start.properties.set('balloonContentBody', address + message.replace('%s', self.calculate(distance))); }); }); self._map.setBounds(self._map.geoObjects.getBounds()) } }; ptp.setStartPoint = function (position) { if(this._start) { this._start.geometry.setCoordinates(position); } else { this._start = new ymaps.Placemark(position, { iconContent: 'А' }, { draggable: true }); this._start.events.add('dragend', this._onDragEnd, this); this._map.geoObjects.add(this._start); } if (this._finish) { this.getDirection(); } }; ptp.setFinishPoint = function (position) { if(this._finish) { this._finish.geometry.setCoordinates(position); } else { this._finish = new ymaps.Placemark(position, { iconContent: 'Б' }, { draggable: true }); this._finish.events.add('dragend', this._onDragEnd, this); this._map.geoObjects.add(this._finish); } if (this._start) { this.getDirection(); } }; ptp.calculate = function (len) { // Константы. var DELIVERY_TARIF = 20, MINIMUM_COST = 500; return Math.max(len * DELIVERY_TARIF, MINIMUM_COST); }; ymaps.ready(init); </script> <div id="map"></div>
Re: Мониторинг и управление грузоперевозками с отображением Смотрите ошибки в отладчике. По обрывкам кода сложно предсказать ошибки которые у вас возникают если не предоставляете код всей страницы или ссылку на неё.
Re: Передача значения переменной в php c Ymaps Зачем вы плодите темы в разных форумах и подфорумах этого форума? Вы не сможете разработать никогда серьёзное приложение если не научитесь отлаживать ошибки или хотябы искать их. Ответил вам в прошлой вашей теме.
Re: Передача значения переменной в php c Ymaps Значит вы считаете, что если вам никто не отвечает или не хочет, не знает, то нужно плодить темы? К тому же вы еще и разделом ошиблись. а если бы еще и глаза открыли то увидели бы сразу тему про такую точно как у вас. Сча. Все сбежались и помогаем быстро ему!