<\/HEAD>
Parfois, vous voyez ce super calque de tuiles dans une carte web et vous voulez l'utiliser dans votre projet ArcGIS online ou ArcGIS Pro. C'était le sentiment que j'avais en voyant cette jolie petite BVG basemap<\/A>. L'utilisation de cette sorte de basemap tordue était un peu délicate car la logique pour passer des coordonnées latitude-longitude aux numéros de tuiles était un peu compliquée. Dans des produits comme ArcGIS Online\/ ArcGIS Enterprise, il n'y a aucun moyen de modifier cette logique. Donc, si vous voulez utiliser un calque de tuiles comme celui-ci dans AGOL, vous devez intervenir ailleurs.<\/P>
Si vous souhaitez gérer plusieurs serveurs avec le même script vous pouvez ajouter un quatrième paramètre qui gère le tileserver et ajouter quelques commutateurs:<\P>
<SPAM php-token"><SPAM delimiter-token"><<?php</SPAM>
header (<SPAM string-token'Content-Type: image/png'>)<SPAM punctuation-token'>;</SPAM>
$tileservice=null; #
if (isset($_GET['t'])) {
$tileservice = $_GET['t'];
}
if (!$tileservice) {
$tileservice = 'bvg'; #si aucun paramètre tileserver n'a été traité
}
$y = $_GET['y'];
$x = $_GET['x'];
$z = $_GET['z'];
$server = array(< class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="keyword token">switch<\/SPAN> <SPAN class="punctuation token">(<\/SPAN><SPAN class="variable token">$tileservice<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">{<\/SPAN>
<SPAN class="keyword token">case<\/SPAN> <SPAN class="string token">'cat'<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
<SPAN class="variable token">$url<\/SPAN> <SPAN class="operator token">=<\/SPAN> 'https<SPAN class="punctuation token">:<\/SPAN><SPAN class="comment token">\/\/placekitten.com\/256\/256?image=';<\/SPAN>
<SPAN class="variable token">$ynew<\/SPAN> <SPAN class="operator token">=<\/SPAN> <SPAN class="token function">rand<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="number token">1<\/SPAN><SPAN class="punctuation token">,<\/SPAN><SPAN class="number token">16<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="variable token">$url<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="operator token">=<\/SPAN> <SPAN class="variable token">$ynew<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="shell-comment comment token">#echo $url;<\/SPAN>
<SPAN class="keyword token">break<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="keyword token">case<\/SPAN> <SPAN class="string token">'bvg'<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
<SPAN class="keyword token">default<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
<SPAN class="variable token">$ynew<\/span> <span class="operator token">=<\/span><span class="punctuation token">(<\/span> <span class="operator token">-<\/span><span class="number token">1<\/span><span class="operator token">*<\/span><span class="token function">intval<\/span><span class="punctuation token">(<\/span><span class="variable token">$y<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span><span class="operator token">+<\/span><span class="token function">pow<\/span><span class="punctuation token">(<\/span><span class="number token">2<\/span><span class="punctuation token">,<\/span><span class="token function">intval<\/span><span class="punctuation token">(<\/span><span class="variable token">$z<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span><span class="operator token">-<\/span><span class="number token">1<\/span><span class="punctuation token">;<\/span>
<Span Class= "Variable Token" > $Url </ Span > <Span Class= "Operator Token" >=</ Span > 'https<span Class= "Punctuation Token" > : </ Span ><Span Class= "Comment Token" > //fahrinfo.bvg.de/tiles/base/'.$z.'/' .$x.'/' .$ynew.'.png';</Span>
& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; <span Class= "Keyword Token" > Break </ Span > <Span Class= "Punctuation Token" >; </ Span >
<span Class= "Punctuation Token" >} </ Span > <Span Class= "Punctuation Token" >; </ Span>& Nbsp; & Nbsp; & Nbsp;
<span Class= "Variable Token" > $Ch </ Span > <Span Class= "Operator Token" >=</ Span > <Span Class= "Token Function" > Curl_Init </ Span ><Span Class= "Punctuation Token" >(</ Span ><Span Class= "Punctuation Token" )</ Span ><Span Class= "Punctuation Token" >; </ Span >
<span Class= "Token Function" > Curl_Setopt </ Span ><Span Class= "Punctuation Token" >(</ Span ><Span Class= "Variable Token" > $Ch </ Span ><Span Class= "Punctuation Token" >,</ Span> <Span Class= "Token Constant" > CURLOPT_SSL_VERIFYPEER </ Span ><Span Class= "Punctuation Token" >,</ Span> <Span Class= "Token Boolean" > False </ Span ><Span Class= "Punctuation Token" )</ Span ><Span Class= "Punctuation Token" >; </ Span >
<span Class= "Token Function" > Curl_Setopt </ Span ><Span Class= "Punctuation Token" >(</ Span ><Span Class= "Variable Token" > $Ch </ Span ><Span Class= "Punctuation Token" >,</ Span> <Span Class= "Token Constant" > CURLOPT_FRESH_CONNECT </ Span ><Span Class= "Punctuation Token" >,</ Span> <Span Class= "Token Constant" > TRUE </ Span ><Span Class= "Punctuation Token" )</ Span ><Span Class= "Punctuation Token" >; </ Span>
<span Class= "Token Function" > Curl_Setopt </ Span ><Span Class= "Punctuation Token" >(</ Span ><Span Class= "Variable Token" > $Ch </ Span ><Span Class= "Punctuation Token" >,</ Span> <Span Class= "Token Constant" > CURLOPT_URL </ Span ><Span Class= "Punctuation Token" >,</ Span> <Span Class= "Variable Token" > $Url </ Span ><Span Class= "Punctuation Token" )</ Span ><Span Class= "Punctuation Token" >; </ Span>
<span Class= "Token Function" > Curl_Setopt </ Span ><Span Class= "Punctuation Token" >(</ Span ><Span Class= "Variable Token" > $Ch </ Span ><Span Class= "Punctuation Token" >,</ Span> <Span Class= "Token Constant" > CURLOPT_RETURNTRANSFER </ Span ><Span Class= "Punctuation Token" >,</ Span> <Span Class= "Number Token" > 1 </ Span ><Span Class= "Punctuation Token" )</ Span ><Span Class= "Punctuation Token" >; </ Span>
<span Class= "Token Function" > Curl_Setopt </ Span ><Span Class= "Punctuation Token" >(</ Span ><Span Class= "Variable Token" > $Ch </ Span ><Span Class= "Punctuation Token" >,</ Span> <Span Class= "Token Constant" > CURLOPT_USERAGENT </ Span ><Span Class= "Punctuation Token" >,</ Span> <Span Class= "String Token" > \u0022Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13\u0022 </ Span ><Span Class = class="punctuation token">[</SPAN><SPAN class="string token">'y'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="variable token">$x</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="variable token">$_GET</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'x'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="variable token">$z</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="variable token">$_GET</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'z'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="variable token">$server</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">array</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">switch</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="variable token">$tileservice</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">case</SPAN> <SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="shell-comment comment token">#$server[] = 'https:</SPAN><SPAN class="comment token">//placekitten.com/256/256';</SPAN>
<SPAN class="variable token">$url</SPAN> <SPAN class="operator token">=</SPAN> 'https<SPan class="punctuation token">:</SPan><span class="comment token">//placekitten.com/256/256?image=';</span>
<Span class="variable token">$ynew</Span> <Span class="operator token">=</Span> <Span class="token function">rand</Span><Span class="punctuation token">(</Span><Span class="number token">1</Span>,<Span class="number token">16</Span><Span class="punctuation token">)</Span>;<br> <Span class="variable token">$url</Span> <Span class="punctuation token">.</Span><Span class="operator token">=</Span> <Span class="variable token">$ynew</Span>;<br> <Span class="shell-comment comment token">#echo $url;</span>
<Span class="keyword token">break</span>;<br> <Span class="keyword token">case</span> <Span class="string token">'bvg'</span>:<br> <Span class="keyword token">default</span>:<br> <Span class="variable token">$ynew</span> <Span class="operator token">=</span>( -1 * <Span class="token function">intval</span>(<Span class="variable token">$y</span>) ) + <Span class="token function">pow</span>(2, <Span class="token function">intval</span>(<Span class="variable token">$z</span>) ) - 1;<br> <Span class="variable token">$url</span> = 'https:<span class="comment token">//fahrinfo.bvg.de/tiles/base/'.$z.'/'.$x.'/'.$ynew.'.png';</span>
<Span class="keyword token">break</span>;<br>}<br>$ch = <span class='token function'>curl_init()</span>;<br><spanclass='token function'>curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); </span>
<spanclass='token function'>curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); </span>
<spanclass='token function'>curl_setopt($ch, CURLOPT_URL, $url); </span>
<spanclass='token function'>curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); </span>
<spanclass='token function'>curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13"); </span>
$data = curl_exec($ch);
if (curl_getinfo( $ch, CURLINFO_HTTP_CODE ) != 200) {
curl_close($ch);
$server = array();
$server[] = 'http:<spanclass='comment'>//a.tiles.wmflabs.org/bw-mapnik/'; </span>
$server[] = 'http:<spanclass='comment'>//b.tiles.wmflabs.org/bw-mapnik/'; </span>
$server[] = 'http:<spanclass='comment'>//c.tiles.wmflabs.org/bw-mapnik/'; </span>
$url = $server[array_rand($server)];
$url .= $z."/".$x."/".$y.".png";
#echo $url;
<SPAN class="variable token">$ch</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="token function">curl_init</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="token function">curl_setopt</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="variable token">$ch</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="token constant">CURLOPT_SSL_VERIFYPEER</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="token boolean">false</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="token function">curl_setopt</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="variable token">$ch</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="token constant">CURLOPT_FRESH_CONNECT</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="token constant">TRUE</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="token function">curl_setopt</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="variable token">$ch</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="token constant">CURLOPT_URL</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="variable token">$url</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="token function">curl_setopt</Span><span class="punctuation token">(</span><span class="variable token">$ch</span>,<span class="token constant">CURLOPT_RETURNTRANSFER</span>,<span class="number token">1</span>)<span class="punctuation token">;</span>
<span class="token function">curl_setopt</span>(<span class="variable token">$ch</span>, <span class="token constant">CURLOPT_USERAGENT</span>, <span class="string token">"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13"</span>);
<span class="variable token">$data</span> <span class="operator token">=</span> <span class="token function">curl_exec</span>(<span class="variable token">$ch</span>);
}</span>
<span class="token function">curl_close</span>(<span class="variable token">$ch</span>);
<span class="keyword token">echo</span> <span class="variable token">$data</span>;
<span class="delimiter token">?></span></span><<EMOJI_0><span class="line-numbers-rows"><span><<EMOJI_1></span><span><<EMOJI_2></span><span><<EMOJI_3></span><span><<EMOJI_4></span><span><<EMOJI_5></span><span><<EMOJI_6></span><span><<EMOJI_7></span><span><<EMOJI_8></span><span><<EMOJI_9></span><span><<EMOJI_10></span><span><<EMOJI_11></span><span><<EMOJI_12></span><span><<EMOJI_13></span><span><<EMOJI_14></span><span><<EMOJI_15></span>
<P>La carte affiche maintenant les deux tuiles :</P>
<P>
<IMG __jive_id="419053" alt="" classe="image-6 jive-image j-img-original" src="https://us.v-cdn.net/6038851/uploads/legacyfs/online/419053_2018-08-19 23_19_54-ArcGIS Pro - bvg_map - VBB map.png"/>
</P>
<p>Si vous souhaitez ajouter une "<em>annotation ennuyeuse</em>", vous pouvez aussi ajouter un joli filigrane sur ces tuiles slippy :</p>
<pre classe="lia-code-sample line-numbers language-none">
<code>
<?php
header(<string>'Content-Type: image/png'</string>);
error_reporting(E_ALL);
ini_set('display_errors', '1');
$tileservice = null;
si (isset($_GET['t'])) {
$tileservice = $_GET['t'];
}
si (!$tileservice) {
$tileservice = 'bvg';
}
$y = $_GET['y'];
$x = $_GET['x'];
$z = $_GET['z'];
$server = array();
switch ($tileservice) {
case 'cat':
#$server[] = 'https://placekitten.com/256/256';
$url = 'https://placekitten.com/256/256?image=';
$ynew = rand(1, 16);
$url .= $ynew;
#echo $url;
break;
case 'bvg':
default:
$ynew = class="punctuation token">(<\/SPAN> <SPAN class="operator token">-<\/SPAN><SPAN class="number token">1<\/SPAN><SPAN class="operator token">*<\/SPAN><SPAN class="token function">intval<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="variable token">$y<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="operator token">+<\/SPAN><SPAN class="token function">pow<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="number token">2<\/SPAN><SPAN class="punctuation token">,<\/SPAN><SPAN class="token function">intval<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="variable token">$z<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="operator token">-<\/SPAN><SPAN class="number token">1<\/SPAN><SPAN class="punctuation token">;<\/SPAN>\n <SPAN class="variable token">$url<\/SPAN> <SPAN class="operator token">=<\/SPAN> 'https<SPAN class="punctuation token">:<\/SPAN><SPAN class="comment token">\/\/fahrinfo.bvg.de\/tiles\/base\/' . $z . '\/' . $x . '\/' . $ynew . '.png';<\/SPAN>\n <SPAN class="keyword token">break<\/SPAN><SPAN class="punctuation token">;<\/SPAN>\n<SPAN class="punctuation token">}<\/SPAN><SPAN class="punctuation token">;<\/SPAN> \n<SPAN class="variable token">$ch<\/SPAN> <SPAN class="operator token">=<\/SPAN> <SPAN class="token function">curl_init<\/Span><span class=\"punctuation token\">(</span><span class=\"punctuation token\">)</span><span class=\"punctuation token\">;</span>\n<span class=\"token function\">curl_setopt</span><span class=\"punctuation token\">(</span><span class=\"variable token\">$ch</span>, <span class=\"token constant\">CURLOPT_SSL_VERIFYPEER</span>, <span class=\"token boolean\">false</span><span class=\"punctuation token\">)</span><span class=\"punctuation token\">;</span>\n<span class=\"token function\">curl_setopt</span><span class=\"punctuation token\">(</span><span class=\"variable token\">$ch</span>, <span class=\"token constant\">CURLOPT_FRESH_CONNECT</span>, <span class=\"token constant\">TRUE</span><span class=\"punctuation token\">)</span><span class=\"punctuation token\">;</span>\n<span class=\"token function\">curl_setopt</span><span class=\"punctuation token\">(</span><span class=\"variable token\">$ch</span>,<span class=\"token constant\">CURLOPT_URL</span>, <span class=\"variable token\">$url</span><span class=\"punctuation token\">)</span><span class=\"punctuation token\">;</span>\n<span class=\"token function\">curl_setopt</span><span class=\"punctuation token\">(</span><span class=\"variable token\">$ch</span>,<span class=\"token constant\">CURLOPT_RETURNTRANSFER</span>,<span class=\"number token\">1</span><span class=\"punctuation token\">)</span><span class=\"punctuation token\">;</span> \n<span class=\"token function\">curl_setopt</span><span class=\"punctuation token\">(</span><span class=\"variable token\">$ch</span>, <span class=\"token constant\">CURLOPT_USERAGENT</span>, <span class=\"string token\"> token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="punctuation token">}<\/SPAN>
<SPAN class="token function">curl_close<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="variable token">$ch<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="variable token">$im<\/SPAN> <SPAN class="operator token">=<\/SPAN> <SPAN class="token function">imagecreatefromstring<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="variable token">$data<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="variable token">$stamp<\/SPAN> <SPAN class="operator token">=<\/SPAN> <SPAN class="token function">imagecreatetruecolor<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="number token">100<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="number token">30<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="token function">imagestring<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="variable token">$stamp<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="number token">10<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="number token">10<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="number token">5<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">'watermark'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="number token">0xff0000<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="comment token">\/\/ définir les bordures et obtenir les tailles<\/span>
<SPAN class="variable token">$marge_right<\/span> <span class="operator token">=<\/span> <span class="number token">100<\/span><span class="punctuation token">;<\/span>
<span class="variable token">$marge_bottom<\/span> <span class="operator token">=<\/span> <span class="number token">100<\/span><span class="punctuation token">;<\/span>
<span class="variable token">$sx<\/span> <span class="operator token">=<\/span> <span class="token function">imagesx<\/span><span class="punctuation token">(<\/span><span class="variable token">$stamp<\/span><span class="punctuation token">)<\/span><span class="punctuation token">;<\/span>
<span class="variable token">$sy<\/span> <span class="operator token">=<\/span> <span class="token function">imagesy<\/span><span class="punctuation token">(<\/span><span class="variable token">$stamp<\/span><span class="punctuation token">)<\/span><span class="punctuation token">;<\/span>
<span class="comment token">\/\/ copier le watermark avec une transparence de 50 dans l'image originale<\/span>
<span class="token function">imagecopymerge<\/span><span class="punctuation token">(<\/span><span class="variable token">$im<\/span>, <span class="variable token">$stamp<\/span>, <span class="token function">imagesx<\/span>(<span class="variable token">$im<\/span>) - <span class="variable token">$sx<\/span> - <span class="variable token">$marge_right<\/span>, <span class="token function">imagesy<\/span>(<span class="variable token">$im<\/span>) - <span class="variable token">$sy<\/span> - <span class="variable token">$marge_bottom<\/span>, 0, 0, <span class="token function">imagesx<\/span>(<span class="variable token">$stamp<\/span>), <span class="token function">imagesy<\/span>(<span class="variable token">$stamp<\/span>), 50)<span class="punctuation token";>;\n<span>
<
\\n << EM O J I _ 6 8 > > \\n << EM O J I _ 6 9 > > \\n
mmais cela va créer une certaine charge sur le serveur... donc vous voudrez peut-être reconsidérer cela < span classe = "lia-unicode-emoji" titre = ":winking_face:"> << EM O J I _ 7 0 >> </ span > \\n
p

\ \\n
Remarques finales
\\n
Exécuter PHP avec un script "mauvais" peut produire une réponse très lente de votre serveur de tuiles proxifié. Vous devriez donc essayer de mettre en cache les tuiles sur votre serveur. Mais c'est une toute autre histoire.
\\n \\n