API Google изображений просмотра улиц

      API Google изображений просмотра улиц позволяет встраивать в веб-страницы статические (неинтерактивные) панорамы и уменьшенные изображения просмотра улиц без применения JavaScript. Область просмотра определяется с помощью параметров URL, которые отправляются через стандартный HTTP-запрос, и возвращается в виде статического изображения. Возвращаемые изображения просмотра улиц могут иметь любой размер, вплоть до 640 x 640 пикселей.

      На использование API Google изображений просмотра улиц распространяются следующие ограничения: 25 000 запросов изображений просмотра улиц за 24 часа. В случае превышения указанных ограничений сервер возвращает пользователю код статуса HTTP 403 и выводит следующее изображение, свидетельствующее о превышении квоты. Дополнительную информацию по данной службе вы можете получить по адресу 
https://developers.google.com.
      Параметры запроса разделяются амперсандами (&), что является стандартом для всех URL. Рассмотрим пример формирования запроса к службе «API Google изображений просмотра улиц» и возвращаемое службой изображение, для координат "55.911508,37.397529":
http://maps.googleapis.com/maps/api/streetview?size=600x300&location=55.911508,37.397529&heading=240&pitch=1&sensor=false&fov=120

Ниже перечислены допустимые параметры и их возможные значения.

Обязательные параметры

  • size указывает размер результирующего изображения в пикселях. Размер указывается в формате {width}x{height}. Например, параметр size=600x800 возвращает изображение шириной 600 и высотой 800 пикселей. 
  • location может задаваться в форме текстовой строки, например, Москва, Химки, или пары значений широты и долготы в виде 55.911508,37.397529. API изображений просмотра улиц выполняет привязку к панораме, снятой в ближайшей к указанному местоположению точке. Изображения просмотра улиц регулярно обновляются, причем каждый раз точка съемки может несколько меняться. В связи с этим параметр location при обновлении изображений может оказаться привязанным к другой панораме.
  • sensor указывает, использовало или нет устройство, отправившее запрос, датчик местоположения (например, GPS) для определения координат точки, указанной в запросе. Допустимые значения – true или false.
Необязательные параметры
  • heading определяет направление камеры по компасу. Допускаются значения в диапазоне от 0 до 360 (оба определяют север). Значения 90 и 180 определяют восток и юг соответственно. Если направление не указано, вычисляется значение, определяющее расположение камеры по направлению к указанной точке location с места съемки ближайшей фотографии.
  • fov (по умолчанию имеет значение 90) определяет поле обзора изображения по горизонтали. Поле обзора выражается в градусах. Максимально допустимое значение составляет 120. При работе с областью просмотра фиксированного размера, как и в случае изображений просмотра улиц указанного размера, поле обзора по существу представляет масштабирование. Чем меньше значение, тем больше уровень масштабирования. (Влево: fov=120; вправо: fov=20)
  • pitch (по умолчанию имеет значение 0) определяет угол возвышения камеры относительно автомобиля просмотра улиц. В большинстве случаев, хотя и не всегда, камера направлена горизонтально. Положительные и отрицательные значения определяют подъем или опускание камеры. Значения 90 и -90 градусов определяют направление камеры вертикально вверх и вниз соответственно.
  • key (необязательный параметр) используется для идентификации приложения при определении квот, а также предоставляет доступ к отчетам в консоли интерфейсов API. 
Запустите Microsoft Visual Studio и создайте новый проект Windows Form.
      Добавьте на форму следующие элементы управления, а так же выставьте определенные свойства:
1)splitContainer1 - элемент управления, состоящий из подвижной строки, которая разделяет область отображения контейнера на две панели с изменяемыми размерами;
2)pictureBox1 - элемент управления для отображения рисунка;
3)groupBox1 - элемент управления Windows, который отображает рамку вокруг группы элементов управления и, необязательно, заголовок над ней;
4)trackBar1 - элемент управления, представляющий стандартную полосу прокрутки Windows, для изменения направления камеры по компасу;

  • Minimum = 0
  • Maximum = 360
  • SmallChange = 5
5)trackBar2 - элемент управления, представляющий стандартную полосу прокрутки Windows, для изменения угла возвышения камеры;
  • Minimum = -90
  • Maximum = 90
  • SmallChange = 5
6)trackBar3 - элемент управления, представляющий стандартную полосу прокрутки Windows, для изменения масштаба изображения (зум).
  • Minimum = 0
  • Maximum = 120
  • SmallChange = 5
      А так же в соответствии с инструкцией «Работа с картами в Windows Form с использованием GMap.NET» , добавьте в верхнюю часть элемента управления «splitContainer1», визуальный компонент «GMap.NET», а в нижнюю «pictureBox1». У вас получится приведенный ниже пример.

      Сделайте двойной клик по пустому пространству главной формы, вы перейдете в автоматически созданный метод загрузки главной формы «Form1_Load». Добавьте в него приведенный ниже код установки настроек для элемента управления «gMapControl1».
//Настройки для компонента GMap.
gMapControl1.Bearing = 0;

//CanDragMap - Если параметр установлен в True,
//пользователь может перетаскивать карту 
///с помощью правой кнопки мыши. 
gMapControl1.CanDragMap = true;

//Указываем, что перетаскивание карты осуществляется 
//с использованием левой клавишей мыши.
//По умолчанию - правая.
gMapControl1.DragButton = MouseButtons.Left;

gMapControl1.GrayScaleMode = true;

//MarkersEnabled - Если параметр установлен в True,
//любые маркеры, заданные вручную будет показаны.
//Если нет, они не появятся.
gMapControl1.MarkersEnabled = true;

//Указываем значение максимального приближения.
gMapControl1.MaxZoom = 18;

//Указываем значение минимального приближения.
gMapControl1.MinZoom = 2;

//Устанавливаем центр приближения/удаления
//курсор мыши.
gMapControl1.MouseWheelZoomType =
    GMap.NET.MouseWheelZoomType.MousePositionAndCenter;

//Отказываемся от негативного режима.
gMapControl1.NegativeMode = false;

//Разрешаем полигоны.
gMapControl1.PolygonsEnabled = true;

//Разрешаем маршруты
gMapControl1.RoutesEnabled = true;

//Скрываем внешнюю сетку карты
//с заголовками.
gMapControl1.ShowTileGridLines = false;

//Указываем, что при загрузке карты будет использоваться 
//2х кратное приближение.
gMapControl1.Zoom = 2;

//Указываем что будем использовать карты Yandex.
gMapControl1.MapProvider =
    GMap.NET.MapProviders.GMapProviders.YandexMap;
GMap.NET.GMaps.Instance.Mode =
    GMap.NET.AccessMode.ServerOnly;

//Если вы используете интернет через прокси сервер,
//указываем свои учетные данные.
GMap.NET.MapProviders.GMapProvider.WebProxy =
    System.Net.WebRequest.GetSystemWebProxy();
GMap.NET.MapProviders.GMapProvider.WebProxy.Credentials =
    System.Net.CredentialCache.DefaultCredentials;
      Так же добавьте в конец данного метода, приведенный ниже код, устанавливающий в элементе управления «gMapControl1», на событие «MouseClick», срабатывающее при клике любой клавишей мыши, событие «map_MouseClick».
//Устанавливаем свой метод на
//событие клика мышки.
gMapControl1.MouseClick += new MouseEventHandler(map_MouseClick);
      Добавьте после данного метода приведенный ниже код события «map_MouseClick». Данный метод выполняет проверку, была ли нажата правая клавиша мыши и в случае если данная проверка выполнена успешно, в переменные «lat» и «lng», заносятся координаты, а где был выполнен клик правой клавишей мыши, устанавливается зеленый маркер. Так же в данном методе вызывается метод «LoadStreetImage».
double lat, lng;
private void map_MouseClick(object sender, MouseEventArgs e)
{
    //Переменные для хранения 
    //координат устанавливаемого маркера.
    lat = 0.0;
    lng = 0.0;

    //Проверяем, что нажата правая клавиша мыши.
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        //Получаем координаты, где устанавливается новый маркер.
        lat = gMapControl1.FromLocalToLatLng(e.X, e.Y).Lat;
        lng = gMapControl1.FromLocalToLatLng(e.X, e.Y).Lng;


        //Создаем новый список маркеров, с указанием компонента 
        //в котором они будут использоваться и названием списка.
        GMap.NET.WindowsForms.GMapOverlay markersOverlay =
            new GMap.NET.WindowsForms.GMapOverlay(gMapControl1, "marker");

        //Инициализация нового ЗЕЛЕНОГО маркера, с указанием его координат.
        GMap.NET.WindowsForms.Markers.GMapMarkerGoogleGreen markerG =
            new GMap.NET.WindowsForms.Markers.GMapMarkerGoogleGreen(
            new GMap.NET.PointLatLng(lat, lng));

        //Добавляем маркеры в список маркеров.
        markersOverlay.Markers.Add(markerG);

        //Очищаем список маркеров компонента.
        gMapControl1.Overlays.Clear();

        //Добавляем в компонент, список маркеров.
        gMapControl1.Overlays.Add(markersOverlay);

        //Устанавливаем позицию карты.
        gMapControl1.Position = new GMap.NET.PointLatLng(lat, lng);

        //Указываем, что при загрузке карты будет использоваться 
        //17ти кратное приближение.
        gMapControl1.Zoom = 17;

        //Обновляем карту.
        gMapControl1.Refresh();

        LoadStreetImage(lat, lng, trackBar1.Value, trackBar2.Value, trackBar3.Value);
    }
}
      Добавьте в листинг главной формы, метод «LoadStreetImage» который реализует формирование и отправку запроса к службе API Google изображений просмотра улиц, а так же загрузку полученного изображения от службы, в элемент управления «pictureBox1». Данный метод принимает в качестве параметров координаты, где установлен маркер, значения угла поворота, возвышения камеры и масштаба.
public void LoadStreetImage(double lat, double lng , int heading, int pitch, int fov)
{
    try
    {
        var request = WebRequest.Create(
         String.Format(
"http://maps.googleapis.com/maps/api/streetview?size={0}x{1}&location={2},{3}&heading={4}&pitch={5}&sensor=false&fov={6}",
            pictureBox1.Width, pictureBox1.Height, lat, lng, heading, pitch, fov));

        using (var response = request.GetResponse())
        using (var stream = response.GetResponseStream())
        {
            pictureBox1.Image = Bitmap.FromStream(stream);
        }
    }
    catch { }
}
      Для изменения размеров получаемого от службы изображения, создайте событие «Scroll», у элементов управления «trackBar» и событие «Resize» у главной формы, с добавлением в созданные методы, вызова метода формирования/отправки запроса и чтения результата от службы «API Google изображений просмотра улиц».
LoadStreetImage(lat, lng, trackBar1.Value, trackBar2.Value, trackBar3.Value);
Ниже представлен полный код данных событий.
private void trackBar1_Scroll(object sender, EventArgs e)
{
    LoadStreetImage(lat, lng, trackBar1.Value, trackBar2.Value, trackBar3.Value);
}

private void trackBar2_Scroll(object sender, EventArgs e)
{
    LoadStreetImage(lat, lng, trackBar1.Value, trackBar2.Value, trackBar3.Value);
}

private void trackBar3_Scroll(object sender, EventArgs e)
{
    LoadStreetImage(lat, lng, trackBar1.Value, trackBar2.Value, trackBar3.Value);
}

private void Form1_Resize(object sender, EventArgs e)
{
    LoadStreetImage(lat, lng, trackBar1.Value, trackBar2.Value, trackBar3.Value);
}
      Запустите ваш проект, нажав на клавиатуре клавишу «F5». Найдите на карте населенный пункт и сделайте клик правой клавишей мыши на его территории. Если у данной службы есть изображение с данного места, оно автоматически будет загружено в элемент управления «pictureBox1». Для кругового осмотра данного места используете элемент управления «trackBar1», что бы посмотреть вниз или вверх, измените, положение ползунка элемента управления «trackBar2», а для приближения или удаления используете элемент управления «trackBar3». Ниже представлены примеры работы тестового проекта.

Ссылка для скачивания примера: Яндекс.Диск


Комментариев нет:

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!