【发布时间】:2021-11-04 17:33:06
【问题描述】:
我需要实现一个按钮,将多边形(或任何形状)下载到 geojson 文件中,但不会触发下载。 (尝试使用 2 个不同的功能,但都不起作用)我实际上不知道我的功能是否错误/遗漏了什么或问题出在 .html 中
app.component.ts
import { Component } from '@angular/core';
import { latLng, tileLayer, DrawOptions, DrawEvents } from 'leaflet';
import { icon, marker, polyline, circle, rectangle, polygon} from 'leaflet';
import { LeafletModule } from '@asymmetrik/ngx-leaflet';
import { LeafletDrawModule } from '@asymmetrik/ngx-leaflet-draw';
import { DomSanitizer, SafeUrl, SafeResourceUrl } from '@angular/platform-browser';
import { FeatureGroup, featureGroup } from 'leaflet';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'tesiangularp';
options = {
layers: [
tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap contributors'
})
],
zoom: 7,
center: latLng([ 41.471276, 12.907632 ])
};
layersControl = {
baseLayers: {
'Open Street Map': tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 18, attribution: '...' }),
'Satellite View Map': tileLayer('http://{s}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}', {
maxZoom: 18, attribution: '...', subdomains:['mt0','mt1','mt2','mt3']})
},
overlays: {
}
}
drawnItems: FeatureGroup = featureGroup();
drawOptions = {
edit: {
featureGroup: this.drawnItems
},
Draw: {
}
};
public onDrawCreated(e: any) {
this.drawnItems.addLayer((e as DrawEvents.Created).layer);
}
geoExport =() => {
let nodata = '{"type":"FeatureCollection","features":[]}';
let jsonData = (JSON.stringify(this.drawnItems.toGeoJSON()));
let dataUri = 'data:application/json;charset=utf-8,'+ encodeURIComponent(jsonData);
let datenow = new Date();
let datenowstr = datenow.toLocaleDateString('en-GB');
let exportFileDefaultName = 'export_draw_'+ datenowstr + '.geojson';
let linkElement = document.createElement('a');
linkElement.setAttribute('href', dataUri);
linkElement.setAttribute('download', exportFileDefaultName);
if (jsonData == nodata) {
alert('No features are drawn');
} else {
linkElement.click();
}
}
exportJson() {
var data = this.drawnItems.toGeoJSON();
var convertedData = 'text/json;charset=UTF-8,' + encodeURIComponent(JSON.stringify(data));
document.getElementById('export')?.setAttribute('href', 'data:' + convertedData);
document.getElementById('export')?.setAttribute('download', 'data.json');
}
}
app.component.html
<div class="map"
leaflet
leafletDraw
[leafletOptions]="options"
[leafletLayersControl]="layersControl"
[leafletDrawOptions]="drawOptions"
(leafletDrawCreated)="onDrawCreated($event)">
<div [leafletLayer]="drawnItems"></div>
</div>
<a>
<div style="margin: 2px 0px 2px 0px;">
<button onclick= "exportJson()">Download</button>
</div>
</a>
【问题讨论】:
-
99% 的情况下,在 Angular 应用程序中使用
document.getElementById()意味着你做错了。此外,我在任何地方都看不到带有id="export"的元素,而且您也不是.click()ing 假定的 。 -
我是 100% 的新手,从各种帖子中获取代码片段并将其放在一起尝试使其工作,我应该如何重写它?
标签: javascript angular leaflet geojson leaflet.draw