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 . "

"; // $distance = getDistance("Langer Kamp", "22850", "Norderstedt", "D", "124a", "Langer Kamp", "22850", "Norderstedt", "D", "1"); // echo "Distanz: " . $distance . "

"; // $distance = getDistance("Alsterdorfer Str.", "22297", "Hamburg", "D", "190", "Friedrichshulder Weg", "25469", "Halstenbek", "D", "81"); // echo "Distanz: " . $distance . "

"; // $distance = getDistancePerID(1, "124", 2, "147"); // echo "Distanz: " . $distance . "

"; // $x = getAddressFromGeoCode(52, 13); // echo "DISTANCE: "; // echo $x[0] . " " . $x[1] . " " . $x[2] . "
"; ?>