/** * issue: when the neighborhood /Region/Neighborhood is pulled for neighborhoods that * have user polygons drawn but no neighborhood borders drawn, they fail */ public function testNeighborhoodsWithNoBorders() { $this->initDb(); $region = new \Whathood\Entity\Region(array('name' => 'TestRegion' . rand(0, 99999999))); $this->m()->regionMapper()->save($region); $whathoodUser = new \Whathood\Entity\WhathoodUser(array('ipAddress' => '0.0.0.0')); $neighborhood = new Neighborhood(array('id' => 1, 'name' => "MyTest" . $this->getTestName(), 'region' => $region)); $userPolygon = new UserPolygon(array('polygon' => Polygon::build(array(new LineString(array(new Point(30, 40), new Point(30, 50), new Point(40, 50), new Point(30, 40)))), 4326), 'neighborhood' => $neighborhood, 'region' => $region, 'whathoodUser' => $whathoodUser)); $this->m()->userPolygonMapper()->save($userPolygon); $this->dispatch(sprintf("/%s/%s", $region->getName(), $neighborhood->getName())); $this->assertResponseStatusCode(200); $this->assertControllerName('whathood\\controller\\neighborhood'); }
/** * take the user polygons, run a point election, and save the points in the db **/ public function buildAndSaveHeatmapPoints($user_polygons, Neighborhood $n, $grid_resolution) { $timer = Timer::start("heatmap_builder"); $electionCollection = $this->m()->pointElectionMapper()->getCollection($user_polygons, $n->getId(), $grid_resolution); $heatmap_points = $electionCollection->heatMapPointsByNeighborhood($n); if (!empty($heatmap_points)) { $this->m()->heatMapPoint()->deleteByNeighborhood($n); $this->m()->heatMapPoint()->savePoints($heatmap_points); $this->m()->heatMapPoint()->detach($heatmap_points); $this->infoLog(sprintf("saved %s heatmap points from %s points elapsed=%s", count($heatmap_points), count($electionCollection->getPointElections()), $timer->elapsedReadableString())); } else { $this->infoLog("\t\tno heatmap_points generated to save"); } return $heatmap_points; }
/** * * @param \Whathood\Entity\Neighborhood $testNeighborhood * @param \Whathood\Entity\Region $testRegion * @param type $sideLength * @return null|\Whathood\Entity\HeatMap * @throws \InvalidArgumentException */ public function getLatestHeatMap(Neighborhood $testNeighborhood, Region $testRegion, $sideLength) { if (empty($sideLength)) { throw new \InvalidArgumentException('sidLength may not be null'); } $testNeighborhoodName = $testNeighborhood->getName(); $testRegionName = $testRegion->getName(); $neighborhoodPolygons = $this->neighborhoodPolygonMapper()->getNeighborhoodByName($testNeighborhoodName, $testRegionName); $testPoints = $this->getBoundarySquare($neighborhoodPolygons)->getTestPoints($sideLength); $heatMapPoints = $this->getHeatMapPoints($testPoints, $testNeighborhoodName); if (count($heatMapPoints) > 0) { return new HeatMap(array('neighborhood' => $testNeighborhood, 'region' => $testRegion, 'heatMapPoints' => $heatMapPoints, 'neighborhoodPolygons' => new ArrayCollection($neighborhoodPolygons))); } else { return null; } }
public function save(NeighborhoodEntity $neighborhood) { if ($neighborhood->getName() == null) { throw new \InvalidArgumentException("neighborhood.name may" . " not be null"); } /* * does the region already exist, if it does reset it in the neighborhood */ try { $region = $this->regionMapper()->getRegionByName($neighborhood->getRegion()->getName()); $neighborhood->setRegion($region); } catch (\Doctrine\ORM\NoResultException $e) { } if ($neighborhood->getDateTimeAdded() == null) { $neighborhood->setDateTimeAdded(date("Y-m-d H:i:s")); } $this->em->persist($neighborhood); $this->em->flush($neighborhood); }
public function backupDb($file) { $neighborhoodMapper = $this->sm->get('Whathood\\Mapper\\Neighborhood'); $neighborhoods = $neighborhoodMapper->fetchAll(); foreach ($neighborhoods as $n) { print $n->getName() . "\n"; } $json = \Whathood\Entity\Neighborhood::neighborhoodsToJson($neighborhoods); file_put_contents($file, $json); }
public function getPolygon() { $filename = $this->file; if (!file_exists($filename)) { throw new \InvalidArgumentException("{$filename} does not exist"); } if ($this->getRegion() == null) { throw new \InvalidArgumentException("region must be defined"); } if ($this->getWhathoodUser() == null) { throw new \InvalidArguementException("user must be defined"); } $jsonStr = file_get_contents($filename); $whathoodUser = $this->getWhathoodUser(); $json = \Zend\Json\Json::decode($jsonStr); $neighborhoods = array(); $counter = 1; foreach ($json->kml->Document->Folder->Placemark as $n) { $name = $n->ExtendedData->SchemaData->SimpleData[2]->{'#text'}; $coordinateString = $n->Polygon->outerBoundaryIs->LinearRing->coordinates; $array = explode(' ', $coordinateString); $neighborhood = new Neighborhood(); $neighborhood->setName($name); $neighborhood->setRegion($this->getRegion()); $points = array(); foreach ($array as $point) { list($lng, $lat) = explode(",", $point); $points[] = new Point($lng, $lat); } $lineString = new LineString($points); $lineString->close(); $polygon = new Polygon(array($lineString)); $neighborhoodPolygon = new UserPolygon(); $neighborhoodPolygon->setWhathoodUser($whathoodUser); $neighborhoodPolygon->setAuthority($this->isAuthority()); $neighborhoodPolygon->setNeighborhood($neighborhood); $neighborhoodPolygon->setPolygon($polygon); $neighborhoodPolygon->setRegion($this->getRegion()); $neighborhoods[] = $neighborhoodPolygon; } return $neighborhoods; }
public function testValidData() { $this->initDb(); /** * set up test data **/ $region = new \Whathood\Entity\Region(array('name' => "Region_" . $this->getTestName())); $whathoodUser = new \Whathood\Entity\WhathoodUser(array('ipAddress' => '0.0.0.0')); $neighborhood = new Neighborhood(array('id' => 1, 'name' => "MyTest" . $this->getTestName(), 'region' => $region)); $userPolygon = new UserPolygon(array('polygon' => Polygon::build(array(new LineString(array(new Point(30, 40), new Point(30, 50), new Point(40, 50), new Point(30, 40)))), 4326), 'neighborhood' => $neighborhood, 'region' => $region, 'whathoodUser' => $whathoodUser)); $this->m()->userPolygonMapper()->save($userPolygon); /* * now run the job * **/ $factory = new \Whathood\Factory\HeatmapBuilderJobFactory(); $job = $factory->createService(\WhathoodTest\Bootstrap::getServiceManager()); $job->setGridResolution(1); if (count($neighborhood->getUserPolygons())) { die("should have had more than 0 user polygons"); } $job->setContent(array('neighborhood_id' => $userPolygon->getNeighborhood()->getId())); $job->execute(); }
public function createByNeighborhoodQuery(Neighborhood $neighborhood) { $dql = "SELECT up FROM Whathood\\Entity\\UserPolygon up\n WHERE up.neighborhood = :neighborhood ORDER BY up.id ASC"; return $this->em->createQuery($dql)->setParameter(':neighborhood', $neighborhood->getId()); }
/** * @description returns all the NeighborhoodBoundary objects associated with the given neighborhood * * @return array - an array of NeighborhoodBoundary entities */ public function byNeighborhood(Neighborhood $neighborhood) { $dql = "SELECT np FROM Whathood\\Entity\\NeighborhoodBoundary np\n WHERE np.neighborhood = :neighborhood"; $query = $this->em->createQuery($dql)->setParameter(':neighborhood', $neighborhood->getId()); return $query->getResult(); }
public function addAction() { if (!$this->getRequest()->isPost()) { return new ViewModel(); } $neighborhood_name = $this->getRequest()->getPost('neighborhood_name'); $region_name = $this->getRequest()->getPost('region_name'); $polygon_array = $this->getRequest()->getPost('polygon_json'); if (empty($polygon_array)) { throw new \InvalidArgumentException("polygon_json may not be empty"); } if (empty($neighborhood_name)) { throw new \InvalidArgumentException("neighborhood_name may not be empty"); } $neighborhood = new Neighborhood(array('name' => $neighborhood_name)); $region = new Region(array('name' => $region_name)); $polygon = \Whathood\Polygon::buildPolygonFromGeoJsonArray($polygon_array, $srid = 4326); $whathoodUser = $this->getWhathoodUser(); $userPolygon = new UserPolygon(array('neighborhood' => $neighborhood, 'polygon' => $polygon, 'region' => $region, 'whathoodUser' => $whathoodUser)); $this->logger()->info(sprintf("saving user-polygon id=%s neighborhood=%s region=%s ip-address=%s", $userPolygon->getId(), $neighborhood->getName(), $region->getName(), $whathoodUser->getIpAddress())); $this->userPolygonMapper()->save($userPolygon); $this->logger()->info("user polygon added id(" . $userPolygon->getId() . ")"); return new JsonModel(array('status' => 'success', 'user_polygon_id' => $userPolygon->getId())); }
public function __invoke(Neighborhood $n) { $url = $this->root . '?id=' . $n->getId(); return $url; }
public function getIteratorClass() { $this->__load(); return parent::getIteratorClass(); }
public function isWinner(Neighborhood $neighborhood) { foreach ($this->getWinningCandidates() as $cn) { if ($neighborhood->getId() == $cn->getNeighborhood()->getId()) { return true; } } return false; }
public function deleteByNeighborhood(Neighborhood $neighborhood) { $sql = "DELETE FROM Whathood\\Entity\\HeatMapPoint hmp WHERE hmp.neighborhood = :neighborhood_id"; $this->em->createQuery($sql)->setParameter(':neighborhood_id', $neighborhood->getId())->execute(); }