1. Import
This commit is contained in:
354
html/geo/mgobjects_onlywindows/ALRoute.inc.php
Normal file
354
html/geo/mgobjects_onlywindows/ALRoute.inc.php
Normal file
@@ -0,0 +1,354 @@
|
||||
<?
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ALRoute
|
||||
//
|
||||
// Author: Christian Mähler
|
||||
// Version: 9
|
||||
// Last update: December 2002
|
||||
//
|
||||
// Base library for map&guide routing functionalty
|
||||
//
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
//++++++++++ INCLUDE ++++++++++++++++++++++++++//"
|
||||
@include_once(dirname(__FILE__)."/ALBasic.inc.php");
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++//"
|
||||
|
||||
class ALRoute extends ALBasic
|
||||
{
|
||||
// public variables for reading and writing data
|
||||
|
||||
var $RouteStation; // adding stations to the routing request
|
||||
// NOTE: use BfAddParam to add STATION<x>
|
||||
// to the request
|
||||
var $RouteInfo; // show routing list?
|
||||
var $AddToMap; // add address layer to map?
|
||||
var $ParaTargetMap; // show map of target area?
|
||||
var $ParaTargetBorder; // radius for target map
|
||||
var $RouteNodeLevel; // not longer supported
|
||||
var $RouteDetailLimit; // not longer supported
|
||||
var $FixHour; // hour to arrive/depart
|
||||
var $FixMinute; // minute to arrive/depart
|
||||
var $RouteAdvancedField; // add aadditional parameters to the request
|
||||
// NOTE: please use the BFAddParam statement
|
||||
// instead, because RouteAdvancedField is a very
|
||||
// old way of adding parameter
|
||||
var $RouteResponse; // answer of routing object
|
||||
var $RouteScan; // array of three address layer to scan
|
||||
var $Vehiclename; // choose vehiclename
|
||||
var $DistanceAsMile; // get distance in miles? if yes, recalculate values
|
||||
var $RouteDistance; // distance of route computed
|
||||
var $RouteTime; // time of route computed
|
||||
var $RowCount; // number of route list entries
|
||||
|
||||
// private variables for internal route object usage
|
||||
|
||||
var $numRowBeginTCP; // for function ReadRow() used ans set in GetRowCount()
|
||||
var $numRowBeginBC; // for function ReadRow() used and set in GetRowCount()
|
||||
var $row; // content of current row, sparated by "|"
|
||||
var $rowPrio; // priority of currently selected row
|
||||
var $Result; // result of route object
|
||||
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ALRoute - Constructor
|
||||
// set default parameters to object
|
||||
|
||||
function ALRoute()
|
||||
{
|
||||
$this->ALBasic();
|
||||
$this->NR_ROUTEREQUEST=3; // base number for server ACTION
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// GetRowBegin
|
||||
// get base element for "node" from answer file ANS
|
||||
|
||||
function GetRowBegin()
|
||||
{
|
||||
for ($i=0; $i<=count($this->BPTCPAnswer["ANS"]);$i++)
|
||||
{
|
||||
$search = explode("~", $this->BPTCPAnswer["ANS"][$i]);
|
||||
if ($search[0] == "RESULT")
|
||||
{
|
||||
$this->numRowBeginTCP = $i-1;
|
||||
$this->Log_to_file("ALRoute.GetRowBegin: passed successfully");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
} //GetRowBegin()
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// KmToMile
|
||||
// set kilometer to mile, rounded to one decimal
|
||||
|
||||
function KmToMile($distance)
|
||||
{
|
||||
return round($distance/1.60934,1);
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// CheckRes
|
||||
// check result and set rowcount
|
||||
|
||||
function CheckRes()
|
||||
{
|
||||
// get first node
|
||||
$this->GetRowBegin();
|
||||
|
||||
// get routing distance
|
||||
$this->RouteDistance = $this->BFGetParam($this->eATAns, "SERVER", "DISTTODRIVE", 0);
|
||||
|
||||
// distance in miles?
|
||||
if ($this->DistanceAsMile)
|
||||
$this->RouteDistance = $this->KmToMile($this->RouteDistance);
|
||||
|
||||
// get driving time
|
||||
$this->RouteTime = $this->BFGetParam($this->eATAns, "SERVER", "TIMETODRIVE", 0);
|
||||
|
||||
// check whether station passed to server were geocoded
|
||||
// that means, that COR section has additional information
|
||||
|
||||
$i = 1;
|
||||
$erg = $this->BFGetParam($this->eATCor, "VORSCHLAG".$i , "NUMDATA", "");
|
||||
|
||||
// check every station in COR section if applicable
|
||||
while ($erg!="")
|
||||
{
|
||||
if ($erg<1)
|
||||
{
|
||||
$this->RouteResponse .= "Warning: Station" . $i . " could not be found <br>";
|
||||
$this->Log_to_file("ALRoute.CheckRes: Station passed for geocoding wasn't found");
|
||||
return $this->BPRouteStat_NoLocFound;
|
||||
}
|
||||
$i++;
|
||||
$erg = $this->BFGetParam($this->eATCor, "VORSCHLAG".$i , "NUMDATA", "");
|
||||
}
|
||||
|
||||
// check error messages from server
|
||||
$erg = $this->BFGetParam($this->eATAns, "SERVER" , "ERROR1", "");
|
||||
if ($erg != "")
|
||||
{
|
||||
$this->RouteResponse = "Error: Error while routing";
|
||||
$this->Log_to_file("ALRoute.CheckRes: Error while Routing: " . $erg);
|
||||
return $this->BPStat_PropriError;
|
||||
}
|
||||
|
||||
// take care of NodeLevel and DetailLimit
|
||||
// new result array is computed by checking every entry for concerning parameter
|
||||
// NOTE: if you are using BFGetParam to read the single route list entries,
|
||||
// the following commands can be ignored. In this case, RouteDetailLimit and
|
||||
// NodeLevel have no effect on thee request/answer
|
||||
|
||||
$answer = $this->BPTCPAnswer;
|
||||
$split = "~";
|
||||
$begin = $this->numRowBeginTCP;
|
||||
$num = 2;
|
||||
|
||||
$ArraySize = count($answer["ANS"]);
|
||||
$ArraySize = $ArraySize-1; //with TCP/IP
|
||||
$elem = 0;
|
||||
|
||||
// check RouteNodeLevel and build new answer list
|
||||
for ($i = $begin+1 ; $i<$ArraySize; $i++ )
|
||||
{
|
||||
$tmp = explode($split, $answer["ANS"][$i]);
|
||||
$rowPrio = substr($tmp[$num],0,1);
|
||||
|
||||
$rowPrio = (int)$rowPrio;
|
||||
|
||||
if ($rowPrio <= $this->RouteNodeLevel)
|
||||
{
|
||||
$this->Result[$elem] = $answer["ANS"][$i];
|
||||
$elem++;
|
||||
}
|
||||
}
|
||||
|
||||
// count new number of route list entries
|
||||
$this->RowCount = count($this->Result);
|
||||
|
||||
// check RouteDetaillimit and build new answer list
|
||||
if ($this->RouteNodeLevel > 2)
|
||||
if ( count($this->Result) > $this->RouteDetailLimit )
|
||||
{
|
||||
$elem = 0;
|
||||
for ($i = 0; $i<count($this->Result);$i++)
|
||||
{
|
||||
$tmp = explode($split, $this->Result[$i]);
|
||||
$rowPrio = substr($tmp[$num] ,0,1);
|
||||
|
||||
if ($rowPrio < 3 )
|
||||
{
|
||||
$this->ResultDetail[$elem] = $this->Result[$i];
|
||||
$elem++;
|
||||
}
|
||||
} // end for
|
||||
$this->RowCount = count($this->ResultDetail);
|
||||
}
|
||||
|
||||
$this->Log_to_file("ALRoute.CheckRes: Passed successfully");
|
||||
|
||||
return $this->BPStat_Success;
|
||||
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// RouteLogicalRect
|
||||
// return RouteLogicalRect
|
||||
|
||||
function RouteLogicalRect()
|
||||
{
|
||||
return $this->BFGetParam($this->eATAns, "SERVER","LOGICALRECT","");
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// TargetLogicalRect
|
||||
// return TargetLogicalRect
|
||||
|
||||
function TargetLogicalRect()
|
||||
{
|
||||
return $this->BFGetParam($this->eATAns, "SERVER","LOGICALTARGETRECT","");
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ReadRow
|
||||
// read next row of station list
|
||||
// NOTE: please use BFGetParam instead for reading every single line
|
||||
// of the route info, because this is an old function
|
||||
|
||||
function ReadRow($numRow)
|
||||
{
|
||||
if (($this->RouteNodeLevel > 2) and (count($this->Result) > $this->RouteDetailLimit))
|
||||
$tmp = explode("~", $this->ResultDetail[$numRow] );
|
||||
else
|
||||
$tmp = explode("~", $this->Result[$numRow] );
|
||||
|
||||
$this->row = $tmp[2];
|
||||
$this->Log_to_file("ALRoute.ReadRow: Passed successfully. RowNumber: " . $numRow);
|
||||
return substr($tmp[2],0,1);
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// FieldValue
|
||||
// return a fieldvalue of the row read by ReadRow; first column is 0
|
||||
// NOTE: please use BFGetParam instead for reading every single line
|
||||
// of the route info, because this is an old function
|
||||
|
||||
function FieldValue($fieldNum)
|
||||
{
|
||||
$tmp = explode("|", $this->row);
|
||||
$this->Log_to_file("ALRoute.FieldValue: Passed successfully. FieldNum: " . $fieldNum);
|
||||
if ($fieldNum == 2 && $this->DistanceAsMile)
|
||||
return round($this->KmToMile($tmp[$fieldNum-1]), 1);
|
||||
return $tmp[$fieldNum-1];
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// SetOrder
|
||||
// build server request according to parameter set by user
|
||||
|
||||
function SetOrder()
|
||||
{
|
||||
$this->BPRequest["SERVER"]["ACTION"] = 3;
|
||||
$this->BPRequest["CLIENT"]["REQUEST"] = "TRUE";
|
||||
$this->BPRequest["CLIENT"]["MAPSBYSTREAM"] = (($this->BPMapsByStream) ? "TRUE" : "FALSE");
|
||||
|
||||
// add every single station set to RouteStation array
|
||||
// NOTE: if you are using BFAddParam to add the STATION<x>, this loop
|
||||
// will be ignored
|
||||
|
||||
for ($i=1; $i<=count($this->RouteStation); $i++)
|
||||
if (!empty($this->RouteStation[$i]))
|
||||
$this->BPRequest["CLIENT"]["STATION" . $i] = $this->RouteStation[$i];
|
||||
|
||||
if (isset($this->RouteInfo))
|
||||
$this->BPRequest["CLIENT"]["ROUTEINFO"] = (($this->RouteInfo) ? "true" : "false");
|
||||
if (isset($this->AddToMap))
|
||||
$this->BPRequest["CLIENT"]["ADDTOMAP"] = (($this->AddToMap) ? "true" : "false");
|
||||
if (isset($this->ParaTargetMap))
|
||||
$this->BPRequest["CLIENT"]["TARGETMAP"] = (($this->ParaTargetMap) ? "true" : "false");
|
||||
if (!empty($this->ParaTargetBorder))
|
||||
$this->BPRequest["CLIENT"]["TARGETBORDER"] = $this->ParaTargetBorder;
|
||||
if (!empty($this->FixHour))
|
||||
$this->BPRequest["CLIENT"]["FIXHOUR"] = $this->FixHour;
|
||||
if (!empty($this->FixMinute))
|
||||
$this->BPRequest["CLIENT"]["FIXMINUTE"] = $this->FixMinute;
|
||||
if (!empty($this->VEHICLENAME))
|
||||
$this->BPRequest["CLIENT"]["VEHICLENAME"] = $this->Vehiclename;
|
||||
|
||||
// set advancedfield parameter if applicable
|
||||
// NOTE: if you are using BFAddParam to add single
|
||||
// parameters to the request, this loop can be ignored
|
||||
/*
|
||||
for ($i=0; $i<count($this->RouteAdvancedField); $i++)
|
||||
if (!empty($this->RouteAdvancedField[$i]))
|
||||
{
|
||||
$arr = explode("=", $this->RouteAdvancedField[$i]);
|
||||
$this->BPRequest["CLIENT"][$arr[0]]= $arr[1];
|
||||
}
|
||||
*/
|
||||
// set scan parameter if applicable
|
||||
// NOTE: if you are using BFAddParam to add single
|
||||
// parameters to the request, this loop can be ignored
|
||||
|
||||
if (!empty($this->RouteScan[1]))
|
||||
for ($i = 1; $i<=3; $i++)
|
||||
{
|
||||
$scan = "SCAN". $i;
|
||||
if (!empty($this->RouteScan[$i]))
|
||||
$this->BPRequest["CLIENT"][$scan] = $this->RouteScan[$i];
|
||||
}
|
||||
|
||||
$this->Log_to_file("ALRoute.SetOrder: Passed successfully. ");
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// RouteRequest
|
||||
// Performs Request
|
||||
|
||||
function RouteRequest($indicator)
|
||||
{
|
||||
if ($indicator=="")
|
||||
$rnr=$this->NR_ROUTEREQUEST;
|
||||
else
|
||||
$rnr=$this->NR_ROUTEREQUEST_ROUTEID;
|
||||
|
||||
// check param
|
||||
if ($this->BPStat_Error == $this->BFCheckParam($rnr) || ($this->BPMapsByStream && $this->BPStreamDirectory==''))
|
||||
{
|
||||
$this->Log_to_file("ALRoute.RouteRequest: Too less parameters ");
|
||||
return $this->BPStat_Error;
|
||||
}
|
||||
|
||||
// set request type
|
||||
$this->SetOrder();
|
||||
|
||||
// build request
|
||||
$request = $this->BFBuildOrder();
|
||||
|
||||
// send request
|
||||
$answerlength=$this->BFWriteOrder($request);
|
||||
|
||||
if ($answerlength>45)
|
||||
{
|
||||
// receive answer
|
||||
$this->BFReadALSAnswer($rnr);
|
||||
// return result code
|
||||
return $this->CheckRes();
|
||||
}
|
||||
else
|
||||
return $this->BPStat_Error;
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// CorridorRequest
|
||||
// same as RouetRequest, but with additional parameters
|
||||
|
||||
function CorridorRequest()
|
||||
{
|
||||
return $this->RouteRequest();
|
||||
}
|
||||
|
||||
}//class
|
||||
|
||||
|
||||
Reference in New Issue
Block a user