Skip to content

Commit

Permalink
feat(maps): add google map with access search location dropdown
Browse files Browse the repository at this point in the history
  • Loading branch information
dimaatkaev authored and nnixaa committed Feb 19, 2018
1 parent cb5795b commit 97c7134
Show file tree
Hide file tree
Showing 13 changed files with 151 additions and 3 deletions.
10 changes: 8 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
"@angular/compiler-cli": "~5.1.0",
"@angular/language-service": "~5.1.0",
"@compodoc/compodoc": "1.0.1",
"@types/googlemaps": "3.30.4",
"@types/d3-color": "1.0.5",
"@types/jasmine": "2.5.54",
"@types/jasminewd2": "2.0.3",
Expand Down
9 changes: 9 additions & 0 deletions src/app/pages/maps/maps-routing.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ import { MapsComponent } from './maps.component';
import { GmapsComponent } from './gmaps/gmaps.component';
import { LeafletComponent } from './leaflet/leaflet.component';
import { BubbleMapComponent } from './bubble/bubble-map.component';
import { SearchMapComponent } from './search-map/search-map.component';
import { MapComponent } from './search-map/map/map.component';
import { SearchComponent } from './search-map/search/search.component';

const routes: Routes = [{
path: '',
Expand All @@ -18,6 +21,9 @@ const routes: Routes = [{
}, {
path: 'bubble',
component: BubbleMapComponent,
}, {
path: 'searchmap',
component: SearchMapComponent,
}],
}];

Expand All @@ -32,4 +38,7 @@ export const routedComponents = [
GmapsComponent,
LeafletComponent,
BubbleMapComponent,
SearchMapComponent,
MapComponent,
SearchComponent,
];
5 changes: 4 additions & 1 deletion src/app/pages/maps/maps.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ import { MapsRoutingModule, routedComponents } from './maps-routing.module';
@NgModule({
imports: [
ThemeModule,
AgmCoreModule.forRoot(),
AgmCoreModule.forRoot({
apiKey: 'AIzaSyCpVhQiwAllg1RAFaxMWSpQruuGARy0Y1k',
libraries: ['places'],
}),
LeafletModule.forRoot(),
MapsRoutingModule,
NgxEchartsModule,
Expand Down
4 changes: 4 additions & 0 deletions src/app/pages/maps/search-map/entity/Location.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export class Location {
constructor(public latitude: number = 54, public longitude: number = 33) {
}
}
7 changes: 7 additions & 0 deletions src/app/pages/maps/search-map/map/map.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<agm-map [latitude]="latitude"
[longitude]="longitude"
[scrollwheel]="false"
[zoom]="zoom">
<agm-marker [latitude]="latitude"
[longitude]="longitude"></agm-marker>
</agm-map>
13 changes: 13 additions & 0 deletions src/app/pages/maps/search-map/map/map.component.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@import '../../../../@theme/styles/themes';

@include nb-install-component() {

nb-card-body {
padding: 0;
}

/deep/ agm-map {
width: 100%;
height: nb-theme(card-height-large);
}
}
31 changes: 31 additions & 0 deletions src/app/pages/maps/search-map/map/map.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { Component, Input, OnInit } from '@angular/core';
import { Location } from '../entity/Location';

@Component({
selector: 'ngx-map',
templateUrl: './map.component.html',
styleUrls: ['./map.component.scss'],
})
export class MapComponent implements OnInit {
latitude: number;
longitude: number;
zoom: number;

@Input()
public set searchedLocation(searchedLocation: Location) {
this.latitude = searchedLocation.latitude;
this.longitude = searchedLocation.longitude;
this.zoom = 12;
}

ngOnInit(): void {
// set up current location
if ('geolocation' in navigator) {
navigator.geolocation.getCurrentPosition((position) => {
this.searchedLocation = new Location(
position.coords.latitude, position.coords.longitude,
);
});
}
}
}
7 changes: 7 additions & 0 deletions src/app/pages/maps/search-map/search-map.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<nb-card>
<nb-card-header>Google Maps with search</nb-card-header>
<nb-card-body>
<ngx-search (positionChanged)="updateLocation($event)"></ngx-search>
<ngx-map [searchedLocation]="searchedLocation"></ngx-map>
</nb-card-body>
</nb-card>
15 changes: 15 additions & 0 deletions src/app/pages/maps/search-map/search-map.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { Location } from './entity/Location';

@Component({
selector: 'ngx-search-map',
templateUrl: './search-map.component.html',
})
export class SearchMapComponent {

searchedLocation: Location = new Location();

updateLocation(event: Location) {
this.searchedLocation = new Location(event.latitude, event.longitude);
}
}
4 changes: 4 additions & 0 deletions src/app/pages/maps/search-map/search/search.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<div class="form-group">
<input placeholder="search for location" autocorrect="off" autocapitalize="off" spellcheck="off" type="text"
class="form-control search-location" #search>
</div>
44 changes: 44 additions & 0 deletions src/app/pages/maps/search-map/search/search.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { Component, ElementRef, EventEmitter, NgZone, OnInit, Output, ViewChild } from '@angular/core';
import { MapsAPILoader } from '@agm/core';
import { Location } from '../entity/Location';
import {} from 'googlemaps';

@Component({
selector: 'ngx-search',
templateUrl: './search.component.html',
})
export class SearchComponent implements OnInit {

@Output() positionChanged = new EventEmitter<Location>();

@ViewChild('search')
public searchElementRef: ElementRef;

constructor(private mapsAPILoader: MapsAPILoader,
private ngZone: NgZone) {
}

ngOnInit() {
// load Places Autocomplete
this.mapsAPILoader.load().then(() => {
const autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement, {
types: ['address'],
});
autocomplete.addListener('place_changed', () => {
this.ngZone.run(() => {
// get the place result
const place: google.maps.places.PlaceResult = autocomplete.getPlace();

// verify result
if (place.geometry === undefined || place.geometry === null) {
return;
}

this.positionChanged.emit(
new Location(place.geometry.location.lat(),
place.geometry.location.lng()));
});
});
});
}
}
4 changes: 4 additions & 0 deletions src/app/pages/pages-menu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,10 @@ export const MENU_ITEMS: NbMenuItem[] = [
title: 'Bubble Maps',
link: '/pages/maps/bubble',
},
{
title: 'Search Maps',
link: '/pages/maps/searchmap',
},
],
},
{
Expand Down

0 comments on commit 97c7134

Please sign in to comment.