Итак, у меня есть массив из 9000 объектов, возвращаемых через HttpClient из моего API-интерфейса django rest. Эти объекты уже имеют формат Geojson. Как мне превратить это в слой для отображения с помощью ngx-leaflet. Я легко смог понять это с помощью базового javascript, но я запутался, делая это внутри angular. Раньше я делал все это внутри GeoDjango, но теперь я разделил переднюю и заднюю часть.
Вот мой код для моего компонента:
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Layer, tileLayer, geoJSON, LayerOptions } from 'leaflet';
import 'leaflet-providers';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
layers: Layer[];
layersControl: any;
center = [47.215282, -109.483294];
fitBounds = [[49.378264, -116.492570], [44.757856, -103.528704]];
constructor(private http: HttpClient) { }
ngOnInit() {
this.http.get<any>('http://127.0.0.1:8000/data/people')
.subscribe(geo1 => {
this.http.get<any>('http://127.0.0.1:8000/data/places')
.subscribe(geo2 => {
let defaultBaseLayer = tileLayer.provider('OpenStreetMap.Mapnik');
let defaultOverlay = geoJSON(geo1);
this.layers = [
defaultBaseLayer,
defaultOverlay
];
this.layersControl = {
baseLayers: {
'OpenStreetMap Mapnik': defaultBaseLayer,
'OpenStreetMap BlackAndWhite': tileLayer.provider('OpenStreetMap.BlackAndWhite')
},
overlays: {
'Overlay One': defaultOverlay,
'Overlay Two': geoJSON(geo2)
}
};
console.log(geo1)
});
});
}
Я позаимствовал код из предыдущего ответа на этом форуме.
Редактировать: если я делаю people/1/ для идентификатора 1, я получаю сообщение об ошибке «Недопустимый объект GeoJSON». Я тестирую это с помощью Postman и использую заголовки cors для django. Я использую базу данных PostGIS и использовал сериализаторы geojson в djangorestframework-gis.
Если я избавлюсь от geoJSON перед (geo1), он скажет: «Предоставленный объект не является слоем».
РЕДАКТИРОВАТЬ 2: Кто-нибудь знает альтернативу Leaflet, которая хорошо работает с Angular 6?
Изменить 3: Это возвращаемый объект...