如何处理LatLng对象?

时间:2019-06-21 14:56:23

标签: angular typescript google-maps angular-google-maps

我正在向数据库运行请求并获取(如控制台中的JSON.Stringify()所示:

sites : [{"siteName":"Site de Marseille",
"siteAdress1":"rue du string",
"siteAddress2":"string",
"siteCodPost":"13010","siteTown":"Marseille",
"id":"5d0ce7c4a06b07213a87a753",
"companyId":"5cd430745304a21b9464a219",
"customerId":"5cd430c65304a21b9464a21a",
"points":
[
 {"lat":44.841225,"lng":-0.580036},
 {"lat":44.842236,"lng":-0.64696},    
 {"lat":44.805615,"lng":-0.63084}]}
]

这是具有某些属性的记录,一个属性是纬度/经度数组。 要获得此记录,我具有以下代码:

 this.customerApi.getSites(this.currentUser.id)
.subscribe(response => {
  this.sites = response;
  console.log('sites : ' + JSON.stringify(this.sites));
});
  }

我正在控制台中显示一个Observable()。

我想获取Point属性并将其推送到数组数组中,因为它可能存在许多后端发送回的记录。 目标是要有嵌套的坐标,以便可以使用Angular Google Map角度组件在Google Map上绘制多边形

为此,我宣布:

rectangles: Array<Array<LatLngLiteral>> = [];

并在“订阅”下执行以下操作:

.subscribe(response => {
  this.sites = response;
  this.rectangles.push(this.sites.points); 

矩形为空。

有什么想法对我有很大帮助吗?

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我在您的数据结构中看到站点是一个数组。因此,如果您执行this.sites.points,它将是undefined

您想要的是:this.rectangles.push(this.sites.map(s => s.points))

区别在于您尝试访问数组上的属性sites。 数组不具有该属性,因此未定义。数组是在数据结构中构建的,这些数据结构具有一组定义的功能和属性,例如lengthmap

例如:

const exampleObject = {propertyA: "value", propertyB: "another value" }

//access properties on object

//"value"
exampleObject.propertyA

//"another value"
exampleObject.propertyB

const exampleArray = ["one", "two", "three"]

//propertyA does not exists = undefined
exampleArray.propertyA

//lenght property exists on all arrays = 3
exampleArray.length

数组确实有一个名为map的函数,这意味着在每个元素上调用一个函数并返回一个新数组。通常用于转换数据结构或获取更深层的嵌套元素。

这只是简写:

this.sites.map(s => s.points)

实际上,这意味着:

const pointsArray = this.sites.map(s => {
       //s is a single element in sites array
       // s has property points which is an array
       return s.points
    })


// now we have an array of points, we can add it to rectangles

this.reactangles.push(pointsArray)

希望现在更加清楚。