<\/HEAD>
Někdy vidíte skvělou dlaždicovou vrstvu v webové mapě a chcete ji použít ve svém projektu ArcGIS online nebo ArcGIS Pro. Takový pocit jsem měl, když jsem viděl tuto pěknou malou BVG basemap<\/A>. Použití této poněkud komplikované basemap bylo trochu složité, protože logika převodu zeměpisné šířky a délky na čísla dlaždic byla trochu zamotaná. V produktech jako ArcGIS Online\/ ArcGIS Enterprise není možné tuto logiku změnit. Takže pokud chcete použít dlaždicovou vrstvu jako tuto v AGOL, musíte zasáhnout jinde.<\/P>
Spuštění skutečné kartografie
V tuto chvíli máme představu o tom, jak přeposílat obrázky z webu do AGOL jako webovou vrstvu. Nyní pokračujme a naplňme tyto zástupné obrázky "skutečnou kartografií".
Jak jsme viděli v tomto posledním příspěvku, pojmenovací schéma pro BVG mapu je trochu pokřivené. Ale nejprve náš skript musí vědět, které obrázky má stáhnout. Takže musíme skriptu poslat nějaké parametry. Uděláme to podobným způsobem jako skutečné TMS servery: pošleme parametry ZXY přes URL, přečteme je v našem skriptu a připojíme je k URL:
<?php<\/SPAN>
header (<\/SPAN>'Content-Type: image\/png'<\/SPAN>)<\/SPAN>;<\/SPAN>
$y<\/SPAN> =<\/SPAN> $_GET<\/SPAN>[<\/SPAN>'y'<\/SPAN>]<\/SPAN>;<\/SPAN> #parametr y je uložen jako řetězec v proměnné y<\/SPAN>
$x<\/SPAN> =<\/SPAN> $_GET<\/SPAN>[<\/SPAN>'x'<\/SPAN>]<\/SPAN>;<\/SPAN> #parametr x je uložen...<\/SPAN>
$z<\/SPAN> =<\/SPAN> $_GET<\/SPAN>[<\/SPAN>'z'<\/Span>]<\/span>;<\/span> #chápete, že?<\/span>
$ynew<\/span> =<\/span>(<\/span> -<\/span>1<\/span>*<\/span>intval<\/span>(<\/span>$y<\/span>)<\/span>)<\/span>+<\/span>pow<\/span>(<\/span>2<\/span>,<\/span>intval<\/span>(<\/span>$z<\/span>)<\/span>)<\/span>-<\/span>1<\/span>;<\/span> \n$url</ span> < operator_token>=</ span> 'https: </ span>
$ch</ span> < operator_token>=</ span> < function_token>curl_init</ span >< punctuation_token>(</ span >< punctuation_token>)</ span >< punctuation_token>;</ span >
curl_setopt</ span >< punctuation_token>(</ span >< variable_token>$ch</ span >, < constant_token>CURLOPT_SSL_VERIFYPEER</ span >, < boolean_token>false</ span >< punctuation_token>)</ span >< punctuation_token>;</ span >
curl_setopt</ span >< punctuation_token>(</ span >< variable_token>$ch</ span >, < constant_token>CURLOPT_FRESH_CONNECT</ span >, < constant_token>TRUE</ span >< punctuation_token>)</ span >< punctuation_token>;</ span >
curl_setopt</ span >< punctuation_token>(</ span >< variable_token>$ch</ span >, < constant_token>CURLOPT_URL</ span >, < variable_token>$url</ span >< punctuation_token>)</ span >< punctuation_token>;</ span >
curl_setopt</ span >< punctuation_token>(</ span >< variable_token>$ch</ span >, < constant_token>CURLOPT_RETURNTRANSFER</ span >, < number_token>1</ span >< punctuation_token>)</ span >< punctuation_token>;</ span >
curl_setopt</ span >< punctuation_token>(</ span >< variable_token>$ch</ span >, < constant_token>CURLOPT_USERAGENT</ span >, < 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 >< punctuation_token>)</ span >< punctuation_token>;</ span >
$data</ span > < operator_token>=</ span > < function_token>curl_exec</ span >( $ch ) ;
curl_close </ sp an >( $ch ) ;
echo </ sp an > $data ;
> </ sp an ></ SPAN ><<EMOJI_0><SP AN cl ass ="line-numbers-rows"><SP AN><<EMOJI_1></SP AN><SP AN><<EMOJI_2></SP AN><SP AN><<EMOJI_3></SP AN><SP AN><<EMOJI_4></SP AN><SP AN><<EMOJI_5></SP AN><SP AN><<EMOJI_6></SP AN><SP AN><<EMOJI_7></SP AN><SP AN><<EMOJI_8></SP AN><SP AN><<EMOJI_9></SP AN><SP AN><<EMOJI_10></SP AN><SP AN><<EMOJI_11></SP AN><SP AN><<EMOJI_12></SP AN><SP AN><<EMOJI_13></SP AN><SP AN><<EMOJI_14></SP AN><SP AN><<EMOJI_15></SP AN><SP AN><<EMOJI_16></SP AN><SP AN>
<20202020<20202020<20202020<20202020<20202020<20202020<20202020
The parameters are send to the PHP-enabled server using the following schema:<\/>\n
\nPoužitím tohoto skriptu získáte pěknou BVG základní mapu ve vašem ArcGIS Online editoru Map Viewer:<\/>\n
\n
Až uložíte webovou mapu, můžete ji dokonce otevřít v ArcGIS Pro a použít ji pro své účely přidáním mapy z Portálu:<\/>\n
\n
Více serverů<\/>\nPokud chcete spravovat více serverů se stejným skriptem, můžete přidat čtvrtý parametr, který zpracovává tileserver a přidat několik přepínačů:<\/>\n& lt ;?php </ Span>
header ( </ Span >'Content-Type: image/png'</ Span >
$tileservice </ Span > < operator to ken >= </ Span > null #
if ( isset ( $_GET [ 't' ] ) ) {
$tileservice = $_GET [ 't' ] ;
}
if ( ! $tileservice ) {
$tileservice = 'bvg' ; #pokud nebyl zadán parametr tileserver
}
$y = $_GET [ 'y' ] ;
$x = $_GET [ 'x' ] ;
$z = $_GET [ 'z' ] ;
$server = array ( class="punctuation token">)<\/SPAN>;<\/SPAN>
switch<\/SPAN> (<\/SPAN>$tileservice<\/SPAN>)<\/SPAN>{<\/SPAN>
case<\/SPAN> 'cat'<\/SPAN>:<\/SPAN>
$url<\/SPAN> =<\/SPAN> 'https:<\/SPAN>\/\/placekitten.com\/256\/256?image=';<\/SPAN>
$ynew<\/SPAN> =<\/SPAN> rand<\/SPAN>(<\/SPAN>1<\/SPAN>,<\/SPAN>16<\/SPAN>)<\/SPAN>;<\/SPAN>
$url<\/SPAN> .<\/SPAN>=<\/SPAN> $ynew<\/SPAN>;<\/SPAN>
#echo $url;<\/SPAN>
break<\/SPAN>;<\/SPAN>
case<\/SPAN> 'bvg'<\/SPAN>:<\/SPAN>
default<\/SPAN>:<\/SPAN>
$ynew<\/Span> =( -1*intval($y))+[<\/SPAN>'y'<\/SPAN>]<\/SPAN>;<\/SPAN>
$x<\/SPAN> =<\/SPAN> $_GET<\/SPAN>[<\/SPAN>'x'<\/SPAN>]<\/SPAN>;<\/SPAN>
$z<\/SPAN> =<\/SPAN> $_GET<\/SPAN>[<\/SPAN>'z'<\/SPAN>]<\/SPAN>;<\/SPAN>
$server<\/SPAN> =<\/SPAN> array<\/SPAN>(<\/SPAN>)<\/SPAN>;<\/SPAN>
switch<\/SPAN> (<\/SPAN>$tileservice<\/SPAN>)<\/SPAN>{<\/SPAN>
case<\/SPAN> 'cat'<\/SPAN>:<\/SPAN>
#$server[] = 'https:<\/SPAN>\/\/placekitten.com\/256\/256';<\/SPAN>
$url<\/Span> =<\/span> 'https:<\/<span class="comment token">//placekitten.com/256/256?image=';
$ynew = rand(1,16);
$url .= $ynew;
#echo $url;
break;
case 'bvg':
default:
$ynew = (-1 * intval($y)) + pow(2, intval($z)) - 1;
$url = 'https://fahrinfo.bvg.de/tiles/base/'.$z.'/'.$x.'/'.$ynew.'.png';
break;
} ;& nbsp; & nbsp; & nbsp; & nbsp;
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
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");
$data = curl_exec($ch);
if (curl_getinfo( $ch, CURLINFO_HTTP_CODE ) != 200) {
curl_close($ch);
$server = array();
$server[] = 'http://a.tiles.wmflabs.org/bw-mapnik/';
$server[] = 'http://b.tiles.wmflabs.org/bw-mapnik/';
$server[] = 'http://c.tiles.wmflabs.org/bw-mapnik/';
$url = $server[array_rand($server)];
$url .= $z."/".$x."/".$y.".png";
#echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
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" ) ;
$Data = Curl_exec ( $Ch ;
}
Curl_close ( $Ch ;
Echo $Data ; </ Span>
< Span Class = "Delimiter Token" ?> > < / Span ></ Span >< Span Class = "Line - Numbers - Rows">< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span ></ Span >< Span >> < / span > < span > << EMOJI _30 >> < / span > < span > << EMOJI _31 >> < / span > < span > << EMOJI _32 >> < / span > < span > << EMOJI _33 >> < / span > < span > << EMOJI _34 >> < / span > < span > << EMOJI _35 >> < / span > < span > << EMOJI _36 >> < / span > < span > << EMOJI _37 >> < / span > < span > << EMOJI _38 >> < / span > < span > << EMOJI _39 >> < / span > < span > << EMOJI _40 >> < / span > < span > << EMOJI _41 >> < / span > < span > << EMOJI _42 >> < / span > < span > << EMOJI _43 >> < / span > < span > << EMOJI _44 >> < / span > < span > << EMOJI _45 >> < / span > < span > << EMOJI _46 >> < / span > < span > << EMOJI _47 >> < / span > < span > << EMOJI _48 >> < / span > < span > << EMOJI _49 >> < / span > < span > << EMOJI _50 >> < / span > < span > << EMOJI _51 >> < / span > < span > << EMOJI _52 >> < / span > < span > << EMOJI _53 >> < / span > <?php>
header('Content-Type: image/png');
error_reporting(E_ALL);
ini_set('display_errors', '1');
$tileservice=null;
if(isset($_GET['t'])){
$tileservice=$_GET['t'];
}
if(!$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= třída="punctuation token">(<\/SPAN> -<\/SPAN>1<\/SPAN>*<\/SPAN>intval<\/SPAN>(<\/SPAN>$y<\/SPAN>)<\/SPAN>)<\/SPAN>+<\/SPAN>pow<\/SPAN>(<\/SPAN>2<\/SPAN>,<\/SPAN>intval<\/SPAN>(<\/SPAN>$z<\/SPAN>)<\/SPAN>)<\/SPAN>-<\/SPAN>1<\/SPAN>;<\/SPAN>\n $url<\/SPAN> =<\/SPAN> 'https:<\/SPAN>\/\/fahrinfo.bvg.de\/tiles\/base\/' . $z . '\/' . $x . '\/' . $ynew . '.png';<\/SPAN>\n break<\/SPAN>;<\/SPAN>\n}<\/SPAN>;<\/SPAN> \n$ch<\/SPAN> =<\/SPAN> curl_init<\/Span>();\ncurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);\ncurl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);\ncurl_setopt($ch, CURLOPT_URL, $url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\ncurl_setopt($ch, CURLOPT_USERAGENT, token">)<\/SPAN>;<\/SPAN>
}<\/SPAN>
curl_close<\/SPAN>(<\/SPAN>$ch<\/SPAN>)<\/SPAN>;<\/SPAN>
$im<\/SPAN> =<\/SPAN> imagecreatefromstring<\/SPAN>(<\/SPAN>$data<\/SPAN>)<\/SPAN>;<\/SPAN>
$stamp<\/SPAN> =<\/SPAN> imagecreatetruecolor<\/SPAN>(<\/SPAN>100<\/SPAN>,<\/SPAN> 30<\/SPAN>)<\/SPAN>;<\/SPAN>
imagestring<\/SPAN>(<\/SPAN>$stamp<\/SPAN>,<\/SPAN> 10<\/SPAN>,<\/SPAN> 10<\/SPAN>,<\/SPAN> 5<\/SPAN>,<\/SPAN> 'watermark'<\/SPAN>,<\/SPAN> 0xff0000<\/SPAN>)<\/SPAN><SP...