всем привет
Новый auto fitBounds великолепен, но кажется, что можно сделать два улучшения:
Обход возможен, но довольно грязный
Спасибо
Это влияет и на меня. Я установил координаты центра, используя latitude
и longitude
на карте agm, но когда fitBounds
включен, он не центрируется по этим координатам (хотя маркера нет), вместо этого показан океан, как описано в @jscti.
+1 по предложению @jscti => когда на карте нет маркеров, fitBounds приземляется посреди Тихого океана. Может вообще ничего не должно делать?
Есть ли у кого-нибудь идеи, как можно добиться «ничего не делать», если на карте нет маркеров?
Также огромные поздравления (A ++) и спасибо за библиотеку, это потрясающе!
@jscti, не обходите », пожалуйста?
@ironstine
Когда маркера нет, я деактивирую fitBounds и принудительно увеличиваю широту / долготу / масштаб:
this.fitBounds = false;
setTimeout(() => {
this.latitude = this.DEFAULT_LATITUDE;
this.longitude = this.DEFAULT_LONGITUDE;
this.zoom = this.DEFAULT_ZOOM_VAL;
});
Если есть один маркер, я принудительно увеличиваю масштаб до определенного значения
Мне кажется, это работает достаточно хорошо.
<agm-map [latitude]="locations[0].lat()" [longitude]="locations[0].lng()" [fitBounds]="locations.length > 1" [zoom]="14">
<ng-template ngFor [ngForOf]="locations" let-location>
<agm-marker [latitude]="location.lat()" [longitude]="location.lng()" [agmFitBounds]="true"></agm-marker>
</ng-template>
</agm-map>
Привет
У меня другая проблема: мое приложение берет у пользователя широту и долгое время, чтобы центрировать карту в начале. Затем, когда он начинает составлять поля, многие адреса геолокализируются и затем отмечаются на карте. Но это не работает с fitbound по следующим причинам:
1) если я не определяю fitbounds, карта правильно центрируется в местоположении пользователя; когда пользователь компилирует поля, маркеры добавляются, но карта не вписывается в границы;
2) если я определяю fitbounds как true, карта будет центрирована в центре Тихого океана; когда пользователь компилирует поля, маркеры добавляются, но карта уменьшается.
Любая помощь? это мой настоящий код
HTML:
<agm-map #agmMap [style.height.px]="utilsService.calculateMapHeight()" [zoom]="13" [streetViewControl]="false" [fitBounds]="true" [latitude]="genericConstants.lat" [longitude]="genericConstants.lng">
<agm-marker *ngFor="let l of departuresMarkersList" [latitude]="l.lat" [longitude]="l.lng" [title]="l.name" [label]="l.name" [agmFitBounds]="true"></agm-marker>
<agm-marker *ngFor="let l of destinationsMarkersList" [latitude]="l.lat" [longitude]="l.lng" [title]="l.name" [label]="l.name" [agmFitBounds]="true"></agm-marker>
<agm-marker *ngIf="cardMarker !== undefined" [latitude]="cardMarker.lat" [longitude]="cardMarker.lng" [title]="cardMarker.name" [label]="cardMarker.name" [agmFitBounds]="true"></agm-marker>
</agm-map>
Ц:
this.utilsService.geoLocalize(fullAddress).then((landmark: Landmark) => {
const serviceLandmark = new ServiceLandmark(null, type, landmark.lat, landmark.lng, null, null, fullAddress);
if (type === 'departures') {
if (this.reopenIndex === -1) {
this.departuresMarkersList.push(serviceLandmark);
} else {
this.departuresMarkersList[this.reopenIndex] = serviceLandmark;
}
} else if (type === 'destinations') {
if (this.reopenIndex === -1) {
this.destinationsMarkersList.push(serviceLandmark);
} else {
this.destinationsMarkersList[this.reopenIndex] = serviceLandmark;
}
} else {
this.cardMarker = serviceLandmark;
}
}
Эта проблема была автоматически помечена как устаревшая, поскольку в последнее время не было активности. Он будет закрыт, если больше не будет активности. Спасибо за ваш вклад.
Легкий способ решения проблем.
Привет, извините, я думаю, что мой последний комментарий прозвучал немного резковато.
Я считаю, что сейчас в этой теме есть три проблемы:
Проблема: для fitBounds установлено значение true, но маркеры не добавлены. Это приводит к тому, что карта центрируется в центре океана.
Я бы пошел с предложением OP: если маркер не существует (и fitBounds активен), карта не должна быть центрирована (например, ничего не делать в дополнение к поведению карт Google по умолчанию).
Проблема: если для параметра fitBounds установлено значение true и только один маркер, карта будет увеличена до максимального уровня.
Для меня это не было проблемой, но я вижу случаи использования, в которых опция установки максимального масштабирования для fitBounds действительно была бы полезна.
Проблема: когда fitBounds активен без начальных маркеров, карта центрируется по океану. Если после этого будут добавлены маркеры, карта будет только уменьшена, чтобы отобразить все маркеры.
Я не совсем уверен, что правильно понял это и что с этим делать. Можно ли было бы «просто выполнить действие fitBounds» после уменьшения масштаба, чтобы показать все маркеры? Это приведет к уменьшению масштаба карты для отображения всех маркеров и повторному увеличению для отображения _только_ маркеров.
Так держать!
Хорошо, что в первом случае означает «Ничего не делать»? Что это будет показывать?
Во втором случае понятно, как он должен выглядеть, но реализовать его сложно. Кроме того, нечасто использовать fitBounds только с одним элементом.
1- Карта не должна автоматически центрироваться, а просто оставаться на указанной широте / долготе.
«Кроме того, нечасто использовать fitBounds только с одним элементом».
=> Да, но когда маркеры поступают с сервера, вы не знаете, нужно ли вам отображать 0,1, n
Проблема в том, что вы не указываете заданную широту / долготу, когда есть fitBounds.
Кроме того, как будет вести себя maxZoom, когда есть несколько точек, и они расположены ближе друг к другу, чем позволяет maxZoom
Проблема в том, что вы не указываете заданную широту / долготу, когда есть fitBounds.
Почему нет ? Просто fitBounds это игнорирует. Но когда маркеров нет, возможно, be fitBounds должен автоматически отключаться и использовать lon / lat.
Это обходной путь, который я сделал вручную
Кроме того, как будет вести себя maxZoom, когда есть несколько точек, и они расположены ближе друг к другу, чем позволяет maxZoom
Мы говорили только о «единственном случае маркера. Я понимаю, что оба варианта не идеальны:
Мой обходной путь для всех этих случаев, когда НЕ использовать fitbound для всех этих конкретных случаев, и это довольно уродливо, когда вы смотрите на код, поэтому, возможно, Futboud мог бы хорошо справиться со всем этим изнутри, но, возможно, это просто какое-то "хорошее наличие "
проблема с maxZoom или maxZoomForSingleMarker заключается в том, что для fitBounds мы используем функцию Bounds.extend , которая строит LatLngBounds на основе количества точек LatLng. Эта функция не принимает уровень масштабирования, и переключиться с центра / масштабирования на границы и назад не очень просто.
Что касается предоставления центральной широты / долготы и fitBounds, это проблематично, потому что, например, она изменится, если центральная широта изменится, даже если fitBounds активны. В настоящее время мы не рекомендуем это делать.
Каково поведение карт Google по умолчанию, когда оно отображается без включения fitBounds? Я думаю, что это то, чего мы желаем, когда нет маркеров (и fitBounds верен). Это означало бы: просто игнорируйте fitBounds, если нет маркеров.
Я думаю, что это основная проблема этой темы, возможно, следует открыть отдельные вопросы для других тем (например, maxZoom), даже если они связаны. Что вы думаете?
В гугле нет fitBounds, это все AGM.
Ммм ... я мог бы попробовать
Эта проблема была автоматически помечена как устаревшая, поскольку в последнее время не было активности. Он будет закрыт, если больше не будет активности. Спасибо за ваш вклад.
onMapReady (событие) {
this.mapReady = событие;
}
константные границы: LatLngBounds = new google.maps.LatLngBounds ();
for (const pol of this.polyLinePoints) {
bounds.extend (новый google.maps.LatLng (pol.lat, pol.lng));
}
this.mapReady.fitBounds (границы);
Я хотел поделиться обходным путем для проблемы 1 (центрирование карты в центре Тихого океана, когда fitBounds
истинно и нет маркеров).
Ответ brianpkelley решает проблему в некотором смысле: карта ничего не делает (без панорамирования, без масштабирования), когда вы получаете новый пустой массив маркеров.
Однако, если вы хотите полностью сбросить карту в таком случае, вы можете сделать это следующим образом:
<ng-container *ngIf="markers.length > 0; else noMarkersTemplate">
<agm-map [fitBounds]="true">
<!-- Your markers here... -->
</agm-map>
</ng-container>
<ng-template #noMarkersTemplate>
<agm-map [latitude]="25" [longitude]="-81" [zoom]="4"></agm-map>
</ng-template>
Это центрирует карту в точке с широтой = 25, долготой = -81 и устанавливает масштаб на 4.
Самый полезный комментарий
Мне кажется, это работает достаточно хорошо.