PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : نحوه کش کردن وبسایت openstreetmap



ehsan_kabiri_33
June 11th, 2020, 01:13
با درود. با توجه به محدودیت تعداد درخواست و سرعت نامناسب لودینگ سایت osm
میخام برای وبسایتم یک cash proxy/reverse proxy حالا هر چی اسمش هست ایجاد کنم که منطقه خودمون را یک بار ویزیت کنم روی نقشه و کلا برای مدت مثلا یک سال بمونه روی سرور خودم و از اونجا لود بشه.

ظاهرا چندین روش هست:
یکی استفاده از نرم افزارهای کش مانند Mapproxy/squid
دوم استفاده از وی سرور Nginx

نمیدون چرا و به دنبال کدام یک باید بروم ؟
ممنون میشم بنده مبتدی را راهنمایی کنید

be099
June 11th, 2020, 01:48
با درود. با توجه به محدودیت تعداد درخواست و سرعت نامناسب لودینگ سایت osm
میخام برای وبسایتم یک cash proxy/reverse proxy حالا هر چی اسمش هست ایجاد کنم که منطقه خودمون را یک بار ویزیت کنم روی نقشه و کلا برای مدت مثلا یک سال بمونه روی سرور خودم و از اونجا لود بشه.

ظاهرا چندین روش هست:
یکی استفاده از نرم افزارهای کش مانند Mapproxy/squid
دوم استفاده از وی سرور Nginx

نمیدون چرا و به دنبال کدام یک باید بروم ؟
ممنون میشم بنده مبتدی را راهنمایی کنید

مورد مشابه انجام دادم
به این صورت که هر تایلی که نباشه با یه درخواست کش میشه و در صورت درخواست دوباره از کش خونده میشه تازه درخواست بار اول هم از سرور خودتون پروکسی میشه
سرعتش خیلی میره بالا هم روی اندروید هم روی وب ...

سورس :

hunter.php




<?php
function file_get_contents2($url) {

$request_headers[] = 'Host: b.tile.openstreetmap.org';
$request_headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);


$season_data = curl_exec($ch);

if (curl_errno($ch)) {
print "Error: " . curl_error($ch);
exit();
}


curl_close($ch);


return $season_data;
}


$x = str_replace("/osmtile/","https://b.tile.openstreetmap.org/",$_SERVER["REQUEST_URI"]);



header("Content-type: image/png");
$res = file_get_contents2($x);

$req_url = str_replace("/osmtile/","",$_SERVER["REQUEST_URI"]);
$parts = explode("/",$req_url);

$z=$parts[0];
$x=$parts[1];
$y=$parts[2];

if (preg_match("!\?!is",$y)) {
$yy = explode("?",$y);
$y = $yy[0];
}


echo $res;

if ($res) {
file_put_contents("savedt/".$z."_".$x."_".$y."",$res);
}
?>




اینم .htaccess




RewriteEngine On

RewriteRule ^(.*)\/(.*)\/(.*)\.png$ savedt/$1_$2_$3.png [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ hunter.php?z=$1&x=$2&y=$3 [L]


بعدش یه فولدر بسازید به نام savedt کنار همین فایل hunter.php

بعد از اون توی وب اپلیکیشن یا اندروید اپلیکیشنتون خیلی ساده بجای آدرس اصلی تایل های osm آدرس سرور خودتونو بدید


L.tileLayer('https://mywebsite.ir/osmtile/{z}/{x}/{y}.png'