Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 Kanal D va difuza serialul “...

Upgrade xiaomi mi11

securitate - acum se dau drept - ...

Farmacia Dr Max - Pareri / Sugest...
 

Reverse geocoding in PHP

- - - - -
  • Please log in to reply
4 replies to this topic

#1
dagobar

dagobar

    Active Member

  • Grup: Members
  • Posts: 1,277
  • Înscris: 09.03.2019
Salut all

Ce este reverse geocoding ?
https://en.wikipedia...verse_geocoding

Pe plan international exista un numar restrans de furnizori de servicii gratuite de reverse geocoding probabil cel mai cusoscut fiind Google (sau era... nu stiu daca mai este gratis).
Diversii furnizori de astfel de servici gratuite le limiteaza ca numar de interograri per unitate de timp (ex. 10000 interograri pe luna la locationiq)... pe buna dreptate ca doar sunt gratuite dar si pentru a prevenii abuzuri.

Eu doresc extinderea unui script PHP existent (atasat de acest post) care in momentul de fata accepta primirea unei cereri de la o anumita adresa de IP, verifica cererea de bube (sanitize) si daca este corecta o trimite mai departe catre un astfel de furnizor de reverse geocoding si evident returneaza raspunsul.

Scripul a fost facut initial deoarece furnizorul a impus introducerea de AGENT in cerere si cam asta face primeste cererea fara AGENT si o introduce inainte sa o trimita mai departe. Eu am testat pe Linux CLI:

curl -A "" 'https://nominatim.op...ddressdetails=1'
Response: Access blocked

console: curl -A "mozilla" 'https://nominatim.op...ddressdetails=1'
Response: OK

Pentru a accesa scriptul PHP pe localhost:
http://localhost/reverse</entry>

Cum as dorii sa extind scriptul ?
1. sa suporte furnizori multipi (pentru load balancing, redundanta, e.t.c)
2. limitare nr. interogari per unitate de timp per furnizor (pentru a evita flood-area involuntara)
3. mod rutare cereri - round robin, procentual, preffered, e.t.c.

Nota:
Scriptul nu este facut de mine este preluat de pe forumul traccar (nu dau link sa nu se considere reclama) iar rezultatul dezvoltarii noului script (sau scripturi) o sa fie facut public pe Git sa-l poata folosii oricine si eventual extinde... adica munca voluntara neplatita Posted Image

Later edit:
Am atasat de post fisierul reverse.php insa vad ca nu apare in post... poate trebuie aprobat de un moderator.
Daca nu apare in perioada urmatoare o sa-l pun aici cu copy&paste.

Edited by dagobar, 07 December 2019 - 23:22.


#2
dagobar

dagobar

    Active Member

  • Grup: Members
  • Posts: 1,277
  • Înscris: 09.03.2019
<p>
$user_agent = 'traccar'; // specify your user-agent
$nominatim_url = 'https://nominatim.op...g/reverse&#39;;
$error = array();
if ($_SERVER['REMOTE_ADDR'] !== $_SERVER['SERVER_ADDR']) {
$error[] = 'only local query allowed';
}
if (!isset($_GET) || empty($_GET)) {
$error[] = 'no parameters';
} elseif (!isset($_GET['format']) || !isset($_GET['lat']) || !isset($_GET['lon']) || !isset($_GET['zoom']) || !isset($_GET['addressdetails'])) {
$error[] = 'not complete parameters';
} elseif ($_GET['format'] !== 'json' || !is_numeric($_GET['lat']) || !is_numeric($_GET['lon']) || !is_numeric($_GET['zoom']) || !is_numeric($_GET['addressdetails'])) {
$error[] = 'invalid parameters';
} else {
header('Content-Type: application/json; charset=utf-8');
$query_data = array(
'format' => $_GET['format'],
'lat' => $_GET['lat'],
'lon' => $_GET['lon'],
'zoom' => $_GET['zoom'],
'addressdetails' => $_GET['addressdetails']
);
$query = http_build_query($query_data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $nominatim_url.'?'.$query);
$response = curl_exec($ch);
$status_code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status_code !== 200) {
$error[] = 'no valid response from nominatim';
}
}
if ($error) {
header('Content-Type: text/html; charset=utf-8');
echo implode('
', $error);
} else {
header('Content-Type: application/json; charset=utf-8');
echo $response;
}
?>


#3
laffin

laffin

    Senior Member

  • Grup: Senior Members
  • Posts: 9,527
  • Înscris: 16.03.2007
sau folosesti maxmind geoip

#4
dagobar

dagobar

    Active Member

  • Grup: Members
  • Posts: 1,277
  • Înscris: 09.03.2019
Alta varianta ar fi sa folosesc HAProxy cu scripturi diferite la continut insa cu acelasi nume in foldere diferite pe acelasi server.
Mai "sap" inclusiv pe aceasta parte...

#5
dagobar

dagobar

    Active Member

  • Grup: Members
  • Posts: 1,277
  • Înscris: 09.03.2019
Pana la urma am modificat singur script-ul si in combinatie cu HAProxy am reusit sa obtin rutarile disponibile in HAProxy (ex. round robin) precum si redundanta... cazul in care un reverse geocoding server (nu doar serverul pe care se afla scriptul PHP) nu mai returneaza raspunsuri valide sau timeout este marcat dead si nu se mai trimit cereri catre el.
In continuare ar fi nevoie de logare in SQL pentru statistici, mecanism de verificare care sa schimbe automat statusul din DEAD -> LIVE cand revine un server, limitare numar interogari per unitati de timp (asta s-ar putea sa se poata din HAProxy) e.t.c.
Oricum din ce observ nu exista interes din partea utilizatorilor de aici asa ca se poate inchide topicul.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate