首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ngx-leaflet从Django Rest框架在Angular中创建可用的多点geojson

用ngx-leaflet从Django Rest框架在Angular中创建可用的多点geojson
EN

Stack Overflow用户
提问于 2018-07-24 04:46:29
回答 1查看 425关注 0票数 0

好了,我的django rest api通过HttpClient返回了一个包含9000个对象的数组。这些对象已经是Geojson格式。如何使用ngx-leaflet将其转换为要映射的图层。我可以很容易地用基本的javascript来解决这个问题,但我在angular中做这件事很困惑。我以前在GeoDjango中完成了所有这些工作,但现在我已经将前面和后面分开了。

下面是我的组件代码:

代码语言:javascript
复制
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)


                });

        });
}

我从这个论坛上之前的回复中借用了代码。

编辑:如果我对id1执行people/1/,我会得到错误"Invalid GeoJSON object“。我正在使用Postman测试这一点,我正在使用django的cors-headers。我使用的是PostGIS数据库,并使用了djangorestframework-gis中的geojson序列化程序

如果去掉(geo1)前面的geoJSON,它会显示“提供的对象不是层”。

编辑2:有没有人知道替代Leaflet的方法可以很好地与Angular 6配合使用?

编辑3:This is the object being returned...

EN

回答 1

Stack Overflow用户

发布于 2018-07-24 08:17:36

geoJSON函数是在JSON之外创建一个Leaflet层的函数。因此,您将始终需要使用该函数。

您可能只需要检查在订阅回调中接收到的对象,看看它是否是有效的geojson。有时,REST响应周围有包装器对象。

下面是一个创建基本geoJSON in the demo on the ngx-leaflet Github repo.的示例

代码语言:javascript
复制
geoJSON(
    ({
        type: 'Polygon',
        coordinates: [[
            [ -121.6, 46.87 ],
            [ -121.5, 46.87 ],
            [ -121.5, 46.93],
            [ -121.6, 46.87 ]
        ]]
    }) as any,
    { style: () => ({ color: '#ff7800' }
)

您不一定需要style参数。如果不使用any参数,则可能不需要强制转换为样式。但是,对于多边形定义,geoJSON对象应该如下所示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51486999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档