1. Import
This commit is contained in:
367
html/geo/distance.php
Normal file
367
html/geo/distance.php
Normal file
@@ -0,0 +1,367 @@
|
||||
<?php
|
||||
/*=======================================================================
|
||||
*
|
||||
* distance.php
|
||||
*
|
||||
* Autor: Marc Vollmann
|
||||
*
|
||||
=======================================================================*/
|
||||
|
||||
include_once ("../include/global.inc.php");
|
||||
include_once ("../include/auth.inc.php");
|
||||
|
||||
include_once('../geo/geocode.inc.php');
|
||||
|
||||
|
||||
function draw_route($target,$stationlist,&$GlobalRouteList,&$imageurl,&$imageurlT,$targetmap = false)
|
||||
{
|
||||
global $Application,$map_width,$map_height;
|
||||
|
||||
list($tcpip,$path,$requestname,$imageurl) = GetNextRequestParameter($tcpip,$path,$requestname,$imageurl2,$map,$language);
|
||||
|
||||
$RouteObject=null;
|
||||
|
||||
include_once($Application['OBJECT_BASE'].'alroute.inc.php');
|
||||
|
||||
$RouteObject = new ALRoute;
|
||||
|
||||
$RouteObject->BPUseTCPIP="TRUE";
|
||||
$RouteObject->BPMaxCalcWait=60000;
|
||||
|
||||
if ($Application["COM_LOG"])
|
||||
$RouteObject->BPLogFilePath=$Application["COM_LOG_FILE"];
|
||||
|
||||
$RouteObject->BPParaRequestFileName=$requestname;
|
||||
$RouteObject->BPMapsByStream=false;
|
||||
$RouteObject->BPStreamDirectory=$Application["MAP_PATH"];
|
||||
|
||||
// Language-Code: D=7, F=12, GB=9, I=16, E=10, NL=19, PT=22, SW=29
|
||||
$GetLanguageCode="7";
|
||||
|
||||
$RouteObject->BFAddParam("CLIENT","LANGUAGEID",$GetLanguageCode);
|
||||
|
||||
$RouteObject->BPALS=$tcpip;
|
||||
|
||||
$stationdelimiter="|";
|
||||
|
||||
$RouteObject->BFAddParam("CLIENT","STATIONDELIMITER",$stationdelimiter);
|
||||
|
||||
// $stationen=intval(count($stationlist)/3);
|
||||
// Fixed, because always "start" and "finish"
|
||||
$stationen=2;
|
||||
|
||||
for ($i=1; $i<=$stationen; $i=$i+1)
|
||||
$RouteObject->BFAddParam("CLIENT","STATION" . $i, "COORDINATES" . $stationdelimiter . $stationlist["x" . $i] . $stationdelimiter . $stationlist["y" . $i] . $stationdelimiter . $stationlist["l" . $i]);
|
||||
|
||||
$RouteObject->RouteTableDefString="nothing";
|
||||
$RouteObject->RouteInfo=true;
|
||||
$RouteObject->RouteNodeLevel=5;
|
||||
$RouteObject->RouteDetailLimit=10000;
|
||||
$RouteObject->BFAddParam("CLIENT","PACKEDROUTELIST", "TRUE");
|
||||
$RouteObject->AddToMap=false;
|
||||
|
||||
$result=$RouteObject->RouteRequest("");
|
||||
|
||||
if ($result!=2)
|
||||
$logicalrect="0,0,0,0";
|
||||
else {
|
||||
if ($target=="")
|
||||
$logicalrect=$RouteObject->BFGetParam($RouteObject->eATAns,"SERVER","LOGICALRECT","0,0,0,0");
|
||||
else
|
||||
$logicalrect=$RouteObject->BFGetParam($RouteObject->eATAns,"SERVER","LOGICALTARGETRECT","0,0,0,0");
|
||||
|
||||
$num_objects=intval($RouteObject->BFGetParam($RouteObject->eATAns,"RESULT","NUMNODES","0"));
|
||||
$rowcount=0;
|
||||
|
||||
for ($i=1; $i<=$num_objects; $i=$i+1)
|
||||
$GlobalRouteList["NODE_".$i]=$RouteObject->BFGetParam($RouteObject->eATAns,"RESULT","NODE".$i,"nada");
|
||||
|
||||
$GlobalRouteList["DISTTODRIVE"]= $RouteObject->BFGetParam($RouteObject->eATAns,"SERVER","DISTTODRIVE","");
|
||||
$GlobalRouteList["TIMETODRIVE"]= $RouteObject->BFGetParam($RouteObject->eATAns,"SERVER","TIMETODRIVE","");
|
||||
$GlobalRouteList["COSTS"]= $RouteObject->BFGetParam($RouteObject->eATAns,"SERVER","COSTS","");
|
||||
$GlobalRouteList["ARRIVALTIME"]= $RouteObject->BFGetParam($RouteObject->eATAns,"SERVER","ARRIVALTIME","");
|
||||
$GlobalRouteList["DEPARTURETIME"]= $RouteObject->BFGetParam($RouteObject->eATAns,"SERVER","DEPARTURETIME","");
|
||||
$GlobalRouteList["ARRIVALDATE"]= $RouteObject->BFGetParam($RouteObject->eATAns,"SERVER","ARRIVALDATE","");
|
||||
$GlobalRouteList["DEPARTUREDATE"]= $RouteObject->BFGetParam($RouteObject->eATAns,"SERVER","DEPARTUREDATE","");
|
||||
$RouteObject=null;
|
||||
|
||||
return $logicalrect;
|
||||
} // error while routing
|
||||
|
||||
$RouteObject=null;
|
||||
return $logicalrect;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Inserts the distance of a specified from- and a specified to-address
|
||||
// REMARK: This function should not be called directly! Use the function "getDistance()", because
|
||||
// a specified tour (adress to address) will be checked there and if the distance does not
|
||||
// exist, the route-server would be contacted to get the data which are automatically stored
|
||||
// into the database for invoicing!
|
||||
// $adStreet1 : street of the from-address
|
||||
// $adZipcode1 : zipcode of the from-address
|
||||
// $adCity1 : city of the from-address
|
||||
// $adHsno1 : house-number of the from-address
|
||||
// $adStreet2 : street of the to-address
|
||||
// $adZipcode2 : zipcode of the to-address
|
||||
// $adCity2 : city of the to-address
|
||||
// $adHsno2 : house-number of the to-address
|
||||
function insertDistance($distance, $adStreet1, $adZipcode1, $adCity1, $adCountry1 = "DE", $adHsno1, $adStreet2, $adZipcode2, $adCity2, $adCountry2 = "DE", $adHsno2) {
|
||||
global $db, $PHP_SELF;
|
||||
|
||||
$ok = FALSE;
|
||||
|
||||
$distance = trim($distance);
|
||||
$adStreet1 = trim($adStreet1);
|
||||
$adZipcode1 = trim($adZipcode1);
|
||||
$adCity1 = trim($adCity1);
|
||||
$adCountry1 = trim($adCountry1);
|
||||
$adHsno1 = trim($adHsno1);
|
||||
$adStreet2 = trim($adStreet2);
|
||||
$adZipcode2 = trim($adZipcode2);
|
||||
$adCity2 = trim($adCity2);
|
||||
$adCountry2 = trim($adCountry2);
|
||||
$adHsno2 = trim($adHsno2);
|
||||
|
||||
if ($adStreet1 != "" && $adZipcode1 != "" && $adCity1 != "" && $adCountry1 != "" && $adHsno1 != "" &&
|
||||
$adStreet2 != "" && $adZipcode2 != "" && $adCity2 != "" && $adCountry2 != "" && $adHsno2 != "" && $distance != ""):
|
||||
|
||||
// Insert first address or get the existing address-id
|
||||
$tmpArray = insertAddress($adStreet1, $adZipcode1, $adCity1, $adCountry1);
|
||||
$adId1 = $tmpArray[0];
|
||||
|
||||
// Insert second address or get the existing address-id
|
||||
$tmpArray = insertAddress($adStreet2, $adZipcode2, $adCity2, $adCountry2);
|
||||
$adId2 = $tmpArray[0];
|
||||
|
||||
$distance = str_replace (",", ".", $distance);
|
||||
|
||||
// Insert distance
|
||||
insertStmt("distance", array("ad_id_from", $adId1, "ds_hsno_from", $adHsno1,
|
||||
"ad_id_to", $adId2, "ds_hsno_to", $adHsno2,
|
||||
"ds_distance", $distance));
|
||||
$ok = TRUE;
|
||||
endif;
|
||||
|
||||
return $ok;
|
||||
}
|
||||
|
||||
// Returns the distance of a specified from- and a specified to-address
|
||||
// $adStreet1 : street of the from-address
|
||||
// $adZipcode1 : zipcode of the from-address
|
||||
// $adCity1 : city of the from-address
|
||||
// $adHsno1 : house-number of the from-address
|
||||
// $adStreet2 : street of the to-address
|
||||
// $adZipcode2 : zipcode of the to-address
|
||||
// $adCity2 : city of the to-address
|
||||
// $adHsno2 : house-number of the to-address
|
||||
function getDistance($adStreet1, $adZipcode1, $adCity1, $adCountry1 = "DE", $adHsno1, $adStreet2, $adZipcode2, $adCity2, $adCountry2 = "DE", $adHsno2) {
|
||||
return 0;
|
||||
global $db, $PHP_SELF, $statusMessage;
|
||||
global $MGObject;
|
||||
|
||||
$distance = "";
|
||||
|
||||
$adStreet1 = trim($adStreet1);
|
||||
$adZipcode1 = trim($adZipcode1);
|
||||
$adCity1 = trim($adCity1);
|
||||
$adCountry1 = trim($adCountry1);
|
||||
$adHsno1 = trim($adHsno1);
|
||||
$adStreet2 = trim($adStreet2);
|
||||
$adZipcode2 = trim($adZipcode2);
|
||||
$adCity2 = trim($adCity2);
|
||||
$adCountry2 = trim($adCountry2);
|
||||
$adHsno2 = trim($adHsno2);
|
||||
|
||||
if ($adStreet1 != "" && $adZipcode1 != "" && $adCity1 != "" && $adCountry1 != "" && $adHsno1 != "" &&
|
||||
$adStreet2 != "" && $adZipcode2 != "" && $adCity2 != "" && $adCountry2 != "" && $adHsno2 != ""):
|
||||
|
||||
$sqlquery = "SELECT ds.ds_distance"
|
||||
. " FROM distance AS ds, address AS ad1, address AS ad2"
|
||||
. " WHERE ds.ds_hsno_from = '$adHsno1'"
|
||||
. " AND ds.ds_hsno_to = '$adHsno2'"
|
||||
. " AND ds.ad_id_from = ad1.ad_id"
|
||||
. " AND ds.ad_id_to = ad2.ad_id"
|
||||
. " AND ad1.ad_street = '$adStreet1'"
|
||||
. " AND ad1.ad_zipcode = '$adZipcode1'"
|
||||
. " AND ad1.ad_city = '$adCity1'"
|
||||
. " AND ad1.ad_country = '$adCountry1'"
|
||||
. " AND ad2.ad_street = '$adStreet2'"
|
||||
. " AND ad2.ad_zipcode = '$adZipcode2'"
|
||||
. " AND ad2.ad_city = '$adCity2'"
|
||||
. " AND ad2.ad_country = '$adCountry2'";
|
||||
|
||||
$result = $db->query($sqlquery);
|
||||
if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage());
|
||||
|
||||
if ($row = $result->fetch_assoc()):
|
||||
$distance = $row[ds_distance];
|
||||
endif;
|
||||
$result->free();
|
||||
|
||||
// if $distance = 0 then get distance-data from route-server
|
||||
// ...
|
||||
if ($distance == "") :
|
||||
|
||||
// *** START-ADDRESS ***
|
||||
|
||||
$resultType = getGeoCode($adStreet1,$adZipcode1,$adCity1,$adHsno1,$adCountry1,"");
|
||||
|
||||
// resultType == 2 -> exact match
|
||||
if ($resultType == 2) :
|
||||
|
||||
// Geo-Coordinates
|
||||
$xcoord=$MGObject->GeoCoordinateX;
|
||||
$ycoord=$MGObject->GeoCoordinateY;
|
||||
|
||||
// Check for existing entry in address (because of redundance)
|
||||
if ($xcoord == "" || $xcoord == 0 || $ycoord == "" || $ycoord == 0):
|
||||
|
||||
$statusMessage = "Die Startadresse konnte nicht geocodiert werden!";
|
||||
endif;
|
||||
|
||||
// Initialize object
|
||||
$MGObject=null;
|
||||
endif;
|
||||
|
||||
// *** FINISH-ADDRESS ***
|
||||
|
||||
$resultType = getGeoCode($adStreet2,$adZipcode2,$adCity2,$adHsno2,$adCountry2,"");
|
||||
|
||||
// resultType == 2 -> exact match
|
||||
if ($resultType == 2) :
|
||||
|
||||
// Geo-Coordinates
|
||||
$xcoord2=$MGObject->GeoCoordinateX;
|
||||
$ycoord2=$MGObject->GeoCoordinateY;
|
||||
|
||||
// Check for existing entry in address (because of redundance)
|
||||
if ($xcoord2 == "" || $xcoord2 == 0 || $ycoord2 == "" || $ycoord2 == 0):
|
||||
|
||||
$statusMessage = "Die Zieladresse konnte nicht geocodiert werden!";
|
||||
endif;
|
||||
|
||||
// Initialize object
|
||||
$MGObject=null;
|
||||
endif;
|
||||
|
||||
// *** Computation of the distance and storing into the database ***
|
||||
|
||||
if ($statusMessage == ""):
|
||||
|
||||
$stationlist["x1"]=$xcoord;
|
||||
$stationlist["y1"]=$ycoord;
|
||||
$stationlist["x2"]=$xcoord2;
|
||||
$stationlist["y2"]=$ycoord2;
|
||||
$GlobalRouteList="";
|
||||
$logicalrect=draw_route($target,$stationlist,$GlobalRouteList,$imageurl,$imageurlT);
|
||||
$distance =$GlobalRouteList["DISTTODRIVE"];
|
||||
// $drivingTime = $GlobalRouteList["TIMETODRIVE"];
|
||||
|
||||
// Insert the new distance-data from the route-server into the database for invoicing later on
|
||||
if ($distance != ""):
|
||||
insertDistance($distance, $adStreet1, $adZipcode1, $adCity1, $adCountry1, $adHsno1, $adStreet2, $adZipcode2, $adCity2, $adCountry2, $adHsno2);
|
||||
endif;
|
||||
endif;
|
||||
endif;
|
||||
endif;
|
||||
|
||||
$distance = str_replace (",", ".", $distance);
|
||||
|
||||
return $distance;
|
||||
}
|
||||
|
||||
|
||||
// Returns the distance of a specified from- and a specified to-address
|
||||
// $adId1 : ID of the from-address
|
||||
// $adHsno1 : house-number of the from-address
|
||||
// $adId2 : ID of the to-address
|
||||
// $adHsno2 : house-number of the to-address
|
||||
function getDistancePerID($adId1, $adHsno1, $adId2, $adHsno2) {
|
||||
|
||||
global $db, $PHP_SELF, $statusMessage;
|
||||
global $MGObject;
|
||||
|
||||
$distance = "";
|
||||
|
||||
$adId1 = trim($adId1);
|
||||
$adHsno1 = trim($adHsno1);
|
||||
$adId2 = trim($adId2);
|
||||
$adHsno2 = trim($adHsno2);
|
||||
|
||||
if ($adId1 != "" && $adHsno1 != "" && $adId2 != "" && $adHsno2 != ""):
|
||||
|
||||
$sqlquery = "SELECT ds.ds_distance"
|
||||
. " FROM distance AS ds"
|
||||
. " WHERE ds.ds_hsno_from = '$adHsno1'"
|
||||
. " AND ds.ds_hsno_to = '$adHsno2'"
|
||||
. " AND ds.ad_id_from = $adId1"
|
||||
. " AND ds.ad_id_to = $adId2";
|
||||
|
||||
$result = $db->query($sqlquery);
|
||||
if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage());
|
||||
|
||||
if ($row = $result->fetch_assoc()):
|
||||
$distance = $row[ds_distance];
|
||||
endif;
|
||||
$result->free();
|
||||
|
||||
// if $distance = 0 then get distance-data from route-server
|
||||
// ...
|
||||
if ($distance == "") :
|
||||
|
||||
// Check existence of the address-entries in the table "address"
|
||||
|
||||
// Check from-address
|
||||
$tmpFields = getFieldsValueFromId("address","ad_id",$adId1,array("ad_street","ad_zipcode","ad_city","ad_country"));
|
||||
$adStreet1 = $tmpFields[0];
|
||||
$adZipcode1 = $tmpFields[1];
|
||||
$adCity1 = $tmpFields[2];
|
||||
$adCountry1 = $tmpFields[3];
|
||||
|
||||
// If from-address does not exist then to-address has not to be checked
|
||||
if ($adStreet1 != "" && $adZipcode1 != "" && $adCity1 != "" && $adCountry1 != "" && $adHsno1 != ""):
|
||||
|
||||
// Check to-address
|
||||
$tmpFields = getFieldsValueFromId("address","ad_id",$adId2,array("ad_street","ad_zipcode","ad_city","ad_country"));
|
||||
$adStreet2 = $tmpFields[0];
|
||||
$adZipcode2 = $tmpFields[1];
|
||||
$adCity2 = $tmpFields[2];
|
||||
$adCountry2 = $tmpFields[3];
|
||||
endif;
|
||||
|
||||
|
||||
if ($adStreet1 != "" && $adZipcode1 != "" && $adCity1 != "" && $adCountry1 != "" && $adHsno1 != "" &&
|
||||
$adStreet2 != "" && $adZipcode2 != "" && $adCity2 != "" && $adCountry2 != "" && $adHsno2 != ""):
|
||||
|
||||
// Both addresses are existent and the distance can be computed
|
||||
$distance = getDistance($adStreet1, $adZipcode1, $adCity1, $adCountry1, $adHsno1, $adStreet2, $adZipcode2, $adCity2, $adCountry2, $adHsno2);
|
||||
endif;
|
||||
endif;
|
||||
endif;
|
||||
|
||||
$distance = str_replace (",", ".", $distance);
|
||||
|
||||
return $distance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// ACTIVATE ONLY FOR TESTING!!!
|
||||
|
||||
// $distance = getDistance("Alsterdorfer Str.", "22297", "Hamburg", "D", "190", "Am Ochsenzoll", "22851", "Norderstedt", "D", "147");
|
||||
// echo "Distanz: " . $distance . "<br><br>";
|
||||
// $distance = getDistance("Langer Kamp", "22850", "Norderstedt", "D", "124a", "Langer Kamp", "22850", "Norderstedt", "D", "1");
|
||||
// echo "Distanz: " . $distance . "<br><br>";
|
||||
// $distance = getDistance("Alsterdorfer Str.", "22297", "Hamburg", "D", "190", "Friedrichshulder Weg", "25469", "Halstenbek", "D", "81");
|
||||
// echo "Distanz: " . $distance . "<br><br>";
|
||||
// $distance = getDistancePerID(1, "124", 2, "147");
|
||||
// echo "Distanz: " . $distance . "<br><br>";
|
||||
|
||||
// $x = getAddressFromGeoCode(52, 13);
|
||||
// echo "DISTANCE: ";
|
||||
// echo $x[0] . " " . $x[1] . " " . $x[2] . "<br>";
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user