Интеграция Google Maps в Angular
Development, Java | Комментировать запись
Google Maps – это популярный картографический сервис от Google, который поддерживает широкий спектр настроек конфигурации. Добавив Google Maps в свое приложение, вы сможете предоставить вашим пользователям больше контекстной информации, не только адрес или набор координат.
Angular Google Maps – это набор компонентов, которые предоставляют приложениям Angular инструменты поддержки API карт Google.
В этом руководстве вы научитесь использовать библиотеку @agm/core и создадите карту с отметкой на ней.
Требования
- Локальная установка Node.js (следуя этим инструкциям для mac OS, Ubuntu, Debian, CentOS).
- Вам может пригодиться базовое понимание процесса настройки проекта и компонентов Angular.
- JavasScript API ключ для Google Maps. Для этого потребуется:
- Создать учетную запись Google.
- Войти в консоль Google Cloud Platform.
- Создать новый проект.
- Включить Google Maps JavasScript API для этого проекта.
- И создать учетные данные для ключа API.
Примечание: Чтобы не получать сообщения «For development purposes only» при использовании API Google Карт, необходимо предоставить действующую кредитную карту и связать ее с платежной учетной записью вашего проекта Google Cloud Project. Но для выполнения данного мануала этого делать не нужно.
Это руководство было протестировано на версиях Node 14.13.1, npm 6.14.8, angular 10.1.5 и @agm/core 1.1.0.
1: Настройка проекта
Для создания нового проекта Angular можно использовать @angular/cli.
Введите в терминал следующую команду:
npx @angular/cli new angular-google-maps-example --style=css --routing=false --skip-tests
Она настроит новый проект Angular с заданными CSS-стилями (также можно использовать стили Sass, Less или Stylus) и без маршрутизации, а также пропустит все тесты.
Перейдите в только что созданный каталог проекта:
cd angular-google-maps-example
Здесь выполните следующую команду, которая установит @agm/core:
npm install @agm/core@1.1.0
Примечание: На сегодняшний день существует более современная версия 3.0.0-beta.0. Если вы хотите использовать эту версию, вам также следует установить @types/googlemaps.
Однако мы должны предупредить, что в ходе тестирования этого мануала с 3.0.0-beta.0 мы столкнулись с некоторыми проблемами. Чтобы исправить их, нам пришлось понизить версию до @types/googlemaps v3.39.12 и, в конечном итоге, до @agm/core (v1.1.0).
Откройте файл app.module.ts в редакторе кода и включите в нем поддержку библиотеки @agm/core:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AgmCoreModule } from '@agm/core';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AgmCoreModule.forRoot({
apiKey: 'YOUR_GOOGLE_MAPS_API_KEY_GOES_HERE'
})
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Обязательно замените YOUR_GOOGLE_MAPS_API_KEY_GOES_HERE своим настоящим ключом API.
Важно! Ни при каких обстоятельствах не храните ключ API в файлах, которые включены в публичные репозитории (например, GitHub), поскольку злоумышленник может найти его там и использовать в своих целях.
Теперь приложение поддерживает @agm/core. Пора создать пользовательский компонент для использования этой библиотеки.
2: Создание компонента карты
Итак, на данном этапе у нас есть всё, чтобы создать пользовательский компонент карты. Это делается так:
npx @angular/cli generate component MyAgmExample --flat=true --inlineStyle=true --inlineTemplate=true
Эта команда создаст новый компонент MyAgmExample в каталоге src/app, но без отдельного файла CSS или HTML. Она также добавит новый компонент в app.module.ts.
Далее откройте новый файл MyAgmExample.component.ts и отредактируйте его, чтобы настроить использование agm-map:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'my-agm-example',
template: `
<agm-map
[latitude]="lat"
[longitude]="lng"
[mapTypeId]="mapType"
>
</agm-map>
`,
styles: [
'agm-map { height: 300px; }'
]
})
export class MyAgmExampleComponent implements OnInit {
lat = 21.3069;
lng = -157.8583;
mapType = 'satellite';
constructor() { }
ngOnInit(): void { }
}
Это создаст новую карту с типом satellite, широтой 21.3069 и долготой -157.8583 (latitude и longitude соответственно, в результате получим Гонолулу, Гавайи).
Примечание: Вы должны явно указать высоту элемента agm-map в CSS.
Затем отредактируйте app.component.html, чтобы приложение могло использовать наш новый компонент my-agm-example:
<my-agm-example></my-agm-example>
Затем запустите приложение, чтобы посмотреть, как всё работает на данный момент.
npm start
Открыв приложение в браузере, вы должны увидеть карту Google; это будет вид на Гонолулу со спутника.
3: Сборка продвинутой карты с метками и границами
Внутри шаблона компонента <agm-map> вы можете разместить ряд других компонентов. Кроме того, вы можете добавить новые параметры конфигурации. В этом руководстве мы поговорим только о добавлении на нашу карту простых геометрических форм. Конечно, вы можете самостоятельно ознакомиться с полной документацией, чтобы узнать обо всех доступных параметрах.
Внося в компонент <agm-map> значения широты и долготы, вы центрируете карту по этой конкретной координате. Однако вы можете разместить любое количество маркеров и фигур в любой части карты.
Откройте файл MyAgmExample.component.ts и включите поддержку agm-marker и agm-rectangle:
@Component({
selector: 'my-agm-example',
template: `
<agm-map
[latitude]="lat"
[longitude]="lng"
[zoom]="2"
(mapClick)="addMarker($event.coords.lat, $event.coords.lng)"
>
<agm-marker
*ngFor="let marker of markers"
[latitude]="marker.lat"
[longitude]="marker.lng"
[opacity]="marker.alpha"
[markerDraggable]="true"
(markerClick)="selectMarker($event)"
>
</agm-marker>
<agm-rectangle
[north]="max('lat')"
[east]="max('lng')"
[south]="min('lat')"
[west]="min('lng')"
>
</agm-rectangle>
</agm-map>
<p *ngIf="selectedMarker">
Lat: {{ selectedMarker.lat }} Lng: {{ selectedMarker.lng }}
</p>
`,
styles: [
'agm-map { height: 300px; }'
],
})
export class MyAgmAdvancedExample {
lat = 48.75606;
lng = -118.859;
selectedMarker = null;
markers = [
// These are all just random coordinates from https://www.random.org/geographic-coordinates/
{ lat: 22.33159, lng: 105.63233, alpha: 1 },
{ lat: 7.92658, lng: -12.05228, alpha: 1 },
{ lat: 48.75606, lng: -118.859, alpha: 1 },
{ lat: 5.19334, lng: -67.03352, alpha: 1 },
{ lat: 12.09407, lng: 26.31618, alpha: 1 },
{ lat: 47.92393, lng: 78.58339, alpha: 1 }
];
addMarker(lat: number, lng: number) {
this.markers.push({ lat, lng, alpha: 0.4 });
}
max(coordType: 'lat' | 'lng'): number {
return Math.max(...this.markers.map(marker => marker[coordType]));
}
min(coordType: 'lat' | 'lng'): number {
return Math.min(...this.markers.map(marker => marker[coordType]));
}
selectMarker(event) {
this.selectedMarker = {
lat: event.latitude,
lng: event.longitude
};
}
}
Прежде всего, мы установили на самой карте два дополнительных свойства: масштабирование (zoom) и обработчик событий mapClick. Параметр zoom показывает, в каком масштабе нужно отображать карту; здесь 0 – самый мелкий масштаб отображения, и он может увеличиться примерно до 22 (в зависимости от местоположения и типа карты). Обработчик mapClick генерирует событие всякий раз, когда пользователь кликает по карте. В нашем примере каждый новый клик пользователя по карте добавляет на нее новую метку.
Метки на карте напоминают булавки. У них есть следующие свойства:
- latitude и longitude (обязательные параметры).
- opacity меняет степень прозрачности метки.
- markerDraggable позволяет пользователю удерживать метку и перетаскивать ее по карте.
- markerClick позволяет обрабатывать события, которые возникают, когда пользователь кликает по меткам.
В этом мануале обработчик markerClick запускает addMarker, который ставит на карте новую булавку с другим уровнем непрозрачности.
В коде есть массив для хранения всех меток карты. Этот массив был заполнен парой случайных мест.
Кроме того, мы добавили на карту форму прямоугольника. Границы прямоугольника – север, юг, восток и запад – рассчитываются по крайним точкам широт и долгот всех меток. Основываясь на этом вычислении, прямоугольник будет перерисовываться по внешним координатам новой метки в том случае, если она появится за пределами текущего прямоугольника.
Есть и другие доступные функции, например, AgmPolygon, AgmCircle, AgmPolyLine. Кроме того, существует AgmDataLayer, который позволяет использовать GeoJSON для нанесения любой их этих функций на карту.
Важно! После выполнения мануала рекомендуем вам войти в свою консоль Google Cloud и на всякий случай удалить ключ API и связанную с ним учетную запись для выставления счетов.
Теперь у вас есть карта Google с метками и границами.
Заключение
В этом мануале вы узнали, как внедрить библиотеку @agm/core и Google Maps API в своем приложении Angular.
В связке эти инструменты имеют большой потенциал: к примеру, с их помощью вы можете показать своим посетителям расположение ваших предприятий, точек продажи, туристических направлений и достопримечательностей.
Если вы хотите узнать об Angular больше, обратитесь к этому разделу нашего Информатория.
Tags: Angular, AngularJS, Google, Google Maps