Javascript 如何获取OpenLayers 3的高程数据?

Javascript 如何获取OpenLayers 3的高程数据?,javascript,openlayers-3,Javascript,Openlayers 3,我试图创建一个光栅层,显示海拔的热图,红色是高峰,蓝色是大海。我试图利用OpenLayer 3的地理定位(ol.Geolocation)来实现这一点,但它返回的是未定义的。我知道地理定位的主要用途是实时定位当前的全球定位系统,但我肯定也能将它用于其他位置,不是吗 否则,是否有其他免费服务(除了谷歌的高程API,它需要使用谷歌地图)允许我获取基于经度和纬度的高程数据 app.rasterCounter = 0; var geolocation = new ol.Geolocation({

我试图创建一个光栅层,显示海拔的热图,红色是高峰,蓝色是大海。我试图利用OpenLayer 3的地理定位(ol.Geolocation)来实现这一点,但它返回的是未定义的。我知道地理定位的主要用途是实时定位当前的全球定位系统,但我肯定也能将它用于其他位置,不是吗

否则,是否有其他免费服务(除了谷歌的高程API,它需要使用谷歌地图)允许我获取基于经度和纬度的高程数据

app.rasterCounter = 0;
var geolocation = new ol.Geolocation({
    projection: map.getView().getProjection()
});
var raster = new ol.source.Raster({
    sources: [bing],
    operation: function(pixels, data) {
        //find the current pixel's location
        var y = Math.floor(app.rasterCounter/map.getSize()[0]);
        var x = Math.floor(app.rasterCounter % map.getSize()[0]);
        //find the pixel's coordinate equivalent
        var coords = map.getCoordinateFromPixel([x, y]);
        var lonlat = ol.proj.toLonLat(coords);
        geolocation.set('position', lonlat);
        //if above sea level, then display a heatmap of the long/lati, otherwise display red
        var pixel = geolocation.getAltitude() > 0 || geolocation.getAltitude() === undefined ? [0, lonlat[0]+100, lonlat[1]+100, 128] : [255, 0, 0, 128];
        app.rasterCounter++;
        return pixel;
    },
    //allow access to the DOM
    threads: 0
});
raster.on('afteroperations', function(e) {app.rasterCounter=0;});

注意:结果上没有红色,因为所有高度都未定义:/

我认为您误解了地理定位API的用途。地理定位API用于根据用户可用的传感器(GPS、Wi-Fi、IP地址等)获取有关当前用户位置的信息。如果可用,它还返回它们的高度。它不会告诉你某个特定点的地面高度,这不是它的设计目的

您需要的是高程的免费数据源。如果你只是查询单点,你可以使用MapQuest开放式高程服务——它与谷歌地图高程服务非常相似,但没有相同的限制(你应该正确地检查一下,我只是粗略地看了一眼)。如果要创建地图,您可能需要预先制作的光栅数据,这些数据可以是通过WMS或TMS服务制作并可用的,也可以是可以自己摄取和渲染的点云。为此,你需要做你自己的研究,这将完全取决于你正在寻找的领域。例如,在英国,许多基于激光雷达的地形模型都可以通过互联网完全免费和开放。在其他地方,你可能需要研究一下NASA的产品。这个网站--可能是一个很好的起点