在我的项目中,我有一个包含纬度和经度列表的数据库,对应于几个地址,我想从这个数据库中获取它们,并使用Angular 2在Google Maps中绘制它们(带路径)。 但是,我陷入了这个问题。我没有输出。我的代码看起来像这样。
服务组件看起来像这样。
import { Injectable } from '@angular/core';
import {Http, Response, Headers, RequestOptions} from "@angular/http";
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class HawkerserviceService{
baseUrl: string;
constructor(private http: Http) {
}
fetchNews(): Observable<any> {
return this.http.get('assets/data/locations.json')
.map(response => response.json());
}
}
我在家庭组件中调用了它,看起来像这样
import { Component, OnInit } from '@angular/core';
import {Observable} from 'rxjs/Rx';
import {HawkerserviceService } from '../hawkerservice.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
public latitude: number;
public longitude: number;
public places: any[];
constructor( private hawkerservice: HawkerserviceService) { }
ngOnInit() {
this.hawkerservice.fetchNews()
.subscribe(
data=> {this.places= data.locations},
Error=> console.log('this.places')
);
}
}
我的HTML组件是
<li *ngFor="let location of places>
<sebm-google-map [latitude]={{location.latitude}}
[longitude]={{location.longitude}}>
<sebm-google-map-marker [latitude]={{location.latitude}}
[longitude]={{location.longitude}}></sebm-google-map-marker>
</sebm-google-map>
</li>
但我没有得到任何输出。
我的JSON数据看起来像这样
{
"locations": [
{
"title": "Sangam Chowk",
"latitude": 27.692612,
"longitude": 85.342982
},
{
"title": "Kharikobot",
"latitude": 27.690227,
"longitude": 85.342671
},
{
"title": "Ace Instute Of management",
"latitude": 27.690693,
"longitude": 85.339581
}
]
}
这样做的最佳方式是什么?
答案 0 :(得分:3)
确定路径。尝试使用'./assets/data/locations.json'
(请注意./
)之类的方式更改路径字符串
答案 1 :(得分:1)
我还制作了其他一些Google地图,例如https://angular-maps.com/guides/getting-started/
安装:-
npm install @agm/core --save
app.module.ts文件
import { AgmCoreModule } from '@agm/core';
import { HttpModule} from '@angular/http';
imports: [
HttpModule,
AgmCoreModule.forRoot({
apiKey: 'Replace your api key here'
})
],
打字稿文件
places:any[]=[]; //Declared variable,
constructor(
private http: Http
) {
this.getJSON();
}
public getJSON() {
this.http.get("assets/file.json")
.subscribe(response => {
let temp = response.json();
this.places = temp.locations;
console.log("places", this.places);
})
}
HTML文件
<agm-map>
<ng-container *ngFor="let place of places">
<agm-marker [latitude]="place.latitude" [longitude]="place.longitude"></agm-marker>
</ng-container>
</agm-map>
屏幕截图
注意:-标记已正确标记。但是初始视图无法正确缩放地图,您必须缩放地图并查看标记的指向。
我在这里做了stackblitz示例,
注意:-我宣布对您的位置价值进行了硬编码。您必须替换app.module.ts文件中的api密钥,
https://stackblitz.com/edit/angular-h8oi37
屏幕截图
我希望这会有所帮助。
谢谢
Muthukumar
答案 2 :(得分:0)
我只是快速浏览了一下getting started guide,但在我看来,您的代码应如下所示:
<sebm-google-map [latitude]="places[0].location.latitude" [longitude]="places[0].location.longitude">
<sebm-google-map-marker *ngFor="let location of places" [latitude]="location.latitude" [longitude]="location.longitude"></sebm-google-map-marker>
</sebm-google-map>
但是,您是否还有其他错误?
答案 3 :(得分:0)
试试这个。
HTML
<sebm-google-map-marker
*ngFor="let m of markers; let i = index"
[latitude]="m.lat" [longitude]="m.lng" [label]="m.label">
</sebm-google-map-marker>
打字稿
markers: marker[] = [];
this.markers.push({
lat: //val from server,
lng: //Val from server,
label: //title from server,
draggable: false
});
答案 4 :(得分:0)
可能是在提供数据之前加载Google地图的情况。您可以在Google地图中触发事件以解决此问题。 类似于以下内容:
import { SebmGoogleMap } from 'angular2-google-maps/core';
export class HomeComponent {
@ViewChild(SebmGoogleMap) map: SebmGoogleMap;
ngOnInit() {
this.hawkerservice.fetchNews()
.subscribe(
data => {
this.places = data.locations;
this.map.triggerResize();
},
Error => console.log('this.places')
);
}
}