1.比较粗糙的计算方式
计算长度
var length = lineFeature.getGeometry().getLength(); if (length > 1000) { length = length / 1000; unit = ‘km‘; } else { unit = ‘m‘; }
说明:直接使用geom的getLength方法获取长度,openlayers默认的长度单位是m。所有如果长度大于1000,需要转换成km。
计算面积
var area = polygonFeature.getGeometry().getArea(); if (area > 1000000) { area = area / 1000000; unit = ‘km2‘; } else { unit = ‘m2‘; }
说明:直接使用geom的getArea方法获取面积,同理如果面积大于1000000,需要转换为km(2)。
2.精准计算
计算长度
var sphere = new ol.Sphere(6378137);
…
var lonLatLine = lineFeature.getGeometry().transform(mapProjection, ‘EPSG:4326‘); var lineCoordinates = lonLatLine.getCoordinates(); var length = 0; for (var i = 0; i < lineCoordinates.length - 1; i += 1) { length += sphere.haversineDistance(lineCoordinates[i], lineCoordinates[i + 1]); } if (length > 1000) { length = length / 1000; unit = ‘km‘; } else { unit = ‘m‘; }
说明:ol.Sphere是一个地形对象,可提供计算精准长度和面积。通过实际地理形状计算,需要把坐标转换为对应坐标系的经纬度,调用geom的transform(projection1, projection2),把投影系1下的坐标转化为投影系2的坐标,例如把墨卡托投影系EPSG:3857(大地坐标)下的坐标转换为EPSG:4236投影系下的坐标(经纬度)。使用Sphere对象的haversineDistance函数计算两个坐标之间的距离。
计算面积
var lonLatPolygon = polygonFeature.getGeometry().transform(mapProjection, ‘EPSG:4326‘); var area = Math.abs(sphere.geodesicArea(lonLatPolygon.getCoordinates()[0])); if (area > 1000000) { area = area / 1000000; unit = ‘km2‘; } else { unit = ‘m2‘; }
说明:其他不用再多介绍了,主要说下geodesicArea函数,它用来计算多边形的面积,计算出来的面积有正负之分,如果多边形是沿顺时针方向画,面积为正;否则为负。所以需要使用Math.abs求绝对值。
时间: 2024-10-11 20:49:52