ポリゴンを編集してドラッグしたときに、更新されたポリゴンパスを取得しようとしています。以下のコードのようにしてみました。
私のTypeScriptでは:
@ViewChild(AgmPolygon) polygon: any;
this.polygon.getPaths().then((x: any[]) => {
x.forEach(y => {
console.log('-');
y.forEach(z => console.log(z.lat(), z.lng()));
});
});
私のhtml:
<agm-map [latitude]="lat" [fullscreenControl]="true"
(mapClick)="mapClicked($event)" [longitude]="lng" [zoom]="8" [mapTypeControl]="true">
<agm-polygon [fillColor]="item.fillColor" (polyMouseOut)="polyMouseOut($event)"
(polyMouseMove)="polyMouseMove($event)" [fillOpacity]="item.fillOpacity"
*ngFor="let item of zonesPath; let i=index" [editable]="item.ZoneID==ZoneID"
(polyMouseUp)="polyMouseUp(item,$event)" (polyMouseDown)="polyMouseDown($event)"
(polyDblClick)="polyDblClick($event)" (polyDragStart)="polyDragStart($event)"
(polyDragEnd)="polyDragEnd($event,item)" (polyDrag)="polyDrag($event)"
[polyDraggable]="false" [paths]="item.ZonePaths" (polyClick)="polyclick($event)">
</agm-polygon>
<agm-polygon [paths]="paths"></agm-polygon>
</agm-map>
私はポリゴンに対して* ngForを実行しています。私のjsonデータは次のとおりです。
{
"ZoneID": "594dff0ee10452d8567b23c6",
"strokeColor" : "#038063",
"strokeOpacity" : 0.2,
"strokeWeight" : 2,
"fillColor" : "#038063",
"fillOpacity" : 0.35,
"draggable" : false,
"editable" : false,
"visible" : true,
"ZonePaths": [
{
"lat" : 17.535107299215,
"lng" : 78.2346725463869
},
{
"lat" : 17.541981926489,
"lng" : 78.240509033203
},
{
"lat" : 17.54460076354,
"lng" : 78.249778747559
},
{
"lat" : 17.55082034986,
"lng" : 78.284454345703
}]}
ATM agm polygon edit changeイベントをまだPRで読んだ後、私はこれを克服しなければなりませんでした。
だから、私は基本に戻り、google map api class v3を探します。
@ViewChild(AgmMap) map: any;
polygon: any;
this.map._mapsWrapper.createPolygon({
paths: this.area,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.3,
editable: true,
}).then((polygon: any) => {
this.polygon = polygon
});
この後、getPath()を使用してイベントを追加するか、パスの変更を取得できます
console.debug(this.polygon.getPath())
最初にマップを取得します。
HTMLファイル:
<agm-map (mapReady)="onMapReady($event)">
TSファイル:
@ViewChild(AgmMap) map: any
map: any;
onMapReady(map){
this.map = map;
}
次に、ポリゴンオブジェクトを作成してマップに追加します。
TSファイル:
// Define the LatLng coordinates for the polygon's path.
const triangleCoords = [
{ lat: 25.774, lng: -80.190 },
{ lat: 18.466, lng: -66.118 },
{ lat: 32.321, lng: -64.757 },
{ lat: 25.774, lng: -80.190 }
];
// Construct the polygon.
this.polygon = new google.maps.Polygon({
paths: triangleCoords,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
editable: true,
draggable: true,
});
//Set polygon to map
this.polygon.setMap(this.map);
読み取りパス:
this.getPolygonCoordinates(this.polygon);
...
getPolygonCoordinates(draggablePolygon) {
const len = draggablePolygon.getPath().getLength();
const polyArrayLatLng = [];
for (let i = 0; i < len; i++) {
const vertex = draggablePolygon.getPath().getAt(i);
const vertexLatLng = { lat: vertex.lat(), lng: vertex.lng() };
polyArrayLatLng.Push(vertexLatLng);
}
console.log(polyArrayLatLng);
}