.searchArea; ( // Recherche des commerces et services avec email nw["amenity"]["contact:email"](area.searchArea); nw["amenity"]["email"](area.searchArea); nw["shop"]["contact:email"](area.searchArea); nw["shop"]["email"](area.searchArea); nw["office"]["contact:email"](area.searchArea); nw["office"]["email"](area.searchArea); // Recherche des commerces et services sans email pour référence nw["amenity"](area.searchArea); nw["shop"](area.searchArea); nw["office"](area.searchArea); ); out body; >; out skel qt; QUERY; try { $response = $this->client->request('POST', $this->overpassApiUrl, [ 'body' => ['data' => $query] ]); $data = json_decode($response->getContent(), true); $places = []; if (isset($data['elements'])) { foreach ($data['elements'] as $element) { if (isset($element['tags'])) { $email = $element['tags']['contact:email'] ?? $element['tags']['email'] ?? null; // On passe si pas d'email if (!$email) { continue; } $places[] = [ 'id' => $element['id'], 'type' => $element['type'], 'name' => $element['tags']['name'] ?? '', 'email' => $email, 'lat' => $element['lat'] ?? null, 'lon' => $element['lon'] ?? null, 'tags' => $element['tags'] ]; } } } return $places; } catch (\Exception $e) { throw new \Exception("Erreur lors de la requête Overpass : " . $e->getMessage()); } } public function get_osm_object_data($osm_kind = 'node', $osm_object_id = 12855459190) { $object_id = "https://www.openstreetmap.org/api/0.6/".$osm_kind."/".$osm_object_id; try { $response = $this->client->request('GET', $object_id); $xml = simplexml_load_string($response->getContent()); $json = json_encode($xml); $osm_object_data = json_decode($json, true); } catch (\Exception $e) { throw new \Exception("Impossible de récupérer les données OSM : " . $e->getMessage()); } // convertir les tags en clés et valeurs $osm_object_data['tags_converted'] = []; // Initialiser le tableau des tags convertis if (isset($osm_object_data['node'])) { $osm_object_data['node']['tags_converted'] = []; } elseif (isset($osm_object_data['way'])) { $osm_object_data['way']['tags_converted'] = []; } if(isset($osm_object_data['node'])){ foreach ($osm_object_data['node']['tag'] as $attribute) { $osm_object_data['node']['tags_converted'][$attribute['@attributes']['k']] = $attribute['@attributes']['v']; } return $osm_object_data['node']; } if(isset($osm_object_data['way'])){ foreach ($osm_object_data['way']['tag'] as $attribute) { $osm_object_data['way']['tags_converted'][$attribute['@attributes']['k']] = $attribute['@attributes']['v']; } return $osm_object_data['way']; } return $osm_object_data; } public function uuid_create() { return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', // 32 bits for "time_low" mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), // 16 bits for "time_mid" mt_rand( 0, 0xffff ), // 16 bits for "time_hi_and_version", // four most significant bits holds version number 4 mt_rand( 0, 0x0fff ) | 0x4000, // 16 bits, 8 bits for "clk_seq_hi_res", // 8 bits for "clk_seq_low", // two most significant bits holds zero and one for variant DCE1.1 mt_rand( 0, 0x3fff ) | 0x8000, // 48 bits for "node" mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ) ); } }