-
June 11th, 2020, 01:13
#1
نحوه کش کردن وبسایت openstreetmap
با درود. با توجه به محدودیت تعداد درخواست و سرعت نامناسب لودینگ سایت osm
میخام برای وبسایتم یک cash proxy/reverse proxy حالا هر چی اسمش هست ایجاد کنم که منطقه خودمون را یک بار ویزیت کنم روی نقشه و کلا برای مدت مثلا یک سال بمونه روی سرور خودم و از اونجا لود بشه.
ظاهرا چندین روش هست:
یکی استفاده از نرم افزارهای کش مانند Mapproxy/squid
دوم استفاده از وی سرور Nginx
نمیدون چرا و به دنبال کدام یک باید بروم ؟
ممنون میشم بنده مبتدی را راهنمایی کنید
-
-
June 11th, 2020 01:13
# ADS
-
June 11th, 2020, 01:48
#2
عضو انجمن
پاسخ : نحوه کش کردن وبسایت openstreetmap

نوشته اصلی توسط
ehsan_kabiri_33
با درود. با توجه به محدودیت تعداد درخواست و سرعت نامناسب لودینگ سایت osm
میخام برای وبسایتم یک cash proxy/reverse proxy حالا هر چی اسمش هست ایجاد کنم که منطقه خودمون را یک بار ویزیت کنم روی نقشه و کلا برای مدت مثلا یک سال بمونه روی سرور خودم و از اونجا لود بشه.
ظاهرا چندین روش هست:
یکی استفاده از نرم افزارهای کش مانند Mapproxy/squid
دوم استفاده از وی سرور Nginx
نمیدون چرا و به دنبال کدام یک باید بروم ؟
ممنون میشم بنده مبتدی را راهنمایی کنید
مورد مشابه انجام دادم
به این صورت که هر تایلی که نباشه با یه درخواست کش میشه و در صورت درخواست دوباره از کش خونده میشه تازه درخواست بار اول هم از سرور خودتون پروکسی میشه
سرعتش خیلی میره بالا هم روی اندروید هم روی وب ...
سورس :
hunter.php
کد 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'
-
تعداد تشکر ها ازbe099 به دلیل پست مفید