|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
namespace FTTHBundle\Controller;
|
|
|
|
|
|
+use MapBundle\Util\GeoDecode;
|
|
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
|
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
@@ -186,36 +187,6 @@ class ONUController extends Controller
|
|
|
return $response;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * Calcula la distancia cartografica (NO TOPOGRAFICA) entre 2 coordenadas.
|
|
|
- * @param $lat1
|
|
|
- * @param $lng1
|
|
|
- * @param $lat2
|
|
|
- * @param $lng2
|
|
|
- * @param bool $km Me dice si quiero la distancia en kilometros. Por defecto esta en metros.
|
|
|
- * @return float|int Retorna la distancia en metros
|
|
|
- */
|
|
|
- private function distanceGeoPoints($lat1, $lng1, $lat2, $lng2, $km = false)
|
|
|
- {
|
|
|
- // curvatura de la tierra
|
|
|
- $earthRadius = 3958.75;
|
|
|
-
|
|
|
- $dLat = deg2rad($lat2 - $lat1);
|
|
|
- $dLng = deg2rad($lng2 - $lng1);
|
|
|
-
|
|
|
- $a = sin($dLat / 2) * sin($dLat / 2) +
|
|
|
- cos(deg2rad($lat1)) * cos(deg2rad($lat2)) *
|
|
|
- sin($dLng / 2) * sin($dLng / 2);
|
|
|
- $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
|
|
|
- $dist = $earthRadius * $c;
|
|
|
-
|
|
|
- // from miles
|
|
|
- $meterConversion = 1609;
|
|
|
- $geopointDistance = $dist * $meterConversion;
|
|
|
- // divido por 1000 para pasarlo de metros a kilometros
|
|
|
- return round(($km ? ($geopointDistance / 1000) : $geopointDistance), 3, PHP_ROUND_HALF_UP);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* Calcula la distancia de los NAP al punto pasado.
|
|
|
* @param $lat
|
|
@@ -231,30 +202,42 @@ class ONUController extends Controller
|
|
|
$query = $qb->select('n')
|
|
|
->from(NAP::class, 'n');
|
|
|
$napsQuery = $query->getQuery()->execute();
|
|
|
+ $geodecode = new GeoDecode();
|
|
|
foreach ($napsQuery as $nap) {
|
|
|
- $extraData = $nap->getExtraData();
|
|
|
- if ($extraData) {
|
|
|
- $extraData = json_decode($extraData, true);
|
|
|
+ if ($nap->getExtraData() != null) {
|
|
|
$nap->setContainer($this->container);
|
|
|
- if (isset($extraData['lat']) && isset($extraData['lng'])) {
|
|
|
- $distance = $this->distanceGeoPoints($lat, $lng, $extraData['lat'], $extraData['lng'], true);
|
|
|
+ $dataNap = [
|
|
|
+ 'id' => $nap->getId(),
|
|
|
+ 'name' => $nap->getName(),
|
|
|
+ 'distance' => -1,
|
|
|
+ 'freePort' => $nap->getFreePort(),
|
|
|
+ 'address' => '',
|
|
|
+ 'olt' => ($nap->getOlt() != null ? $nap->getOlt()->getName() : "SIN OLT"),
|
|
|
+ 'slot' => $nap->getSlot(),
|
|
|
+ 'link' => $nap->getLink()
|
|
|
+ ];
|
|
|
+ if ($nap->getlat() != null && $nap->getlng() != null) {
|
|
|
+ $distance = $geodecode->distanceGeoPoints($lat, $lng, $nap->getlat(), $nap->getlng(), true);
|
|
|
if ($this->container->hasParameter('onu.distance.nap')) {
|
|
|
if ($this->container->getParameter('onu.distance.nap') >= $distance ||
|
|
|
$napId == $nap->getId()) {
|
|
|
// controlo la distancia y el codigo de nap
|
|
|
- $naps[$nap->getId()] = ['id' => $nap->getId(), 'name' => $nap->getName(), 'distance' => $distance, 'freePort' => $nap->getFreePort(), 'address' => $extraData['Address'], 'slot' => $extraData['slot'], 'link' => $extraData['link']];
|
|
|
+ $dataNap['distance'] = $distance;
|
|
|
+ $dataNap['address'] = $nap->getAddress();
|
|
|
+ $naps[$nap->getId()] = $dataNap;
|
|
|
}
|
|
|
} else {
|
|
|
if ($napId == $nap->getId()) {
|
|
|
// si el codigo de napId coincide tengo que cargar la nap
|
|
|
- $naps[$nap->getId()] = ['id' => $nap->getId(), 'name' => $nap->getName(), 'distance' => $distance, 'freePort' => $nap->getFreePort(), 'address' => $extraData['Address'], 'slot' => $extraData['slot'], 'link' => $extraData['link']];
|
|
|
+ $dataNap['distance'] = $distance;
|
|
|
+ $dataNap['address'] = $nap->getAddress();
|
|
|
+ $naps[$nap->getId()] = $dataNap;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
} else {
|
|
|
if ($napId == $nap->getId()) {
|
|
|
// si el codigo de napId coincide tengo que cargar la nap
|
|
|
- $naps[$nap->getId()] = ['id' => $nap->getId(), 'name' => $nap->getName(), 'distance' => -1, 'freePort' => $nap->getFreePort(), 'address' => '', 'slot' => $extraData['slot'], 'link' => $extraData['link']];
|
|
|
+ $naps[$nap->getId()] = $dataNap;
|
|
|
}
|
|
|
}
|
|
|
}
|