نمایش نتایج: از شماره 1 تا 2 , از مجموع 2

موضوع: نحوه کش کردن وبسایت openstreetmap

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #2
    عضو انجمن be099 آواتار ها
    تاریخ عضویت
    May 2009
    محل سکونت
    ﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽﷽
    نوشته ها
    338
    تشکر تشکر کرده 
    176
    تشکر تشکر شده 
    651
    تشکر شده در
    385 پست

    پیش فرض پاسخ : نحوه کش کردن وبسایت 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($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    curl_setopt($chCURLOPT_HTTPHEADER$request_headers);

    curl_setopt($chCURLOPT_SSL_VERIFYHOST0);
    curl_setopt($chCURLOPT_SSL_VERIFYPEER0);


        
    $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'

  2. تعداد تشکر ها ازbe099 به دلیل پست مفید


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •