- Автомобилен калкулатор за изчисляване на от А до Б
WT форуми -> PHP MySQL ASP.NET -> Автомобилен калкулатор за изчисляване на от А до Б
Създайте нова тема Напишете отговор 
Автор Съобщение
emcuemnecu
Редовен
Редовен

Регистриран на: 28/07/2007 6:15 pm

Support: 14
Bonus: 25
Мнения: 1766
Мнение 24/05/2013 7:48 am     Автомобилен калкулатор за изчисляване на от А до Б Отговорете с цитат


Здравейте.. Някой може ли да ми помогне за направата на скрипт, който да изчислява разстоянието от град до град и колко гориво ще изразходи ако цената е 2.60 за литър и му харчи примерно 8 на 100?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
Hous
Активен
Активен

Регистриран на: 22/03/2008 11:19 pm

Support: 111
Bonus: 213
Мнения: 2538
Мнение 24/05/2013 8:23 am     Re: Автомобилен калкулатор за изчисляване на от А до Б Отговорете с цитат


emcuemnecu написа:
Здравейте.. Някой може ли да ми помогне за направата на скрипт, който да изчислява разстоянието от град до град и колко гориво ще изразходи ако цената е 2.60 за литър и му харчи примерно 8 на 100?

Ам... как ще разбираш разстаоянието до градовете не знам...
Иначе ако го имаш записано някаде и някой избере
Пловдив-Бургас = 300км

Вивеждаш в една кутийка че колата му харчи 10 за 100км ( въвежда се от потребителя)

взимаш я тази стойност ,делиш я на 100(за 100км) в нашия случай 10/100 = 0.1 и умножаваш по разстоянието (в нашия случай = 300)
0.1*300=30литра

след като получиш колко литра са , просто ги умножи по цената нa горивото в твоя случай 2.6
30*2.6=78


edit:За км-итре между градовете виж:ТУК
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
index
Man of HiTech

Регистриран на: 08/09/2006 1:08 am

Support: 198
Bonus: 345
Мнения: 5392
Мнение 24/05/2013 8:07 pm      Отговорете с цитат


Това ще ти помогне много.
http://architects.dzone.com/articles/algorithm-week-prims-minimum
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
emcuemnecu
Редовен
Редовен

Регистриран на: 28/07/2007 6:15 pm

Support: 14
Bonus: 25
Мнения: 1766
Мнение 25/05/2013 1:31 pm      Отговорете с цитат


Няма ли някой код, готов за употреба ?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
exec
Активен
Активен

Регистриран на: 03/12/2010 7:49 pm

Support: 132
Bonus: 263
Мнения: 581
Мнение 25/05/2013 8:41 pm      Отговорете с цитат


Основния проблем в случая е да се определи разстоянието между началната и крайната точка. И то не просто разстоянието между две точки на картата, а разстоянието по пътищата между двете точки. Вариантите за това са няколко:

1. Потребителя сам въвежда разстоянието. Едва ли искаш това.

2. Ти разполагаш от някъде с някакъв огромен списък с възможни начални и крайни точки, да кажем само между по-големите градове в България. Едва ли го имаш.

3. Да използваш услуга като Google Maps, и по-точно DistanceMatrix API. В този случай обаче задължително трябва да показваш картата на Гугъл, иначе нямаш право да използваш услугата.

Ето тук има един вариант на Javascript. Би могло да се направи и решение на РНР чрез Google Maps API Web Services - The Google Distance Matrix API
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
exec
Активен
Активен

Регистриран на: 03/12/2010 7:49 pm

Support: 132
Bonus: 263
Мнения: 581
Мнение 26/05/2013 12:53 am      Отговорете с цитат


PHP code:

<?php
/**
* Калкулация на маршрут
*
* При зададени параметри за разходна норма, цена на горивото, начална и крайна точка,
* остойностява разхода и предоставя допълнителна информация за маршрута.
*
* Използва {@link https://developers.google.com/maps/documentation/distancematrix/ Google Distance Matrix API}
* за изчисляване на разстоянието.
*/
class RouteCaclulator
{
public $base_url = 'http://maps.googleapis.com/maps/api/distancematrix/json';
public $sensor = false;
public $mode = 'driving';
public $language = 'BG';
public $region = 'BG';

/**
* Адрес на началната точка на маршрута
* @var string
*/
private $origin;

/**
* Адрес на крайната точка на маршрута
* @var string
*/
private $destination;

/**
* Разходна норма в литри на сто километра
* @var decimal
*/
private $fuel_rate;

/**
* Цена на горивото в лева за литър
* @var decimal
*/
private $fuel_price;

/**
* Отговора, който получаваме от Google Distance Matrix API
* @var string JSON-encoded обект
*/
private $_response;

/**
* Съобщение за грешка, когато не е въведена разходна норма
*/
const ERROR_NO_FUEL_RATE = 'Въведете разходна норма в литри на 100 км.';

/**
* Съобщение за грешка, когато не е въведена цена на горивото
*/
const ERROR_NO_FUEL_PRICE = 'Въведете цена на горивото в лева за 1 литър';

/**
* HTTP GET request
*
* Изключително елементарен вариант на HTTP GET заявка към Google Distance Matrix API.
* Необходимо е allow_url_fopen да бъде true
*
* @throws Exception
* @return RouteCalculator
*/
public function get()
{
//Създаване на пълния URL за заявката
$full_url = $this->_build_request_url();

//Изпращане на заявката и прочитане на отговора
$response = file_get_contents($full_url);

//Трансформиране на отговора от JSON-encoded string към обект
$this->_response = json_decode($response);

//В случай на грешка - throws exception
if($this->_response->status != 'OK'){
throw new Exception($this->_response->status);
}

return $this;
}

/**
* Калкулира цената на маршрута
*
* Метода работи само при наличен валиден отговор от
* Google Distance Matrix API и валидни данни за
* разхода и цената на гориво.
*
* @return string Цена на маршрута във формат "ЛВ.СТ"
*/
public function calculatePrice()
{
if($this->_response && $this->_validFuelData())
{
return number_format(
round(($this->_response->rows[0]->elements[0]->distance->value/1000/100) * $this->fuel_rate * $this->fuel_price, 2),
2
);
}
}

/**
* Дистанция
*
* Стойноста на дистанцията между началната и крайната
* точки, използвана при калкулирането на цената на маршрута.
*
* @return decimal
*/
public function getDistance()
{
if($this->_response)
{
return $this->_response->rows[0]->elements[0]->distance->value/1000;
}
}

public function setOrigin($name)
{
$this->origin = $this->_filterCity($name);
return $this;
}

public function setDestination($name)
{
$this->destination = $this->_filterCity($name);
return $this;
}

public function setFuelRate($fuel_rate)
{
$this->fuel_rate = $this->_filterDigit($fuel_rate);
return $this;
}

public function setFuelPrice($fuel_price)
{
$this->fuel_price = $this->_filterDigit($fuel_price);
return $this;
}

private function _build_request_url()
{

$this->destination = $this->_filterCity($this->destination);

return $this->base_url.'?sensor='.var_export($this->sensor, true).'&'
.'origins='.urlencode($this->origin).'&'
.'destinations='.urlencode($this->destination).'&'
.'mode='.$this->mode.'&'
.'language='.$this->language.'&'
.'region='.$this->region;
}

private function _validFuelData()
{
if(empty($this->fuel_rate))
{
throw new Exception(self::ERROR_NO_FUEL_RATE);
}
elseif(empty($this->fuel_price))
{
throw new Exception(self::ERROR_NO_FUEL_PRICE);
}else{
return true;
}

}

private function _filterCity($name)
{
if(strstr($name, ',') !== false){
$name = array_shift(explode(',', $name));
}

return $name;
}

private function _filterDigit($num)
{
if(preg_match('/^(\d+)\,(\d+)$/', $num)){
$num = preg_replace('/,/', '.', $num);
}

return $num;
}
}

if($_SERVER['REQUEST_METHOD'] == 'POST'){

$route = new RouteCaclulator();
$route->setOrigin($_POST['origin'])
->setDestination($_POST['destination'])
->setFuelRate($_POST['fuel_rate'])
->setFuelPrice($_POST['fuel_price']);

try{
$route->get();
$price = $route->calculatePrice();
$distance = $route->getDistance();

}catch(Exception $e){

$error = $e->getMessage();
}

}


?>


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Distance Matrix service</title>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script>
<script>
function initialize() {

var autocompleteOptions = {
types: ['(cities)'],
componentRestrictions: {country: 'bg'}
}

new google.maps.places.Autocomplete(
document.getElementById('origin'),
autocompleteOptions
);

new google.maps.places.Autocomplete(
document.getElementById('destination'),
autocompleteOptions
);
}
google.maps.event.addDomListener(window, 'load', initialize);

</script>

</head>
<body>
<?php if($error){ ?>
<h3><?php echo $error; ?></h3>
<?php } ?>

<form method="post">
<fieldset>

<p>
<label>Разход в литри на 100 км.</label>
<input type="text" name="fuel_rate" size="5" value="<?php echo $_POST['fuel_rate']; ?>">
</p>
<p>
<label>Цена за 1 литър:</label>
<input type="text" name="fuel_price" size="5" value="<?php echo $_POST['fuel_price']; ?>">
</p>

<p>
<label>Маршрут от:</label>
<input type="text" name="origin" id="origin" value="<?php echo $_POST['origin']; ?>">
<label> до </label>
<input type="text" name="destination" id="destination" value="<?php echo $_POST['destination']; ?>">
</p>

<p><input type="submit" value="Изчисли" /></p>

<?php if($price && $distance){ ?>
<p>Цена: <?php echo $price; ?> лв., разстояние: <?php echo $distance; ?> км.</p>
<?php } ?>

</fieldset>
</form>
</body>
</html>
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
razstojanieto
Нов
Нов

Регистриран на: 12/11/2017 2:01 pm

Support: 0
Bonus: 0
Мнения: 1
Мнение 12/11/2017 2:04 pm      Отговорете с цитат


Изчислете разстоянието тук е най-добрият пример за вас
калкулатор на разстоянията, които видях - http://mapszoom.com/razstojanieto/
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети