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 save(UserPolygon &$userPolygon, $flush = true) { /* * REGION * * does the region already exist, if not we need to save it in all entities * because it will get saved multiple times */ try { $regionName = $userPolygon->getRegion()->getName(); $region = $this->regionMapper()->getRegionByName($regionName); $userPolygon->setRegion($region); $userPolygon->getNeighborhood()->setRegion($region); } catch (\Doctrine\ORM\NoResultException $e) { $region = $userPolygon->getRegion(); $this->regionMapper()->save($region); $userPolygon->setRegion($region); $userPolygon->getNeighborhood()->setRegion($region); } /* * NEIGHBORHOOD * * does the neighborhood already exist, if it does reset it in the neighborhood */ try { $neighborhoodName = $userPolygon->getNeighborhood()->getName(); $regionName = $userPolygon->getNeighborhood()->getRegion()->getName(); $neighborhood = $this->neighborhoodMapper()->getNeighborhoodByName($neighborhoodName, $regionName); $userPolygon->setNeighborhood($neighborhood); } catch (\Doctrine\ORM\NoResultException $e) { $this->neighborhoodMapper->save($userPolygon->getNeighborhood()); } $whathoodUser = $this->getMaybeSaveByName($userPolygon->getWhathoodUser()->getIpAddress()); $userPolygon->setWhathoodUser($whathoodUser); if ($userPolygon->getDateTimeAdded() == null) { $userPolygon->setDateTimeAdded($this->getCurrentDateTimeAsString()); } $this->em->persist($userPolygon); if ($flush) { $this->em->flush($userPolygon); } }
public function save(UserPolygon $userPolygon) { /* * REGION * * does the region already exist, if not we need to save it in all entities * because it will get saved multiple times */ try { $regionName = $userPolygon->getRegion()->getName(); $region = $this->regionMapper()->getRegionByName($regionName); $userPolygon->setRegion($region); $userPolygon->getNeighborhood()->setRegion($region); } catch (\Doctrine\ORM\NoResultException $e) { $region = $userPolygon->getRegion(); $this->regionMapper()->save($region); $userPolygon->setRegion($region); $userPolygon->getNeighborhood()->setRegion($region); } $this->logger()->info("after region"); /* * NEIGHBORHOOD * * does the neighborhood already exist, if it does reset it in the neighborhood */ try { $neighborhoodName = $userPolygon->getNeighborhood()->getName(); $regionName = $userPolygon->getNeighborhood()->getRegion()->getName(); $neighborhood = $this->neighborhoodMapper()->getNeighborhoodByName($neighborhoodName, $regionName); $userPolygon->setNeighborhood($neighborhood); } catch (\Doctrine\ORM\NoResultException $e) { $this->neighborhoodMapper->save($userPolygon->getNeighborhood()); } $this->logger()->info('after neighborhood'); $whathoodUser = $this->getMaybeSaveByName($userPolygon->getWhathoodUser()->getIpAddress()); $userPolygon->setWhathoodUser($whathoodUser); if ($userPolygon->getDateTimeAdded() == null) { $userPolygon->setDateTimeAdded($this->getCurrentDateTimeAsString()); } if (0) { \Zend\Debug\Debug::dump($userPolygon->getId(), 'in UserPolygonMapper'); exit; } $this->logger()->info("about to save"); $this->em->persist($userPolygon); $this->logger()->info("about to flush"); $this->em->flush($userPolygon); $this->logger()->info("saved"); }