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
Ниже перечислены допустимые параметры и их возможные значения.
Обязательные параметры
Добавьте на форму следующие элементы управления, а так же выставьте определенные свойства:
1)splitContainer1 - элемент управления, состоящий из подвижной строки, которая разделяет область отображения контейнера на две панели с изменяемыми размерами;
2)pictureBox1 - элемент управления для отображения рисунка;
3)groupBox1 - элемент управления Windows, который отображает рамку вокруг группы элементов управления и, необязательно, заголовок над ней;
4)trackBar1 - элемент управления, представляющий стандартную полосу прокрутки Windows, для изменения направления камеры по компасу;
Сделайте двойной клик по пустому пространству главной формы, вы перейдете в автоматически созданный метод загрузки главной формы «Form1_Load». Добавьте в него приведенный ниже код установки настроек для элемента управления «gMapControl1».
На использование API Google изображений просмотра улиц распространяются следующие ограничения: 25 000 запросов изображений просмотра улиц за 24 часа. В случае превышения указанных ограничений сервер возвращает пользователю код статуса HTTP 403 и выводит следующее изображение, свидетельствующее о превышении квоты. Дополнительную информацию по данной службе вы можете получить по адресу https://developers.google.com.
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.
Добавьте на форму следующие элементы управления, а так же выставьте определенные свойства:
1)splitContainer1 - элемент управления, состоящий из подвижной строки, которая разделяет область отображения контейнера на две панели с изменяемыми размерами;
2)pictureBox1 - элемент управления для отображения рисунка;
3)groupBox1 - элемент управления Windows, который отображает рамку вокруг группы элементов управления и, необязательно, заголовок над ней;
4)trackBar1 - элемент управления, представляющий стандартную полосу прокрутки Windows, для изменения направления камеры по компасу;
- Minimum = 0
- Maximum = 360
- SmallChange = 5
- Minimum = -90
- Maximum = 90
- SmallChange = 5
- Minimum = 0
- Maximum = 120
- SmallChange = 5
Сделайте двойной клик по пустому пространству главной формы, вы перейдете в автоматически созданный метод загрузки главной формы «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». Ниже представлены примеры работы тестового проекта.
Ссылка для скачивания примера: Яндекс.Диск
Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!