Справочник по C#

    Исходники по языку программирования CSharp

    API Google изображений просмотра улиц: Справочник по C#

    /
    /
    /
    41 Views


          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=600×300&location=55.911508,37.397529&heading=240&pitch=1&sensor=false&fov=120

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

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

    • size указывает размер результирующего изображения в пикселях. Размер указывается в формате {width}x{height}. Например, параметр size=600×800 возвращает изображение шириной 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». Ниже представлены примеры работы тестового проекта.

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

    API Google изображений просмотра улиц: Справочник по C#

    0.00 (0%) 0 votes

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest
    moyadcode10
    moyadcode11
    moyadcode9