WIP.
This commit is contained in:
parent
15264d0abd
commit
10eb77712c
@ -2,18 +2,26 @@
|
|||||||
|
|
||||||
namespace StaticMapLite\Canvas;
|
namespace StaticMapLite\Canvas;
|
||||||
|
|
||||||
class Canvas
|
class Canvas implements CanvasInterface
|
||||||
{
|
{
|
||||||
protected $image = null;
|
protected $image = null;
|
||||||
|
|
||||||
|
/** @var int $tileSize */
|
||||||
protected $tileSize = 256;
|
protected $tileSize = 256;
|
||||||
|
|
||||||
|
/** @var int $width */
|
||||||
protected $width = 0;
|
protected $width = 0;
|
||||||
|
|
||||||
|
/** @var int $height */
|
||||||
protected $height = 0;
|
protected $height = 0;
|
||||||
|
|
||||||
|
/** @var float $centerX */
|
||||||
protected $centerX = 0;
|
protected $centerX = 0;
|
||||||
|
|
||||||
|
/** @var float $centerY */
|
||||||
protected $centerY = 0;
|
protected $centerY = 0;
|
||||||
|
|
||||||
|
/** @var int $zoom */
|
||||||
protected $zoom = 0;
|
protected $zoom = 0;
|
||||||
|
|
||||||
public function __construct(int $width, int $height, int $zoom, float $centerX, float $centerY)
|
public function __construct(int $width, int $height, int $zoom, float $centerX, float $centerY)
|
||||||
|
14
src/Canvas/CanvasInterface.php
Normal file
14
src/Canvas/CanvasInterface.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace StaticMapLite\Canvas;
|
||||||
|
|
||||||
|
interface CanvasInterface
|
||||||
|
{
|
||||||
|
public function getImage();
|
||||||
|
public function getWidth(): int;
|
||||||
|
public function getHeight(): int;
|
||||||
|
public function getCenterX(): float;
|
||||||
|
public function getCenterY(): float;
|
||||||
|
public function getZoom(): int;
|
||||||
|
public function getTileSize(): int;
|
||||||
|
}
|
@ -4,13 +4,14 @@ namespace StaticMapLite\CanvasTilePainter;
|
|||||||
|
|
||||||
use StaticMapLite\Canvas\Canvas;
|
use StaticMapLite\Canvas\Canvas;
|
||||||
use StaticMapLite\TileResolver\TileResolver;
|
use StaticMapLite\TileResolver\TileResolver;
|
||||||
|
use StaticMapLite\TileResolver\TileResolverInterface;
|
||||||
|
|
||||||
class CanvasTilePainter
|
class CanvasTilePainter
|
||||||
{
|
{
|
||||||
/** @var Canvas $canvas */
|
/** @var Canvas $canvas */
|
||||||
protected $canvas;
|
protected $canvas;
|
||||||
|
|
||||||
/** @var TileResolver $tileResolver */
|
/** @var TileResolverInterface $tileResolver */
|
||||||
protected $tileResolver;
|
protected $tileResolver;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
@ -51,11 +52,9 @@ class CanvasTilePainter
|
|||||||
$tileData = $this->tileResolver->fetch($this->canvas->getZoom(), $x, $y);
|
$tileData = $this->tileResolver->fetch($this->canvas->getZoom(), $x, $y);
|
||||||
|
|
||||||
if ($tileData) {
|
if ($tileData) {
|
||||||
$tileImage = imagecreatefromstring($tileData);
|
$tileImage = $this->createTile($tileData);
|
||||||
} else {
|
} else {
|
||||||
$tileImage = imagecreate($this->canvas->getTileSize(), $this->canvas->getTileSize());
|
$tileImage = $this->createErrorTile();
|
||||||
$color = imagecolorallocate($tileImage, 255, 255, 255);
|
|
||||||
@imagestring($tileImage, 1, 127, 127, 'err', $color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$destX = ($x - $startX) * $this->canvas->getTileSize() + $offsetX;
|
$destX = ($x - $startX) * $this->canvas->getTileSize() + $offsetX;
|
||||||
@ -67,4 +66,18 @@ class CanvasTilePainter
|
|||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function createTile(string $tileData)
|
||||||
|
{
|
||||||
|
return imagecreatefromstring($tileData);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function createErrorTile()
|
||||||
|
{
|
||||||
|
$tileImage = imagecreate($this->canvas->getTileSize(), $this->canvas->getTileSize());
|
||||||
|
$color = imagecolorallocate($tileImage, 255, 255, 255);
|
||||||
|
@imagestring($tileImage, 1, 127, 127, 'err', $color);
|
||||||
|
|
||||||
|
return $tileImage;
|
||||||
|
}
|
||||||
}
|
}
|
10
src/CanvasTilePainter/CanvasTilePainterInterface.php
Normal file
10
src/CanvasTilePainter/CanvasTilePainterInterface.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace StaticMapLite\CanvasTilePainter;
|
||||||
|
|
||||||
|
interface CanvasTilePainterInterface
|
||||||
|
{
|
||||||
|
public function setCanvas(Canvas $canvas): CanvasTilePainterInterface;
|
||||||
|
public function setTileResolver(TileResolver $tileResolver): CanvasTilePainterInterface;
|
||||||
|
public function paint(): CanvasTilePainterInterface;
|
||||||
|
}
|
@ -7,15 +7,18 @@ use StaticMapLite\CanvasTilePainter\CanvasTilePainter;
|
|||||||
use StaticMapLite\Element\Marker\AbstractMarker;
|
use StaticMapLite\Element\Marker\AbstractMarker;
|
||||||
use StaticMapLite\Element\Polyline\Polyline;
|
use StaticMapLite\Element\Polyline\Polyline;
|
||||||
use StaticMapLite\ElementPrinter\Marker\ExtraMarkerPrinter;
|
use StaticMapLite\ElementPrinter\Marker\ExtraMarkerPrinter;
|
||||||
use StaticMapLite\ElementPrinter\Marker\MarkerPrinter;
|
|
||||||
use StaticMapLite\ElementPrinter\Polyline\PolylinePrinter;
|
use StaticMapLite\ElementPrinter\Polyline\PolylinePrinter;
|
||||||
use StaticMapLite\TileResolver\CachedTileResolver;
|
use StaticMapLite\TileResolver\CachedTileResolver;
|
||||||
|
|
||||||
class Printer
|
class Printer
|
||||||
{
|
{
|
||||||
|
/** @var int $maxWidth */
|
||||||
protected $maxWidth = 1024;
|
protected $maxWidth = 1024;
|
||||||
|
|
||||||
|
/** @var int $maxHeight */
|
||||||
protected $maxHeight = 1024;
|
protected $maxHeight = 1024;
|
||||||
|
|
||||||
|
/** @var */
|
||||||
protected $tileResolver = null;
|
protected $tileResolver = null;
|
||||||
|
|
||||||
/** @var Canvas $canvas */
|
/** @var Canvas $canvas */
|
||||||
|
@ -4,6 +4,7 @@ namespace StaticMapLite\TileResolver;
|
|||||||
|
|
||||||
class CachedTileResolver extends TileResolver
|
class CachedTileResolver extends TileResolver
|
||||||
{
|
{
|
||||||
|
/** @var string $tileCacheBaseDir */
|
||||||
protected $tileCacheBaseDir = '../cache/tiles';
|
protected $tileCacheBaseDir = '../cache/tiles';
|
||||||
|
|
||||||
public function fetch(int $zoom, int $x, int $y): string
|
public function fetch(int $zoom, int $x, int $y): string
|
||||||
@ -25,12 +26,12 @@ class CachedTileResolver extends TileResolver
|
|||||||
return $tile;
|
return $tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tileUrlToFilename(string $url): string
|
protected function tileUrlToFilename(string $url): string
|
||||||
{
|
{
|
||||||
return $this->tileCacheBaseDir . '/' . str_replace(['http://', 'https://'], '', $url);
|
return $this->tileCacheBaseDir . '/' . str_replace(['http://', 'https://'], '', $url);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkTileCache(string $url)
|
protected function checkTileCache(string $url)
|
||||||
{
|
{
|
||||||
$filename = $this->tileUrlToFilename($url);
|
$filename = $this->tileUrlToFilename($url);
|
||||||
|
|
||||||
@ -41,7 +42,7 @@ class CachedTileResolver extends TileResolver
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function writeTileToCache($url, $data): CachedTileResolver
|
protected function writeTileToCache($url, $data): CachedTileResolver
|
||||||
{
|
{
|
||||||
$filename = $this->tileUrlToFilename($url);
|
$filename = $this->tileUrlToFilename($url);
|
||||||
|
|
||||||
@ -52,7 +53,7 @@ class CachedTileResolver extends TileResolver
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function mkdir_recursive($pathname, $mode): bool
|
protected function mkdir_recursive($pathname, $mode): bool
|
||||||
{
|
{
|
||||||
is_dir(dirname($pathname)) || $this->mkdir_recursive(dirname($pathname), $mode);
|
is_dir(dirname($pathname)) || $this->mkdir_recursive(dirname($pathname), $mode);
|
||||||
return is_dir($pathname) || @mkdir($pathname, $mode);
|
return is_dir($pathname) || @mkdir($pathname, $mode);
|
||||||
|
@ -4,11 +4,13 @@ namespace StaticMapLite\TileResolver;
|
|||||||
|
|
||||||
use Curl\Curl;
|
use Curl\Curl;
|
||||||
|
|
||||||
class TileResolver
|
class TileResolver implements TileResolverInterface
|
||||||
{
|
{
|
||||||
protected $tileLayerUrl = null;
|
/** @var string $tileLayerUrl */
|
||||||
|
protected $tileLayerUrl;
|
||||||
|
|
||||||
protected $curl = null;
|
/** @var Curl $curl */
|
||||||
|
protected $curl;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
10
src/TileResolver/TileResolverInterface.php
Normal file
10
src/TileResolver/TileResolverInterface.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace StaticMapLite\TileResolver;
|
||||||
|
|
||||||
|
interface TileResolverInterface
|
||||||
|
{
|
||||||
|
public function setTileLayerUrl(string $tileLayerUrl): TileResolver;
|
||||||
|
public function resolve(int $zoom, int $x, int $y): string;
|
||||||
|
public function fetch(int $zoom, int $x, int $y): string;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user