Google Static Maps v2

Класс Google Static Maps помогает встаивать изображения Google Maps на вашу веб-страницу без необходимости использовать JavaScript или какой-либо динамической загрузки страницы.

Пространство имен: \Web\Google

Расположение файла:web/google/staticmap.php

Specifying Location

API Static Maps использует строки (адреса) или числа (значения широты и долготы) для указания местоположений на карте. (Эти значения определяют так называемое, геокодированным местоположением)

Чтобы указать местоположение, вы можете использовать параметр center и/или размещать любые дополнительные метки с помощью параметра markers в местах на карте.

Как указано выше, как с параметром center, так и с параметром markers, вы можете использовать адреса или долготу-широту для определения местоположения, как показано в примерах ниже.

The center parameter

center определяет центр карты - точку равноудаленную от всех краев карты. Этот параметр принимает местоположение либо в виде пары {широта, долгота}, разделенных запятыми (например, «24.582720, -78.056685»), или в виде строкового адреса (например, «Острова Теркс и Кайкос»), идентифицирующего уникальное местоположение на поверхности Земли.

Обратите внимание, что предоставленные адреса могут быть в виде либо точного местоположения, например точный адрес улицы, ломаные линии - маршруты, либо многоугольные области, такие как города, страны или даже национальные парки.

Если, например, вы укажете $map→center('Grand Canyon'); как адрес, сервер статической карты определит местоположение и вернет изображение карты, используя центральную точку области в качестве центра адреса.

Примеры:

$map = new \Web\Google\StaticMap();
// by area
$map->center('富士山'); // 'Mont Fuji' area
// by address
$map->center("D'Arblay Street, London"); // F3 will escape spaces, quotes, and special characters for you
// by latitude and longitude values
$map->center('35.360496,138.727798'); // for example retrieved from a DB
The markers parameter

Параметр markers определяет набор из одного или более маркеров на множестве местоположений. Каждый дескриптор маркера должен содержать набор из одного или нескольких местоположений, определяющих, где разместить маркер на карте. Эти места разделяются вертикальной чертой (|).

Пример:

$map = new \Web\Google\StaticMap();
$map->markers('color:blue|label:S|San Francisco,CA'); // you can use an address or lat,long coordinates

Плагин автоматически закодирует ваши настройки, так что не беспокойтесь об этом. Ознакомьтесь с документацией по API статических карт Google V2, чтобы увидеть полную документацию по маркерам.

Images formats

Изображения могут быть возвращены в нескольких распространенных форматах веб-графики: GIF, JPEG и PNG. Вы можете использовать параметр format, который принимает одно из следующих значений:

  • 'png8'или 'png'(по умолчанию) указывает 8-битный формат PNG.
  • 'png32' указывает 32-битный формат PNG.
  • 'gif' указывает формат GIF.
  • 'jpg' определяет формат сжатия JPEG.
  • 'jpg-baseline' определяет непрогрессивный формат сжатия JPEG.

Пример:

$map = new \Web\Google\StaticMap();
$map->format('jpg'); // progressive "lossy" JPEG compression format

Maps Zoom level

Карты на Google Maps имеют целочисленный «уровень масштабирования», который определяет разрешение текущего просмотра.

Уровни масштабирования от 0(самый низкий уровень масштабирования, при котором весь мир можно увидеть на одной карте) до 21+(вплоть до отдельных зданий).

Примечание. Уровни масштабирования различаются в зависимости от местоположения, и не все уровни масштабирования отображаются во всех местах на Земле.

Пример:

$map = new \Web\Google\StaticMap();
$map->zoom(12); // resolution of the view

Images sizes

Параметр size, в сочетании с center, определяет зону покрытия карты. Он также определяет выходной размер карты в пикселях при умножении на scale значение (которое по умолчанию равно 1).

В отличие от других, этот параметр не имеет значения по умолчанию, и вы должны указать его в своем приложении, иначе картографический сервер отклонит ваш запрос и вернет сообщение об ошибке.

Пример:

$map = new \Web\Google\StaticMap();
$map->size('640x480'); // in pixels and multiplied by scale

Scale Values

Значение scale умножается на size чтобы определить фактический выходной размер изображения в пикселях без изменения зоны покрытия карты. (Значение по умолчанию - 1; допустимые значения - 1, 2 и только для клиентов API Карт для бизнеса - 4).

Пример:

$map = new \Web\Google\StaticMap();
$map->scale(2); // size multiplier

Примечание . При таргетинге на мобильные устройства используйте scale параметр, чтобы возвращать изображения карт с более высоким разрешением, которые решают проблемы с экранами с высоким разрешением мобильных устройств (дополнительные сведения см. В документации Google API Scale Values ).

Maps types

API статических карт Google создает карты в нескольких форматах, перечисленных ниже:

  • roadmap(по умолчанию) указывает стандартное изображение дорожной карты, как обычно отображается на веб-сайте Google Maps. Если значение типа карты не указано, API статических карт по умолчанию обслуживает фрагменты дорожной карты.
  • satellite указывает спутниковое изображение.
  • terrain указывает изображение карты физического рельефа, показывающее рельеф и растительность.
  • hybrid указывает гибрид изображения со спутника и дорожной карты, показывая прозрачный слой основных улиц и названий мест на спутниковом изображении.

Пример:

$map->maptype( 'satellite' ); // Note: not all satellite views appear at all locations on the earth.

Sensor

Для использования API статических карт Google необходимо указать, использует ли ваше приложение «датчик» (например, GPS-локатор) для определения местоположения пользователя. Это особенно важно для мобильных устройств, и Google решил сделать его обязательным параметром при запросе статической карты. Это означает, что значения по умолчанию нет, и вы должны указать, использует ли ваше приложение датчик, иначе картографический сервер отклонит ваш запрос и вернет сообщение об ошибке.

Если установлено значение 'true', на мобильных устройствах API карт Google будет пытаться получить доступ к встроенному GPS, а в браузере desktop'а, в зависимости от настроек конфиденциальности, вы можете получить сообщение о том, что веб-сайт пытается определить ваше местоположение.

Если вы не уверены в этом «датчике», установите его 'false'(как строку, а не логическое значение!).

$map->sensor( 'false' ); // 'true' or 'false' as a string, not a boolean!

Методы

dump

Создание карты с помощью Google Static Maps API v2

string dump (  )

Этот метод отправляет запрос в службу Google Static Maps API и возвращает карту в виде необработанного изображения, которое вы можете сохранить или отобразить на своей веб-странице.

Пример:

$map = new \Web\Google\StaticMap();
 
$map->center('Pulau Tomea'); $map->maptype('satellite');
$map->size('320x240'); $map->zoom('10');
 
// we'll save the map in TEMP for example
$map_filename = $f3->get('TEMP').'map.png'; // by default returned maps images are in .png format
 
// save into a file the result of the API call retrieved by dump()
$f3->write($map_filename, $map->dump());
 
// use the image in the HTML page
printf ('<img src="/%s" alt="Map of Pulau Tomea in Lovely Indonesia" />', $map_filename);

У этого решения есть несколько недостатков: вам нужно записать файл на свой сервер и, что наиболее важно, скрипт должен дождаться ответа от Google API, чтобы продолжить синтаксический анализ и визуализацию вашей страницы. Если по какой-либо причине API Google недоступен, вся ваша страница застрянет в том самом месте, где должна появиться статическая карта.

Давайте теперь настроим асинхронное решение. Сначала нам нужно определить маршрут, по которому F3 будет обрабатывать запрос. Таким образом, страница может продолжать отображаться, пока браузер параллельно отправляет запрос на этот новый маршрут:

$f3->route('GET /static-map/@mapargs', function($f3, $args) {
 
	parse_str($args['mapargs']); // gets variables from the query string
 
	$map = new \Web\Google\StaticMap();
 
	$map->center(isset($center)?$center:'Center of the World');
	// override default maptype 'roadmap'
	$map->maptype(isset($maptype)?$maptype:'satellite');
	// override default format 'png'
	$map->format($format=(isset($format)?$format:'jpg'));
	// size is mandatory! no default value. set default size '320x200'
	$map->size(isset($size)?$size:'320x200');
	// override default zoom '12'
	$map->zoom(isset($zoom)?$zoom:'14');
	// override default scale '1'
	$map->scale(isset($scale)?$scale:'2');
	// sensor is mandatory! no default value. set sensor to 'false'
	$map->sensor(isset($sensor)?$sensor:'false');
 
	// send raw image map to browser
	header('Content-type: image/'.$format);
	echo $map->dump();
},
	3600*24*30 // Save result of the request in F3 cache for 30 days
);

Мы готовы асинхронно получить статическую карту из Google API:

echo '<img src="/static-map/size=640x480&scale=1&center=Mont%20Fuji" />';

или, скорее всего, как в шаблоне:

<img src="/static-map/maptype=hybrid&center={{@MAP.center}}" alt="{{@MAP.title}}" />

Карта Пулау Томеа в Индонезии

Вы можете сделать больше с помощью API статических карт Google, особенно в отношении маркеров и стилизованных карт . Дополнительные сведения о дополнительных функциях см. В официальном руководстве разработчика API статических карт Google версии 2 .

Печать/экспорт