Я записал Angular2 GMap компонент в гораздо большее приложение стека MEAN - которое работает нормально, и я упомяну это только для более полной картины проекта - и сам GMap работает крайне медленно, даже с нулевыми маркерами создается.
Карта первоначально отображается через несколько секунд, которые я до сих пор записывал в режим разработки Angular, работающий медленнее, чем в процессе производства, но взаимодействие с пользователем методом перетаскивания и изменения масштаба занимает от десяти до двадцати секунд каждый, чтобы фактически перерисовать карту, до точки карты, непригодной для использования с точки зрения пользователя.
РЕДАКТИРОВАТЬ: В дополнительном тестировании, я заметил, что процессор на 100%, а карта увеличивается. Я нажимаю кнопку "+", чтобы увеличить, несколько файлов .png запрашиваются, процессор максимально на несколько секунд Затем карта, наконец, перерисовывается и снова готова принимать события. Это ключ?
РЕДАКТИРОВАТЬ2: Если я удаляю свой ключ API Google из тега скрипта в index.html, масштабирование происходит быстрее и работает, как и ожидалось. Перетаскивание по-прежнему работает недостаточно хорошо, чтобы его можно было использовать:
<!--<script src="https://maps.googleapis.com/maps/api/js?key=MyKEY"></script>-->
<script src="https://maps.googleapis.com/maps/api/js"></script>
Это какое-то ограничение на мой ключ API? Конечно, если использовать этот способ, карта имеет наложение с надписью «только для целей разработки», поэтому удаление ключа не является ответом. END-EDIT2
РЕДАКТИРОВАТЬ3: Следуя нескольким различным примерам быстрого запуска, я изменил код из исходной реализации ниже. Теперь нет наложения «разработка», масштабирование работает замечательно, но перетаскивание все еще очень медленное:
index.html:
<script src="https://maps.googleapis.com/maps/api/js?key=MYKEY" async defer></script>
googlemap.component.ts:
ngOnInit() {
google.maps.event.addDomListener(window, 'load', this.initMap);
}
initMap() {
const mapOptions = {
center: new google.maps.LatLng(myLAT, myLONG),
zoom: 7,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
this.franchiseeLocationsMap = new google.maps.Map(document.getElementById('my-map'), mapOptions);
}
Если честно, я не уверен, что здесь меняет дело. Теперь карта ожидает полной загрузки DOM перед инициализацией? Это противоречит тому, что я ожидал. Нужно ли мне добавить еще одного слушателя, чтобы обнаруживать перетаскивания карты и как-то реагировать? Теперь я ближе к решению, но больше смущен результатом! END-EDIT3
Вот чрезвычайно сжатый код, который я использую. Даже в этом очень простом состоянии карта вялая:
googlemap.component.ts:
import { Component, OnInit } from '@angular/core';
declare const google: any;
@Component({
selector: 'app-googlemap',
templateUrl: './googlemap.component.html',
styleUrls: ['./googlemap.component.css']
})
export class GoogleMapComponent implements OnInit {
myMap: any;
constructor() {
}
ngOnInit() {
const mapOptions = {
center: new google.maps.LatLng(myLAT, myLONG),
zoom: 5,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
this.myMap = new google.maps.Map(document.getElementById('my-map'), mapOptions);
}
}
googlemap.component.html
<div id="my-map"></div>
index.html
<script src="https://maps.googleapis.com/maps/api/js?key=MYKEY"></script>
Поскольку этот код настолько скудный, а перемещение по карте очень медленное, я, должно быть, делаю что-то в корне неверное. Я следовал документации API карт Google и подтвердил несколько примеров в Интернете, использующих этот подход. Какие детали я ошибся?