up prise en compte de tags websites différents

This commit is contained in:
Tykayn 2025-06-22 23:28:09 +02:00 committed by tykayn
parent 1bde077df6
commit c46a8304a9
2 changed files with 68 additions and 92 deletions

View file

@ -211,113 +211,89 @@ class Place
*/
public function update_place_from_overpass_data(array $overpass_data) {
if ( ! isset($overpass_data['tags']) || $overpass_data['tags'] == null) {
if (!isset($overpass_data['tags']) || $overpass_data['tags'] == null) {
return;
}
$orignal_overpass_data = $overpass_data;
$overpass_data = array_merge([
'id' => '',
'type' => '',
'name' => '',
'postcode' => '',
'email' => '',
'opening_hours' => '',
'addr:housenumber' => '',
'addr:street' => '',
'website' => '',
'wheelchair' => '',
'note' => '',
'fixme' => '',
], $overpass_data['tags'] );
$main_tag = $this->guess_main_tag($orignal_overpass_data['tags']);
if($main_tag){
$tags = $overpass_data['tags'];
// Setters for basic properties from top-level of overpass data
$this->setOsmId($overpass_data['id'])
->setOsmKind($overpass_data['type'])
->setLat((float) ($overpass_data['lat'] ?? 0))
->setLon((float) ($overpass_data['lon'] ?? 0));
// Setters for metadata
if (isset($overpass_data['timestamp'])) {
try {
$this->setOsmDataDate(new \DateTime($overpass_data['timestamp']));
} catch (\Exception $e) {
// Ignore if date is invalid
}
}
if (isset($overpass_data['version'])) {
$this->setOsmVersion($overpass_data['version']);
}
if (isset($overpass_data['user'])) {
$this->setOsmUser($overpass_data['user']);
}
if (isset($overpass_data['uid'])) {
$this->setOsmUid($overpass_data['uid']);
}
if (isset($overpass_data['changeset'])) {
$this->setOsmChangeset($overpass_data['changeset']);
}
// Guess main tag
$main_tag = $this->guess_main_tag($tags);
if ($main_tag) {
$this->setMainTag($main_tag);
}
$this
->setOsmId( $orignal_overpass_data['id'])
->setOsmKind($orignal_overpass_data['type'] )
->setLat((float) $orignal_overpass_data['lat'])
->setLon((float) $orignal_overpass_data['lon'])
->setName(isset($overpass_data['name']) && $overpass_data['name'] != '' ? $overpass_data['name'] : null);
// Traiter le timestamp OSM si disponible
if (isset($orignal_overpass_data['timestamp']) && $orignal_overpass_data['timestamp']) {
try {
$osmDate = new \DateTime($orignal_overpass_data['timestamp']);
$this->setOsmDataDate($osmDate);
} catch (\Exception $e) {
// En cas d'erreur de parsing de la date, on ignore
// Setters from tags
$this->setName($tags['name'] ?? null);
$this->setStreet($tags['addr:street'] ?? $tags['contact:street'] ?? null);
$this->setHousenumber($tags['addr:housenumber'] ?? $tags['contact:housenumber'] ?? null);
if (isset($tags['addr:postcode'])) {
$this->setZipCode(intval($tags['addr:postcode']));
}
$this->setEmail($tags['contact:email'] ?? $tags['email'] ?? null);
$this->setSiret($tags['ref:FR:SIRET'] ?? null);
// Boolean "has" properties
$this->setHasOpeningHours(!empty($tags['opening_hours']));
$this->setHasWheelchair(!empty($tags['wheelchair']));
// has address logic
$this->setHasAddress(!empty($this->getStreet()) && !empty($this->getHousenumber()));
// has website logic (with multiple possible tags)
$websiteTags = ['website', 'contact:website', 'url', 'contact:url'];
$hasWebsite = false;
foreach ($websiteTags as $tag) {
if (!empty($tags[$tag])) {
$hasWebsite = true;
break;
}
}
// Traiter les autres métadonnées OSM
if (isset($orignal_overpass_data['version'])) {
$this->setOsmVersion($orignal_overpass_data['version']);
}
if (isset($orignal_overpass_data['user'])) {
$this->setOsmUser($orignal_overpass_data['user']);
}
if (isset($orignal_overpass_data['uid'])) {
$this->setOsmUid($orignal_overpass_data['uid']);
}
if (isset($orignal_overpass_data['changeset'])) {
$this->setOsmChangeset($orignal_overpass_data['changeset']);
}
$mapping = [
['key' => 'postcode', 'setter' => 'setZipCode', 'source' => $overpass_data],
['key' => 'email', 'setter' => 'setEmail', 'source' => $overpass_data],
['key' => 'opening_hours', 'setter' => 'setHasOpeningHours', 'source' => $overpass_data['tags'] ?? []],
['key' => 'addr:housenumber', 'setter' => 'setHasAddress', 'source' => $overpass_data['tags'] ?? []],
['key' => 'website', 'setter' => 'setHasWebsite', 'source' => $overpass_data['tags'] ?? []],
['key' => 'wheelchair', 'setter' => 'setHasWheelchair', 'source' => $overpass_data['tags'] ?? []],
['key' => 'siret', 'setter' => 'setSiret', 'source' => $overpass_data['tags'] ?? []],
['key' => 'addr:street', 'setter' => 'setStreet', 'source' => $overpass_data['tags'] ?? []],
['key' => 'addr:housenumber', 'setter' => 'setHousenumber', 'source' => $overpass_data['tags'] ?? []],
];
foreach ($mapping as $map) {
if (isset($map['source'][$map['key']]) && $map['source'][$map['key']] !== '') {
$this->{$map['setter']}($map['source'][$map['key']]);
}
}
// Traiter les notes et fixme
$this->setHasWebsite($hasWebsite);
// has note logic
$noteContent = '';
$hasNote = false;
if (isset($orignal_overpass_data['tags']['note']) && $orignal_overpass_data['tags']['note'] !== '') {
$noteContent .= $orignal_overpass_data['tags']['note'];
if (!empty($tags['note'])) {
$noteContent .= $tags['note'];
$hasNote = true;
}
if (isset($orignal_overpass_data['tags']['fixme']) && $orignal_overpass_data['tags']['fixme'] !== '') {
if (!empty($tags['fixme'])) {
if ($noteContent !== '') {
$noteContent .= "\n\n";
}
$noteContent .= "FIXME: " . $orignal_overpass_data['tags']['fixme'];
$noteContent .= "FIXME: " . $tags['fixme'];
$hasNote = true;
}
$this->setNoteContent($noteContent);
$this->setNoteContent($noteContent ?: null);
$this->setHasNote($hasNote);
$this
// ->setOsmId($overpass_data['id'])
// ->setOsmKind($overpass_data['type'])
->setName($overpass_data['name'])
->setZipCode(\intval($overpass_data['postcode']))
->setEmail($overpass_data['email'])
// ->setUuidForUrl( Motocultrice::uuid_create_static())
// ->setOptedOut(false)
// ->setDead(false)
->setHasOpeningHours($overpass_data['opening_hours'] ? true : false)
->setHasAddress($overpass_data['addr:housenumber'] && $overpass_data['addr:street'] ? true : false)
->setHasWebsite($overpass_data['website'] ? true : false)
->setHasWheelchair($overpass_data['wheelchair'] and $overpass_data['wheelchair'] != '' ? true : false);
}
public function __construct()

View file

@ -138,7 +138,7 @@
<div class="col-12">
<h2>Statistiques par ville</h2>
<div class="table-responsive">
<table class="table table-striped">
<table class="table table-striped js-sort-table">
<thead>
<tr>
<th>Ville</th>