em = $em; } public function getMapData($fh) { $placemark_name = ''; $reader = new XMLReader(); $reader->open($fh); while($reader->read()) { if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == "Placemark") { while($reader->read()) { if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == "name") { $placemark_name = $reader->readInnerXML(); } if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == "coordinates") { // each polygon is a new area $supported_area = new SupportedArea(); $supported_area->setName($placemark_name); $point_array = []; $coordinates = $reader->readInnerXML(); // get each line $coord_split = explode("\n", $coordinates); // go through all the coordinates foreach ($coord_split as $coord) { // skip blank lines $coord_trim = trim($coord); if (strlen($coord_trim) <= 0) continue; // echo "$coord_trim\n"; $point_split = explode(',', $coord_trim); $point_array[] = new Point($point_split[0], $point_split[1]); } $area = new Polygon([new LineString($point_array)]); $supported_area->setCoverageArea($area); // add supported area $this->em->persist($supported_area); } } } } $reader->close(); $this->em->flush(); } }