【发布时间】:2016-04-22 05:11:00
【问题描述】:
我正在开发一个应用程序,用户可以在其中上传 KML 文件并使用 Leaflet、toGeoJSON 和 Angular-Leaflet-Directive 在屏幕上呈现路径。
我使用toGeoJSON.kml() 将 KML 文本转换为 GeoJSON 对象,然后将其传递给 Leaflet 进行渲染。如果 KML 有效,这将非常有效。但是,如果 KML 格式不正确,它就不能很好地工作。 toGeoJSON 继续将数据呈现到对象中,忽略发生的任何错误。
var pathData = toGeoJSON.kml(kmlDom);
var latlng = [];
for (var feature in pathData.features) {
var paths = pathData.features[feature].geometry.coordinates;
if (paths.length > 1) {
for (var path in paths) {
var prospectiveCoords = pathData.features[feature].geometry.coordinates[path];
var coordinate = L.GeoJSON.coordsToLatLng(prospectiveCoords);
latlng.push(coordinate);
}
}
}
try {
map.fitBounds(latlng); //Instance of L.getMap()
angular.extend($scope, {
geojson : {
data : pathData,
style : {
stroke : true,
weight : 5
}
}
});
} catch (e) {
$log.error(e.message);
$window.alert(e.message);
}
在我的具体问题中,如果pathData 变量中有错误,则会触发LatLng 第7 行中的异常:
L.LatLng = function (lat, lng, alt) {
if (isNaN(lat) || isNaN(lng)) {
throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');
}
...
不幸的是,这个错误并没有被我的 catch 块捕获,Leaflet 继续渲染没有路径覆盖的地图图块,用户得到的唯一通知是在控制台内。我的目标是在上传无效文件时获得更明显的用户通知。
是否可以在应用层拦截错误?
【问题讨论】:
标签: javascript error-handling try-catch leaflet