javascript - 获取 OpenLayers 中 2 个 LonLat 对象之间的像素距离

标签 javascript openlayers

我有 2 个 OpenLayers.LonLat 对象,我想确定这两个对象之间当前缩放的像素距离。我正在使用 OpenLayers.Layer.getViewPortPxFromLonLat() 来确定点的 x 和 y,然后减去以查看 2 之间的差异,但对于相距 2000 公里的点,我得到的值非常小。

这是我的代码:

        var center_lonlat = new OpenLayers.LonLat(geometry.lon, geometry.lat);
        var center_px = layer.getViewPortPxFromLonLat(center_lonlat);

        var radius_m = parseFloat(feature.attributes["radius"]);
        var radius_lonlat = OpenLayers.Util.destinationVincenty(center_lonlat, 0, radius_m);
        var radius_px = layer.getViewPortPxFromLonLat(radius_lonlat);

        var radius = radius_px.y - center_px.y;

我想在这里画一个圆,让我收到一个中心点和以米为单位的半径。 LonLat 对象似乎没问题。

我做错了什么吗?

最佳答案

我发现了问题:destinationVincenty() 需要并返回 wgs84 中的坐标,我的 map 使用的是球面墨卡托投影。

我希望我得到了正确的答案,因为投影让我头晕而且从来没有真正理解它们:(。我在控制台中查看坐标的数字以及来自 map.getExtent() 的坐标,它用于计算 getViewPortPxFromLonLat() 后我意识到它们的数量级不正确,这让我大吃一惊。

所以,现在的代码是:

        var spherical_mercator = new OpenLayers.Projection("EPSG:900913");
        var wgs84 = new OpenLayers.Projection("EPSG:4326");

        var map = feature.layer.map;
        var geometry = feature.geometry;
        var center_lonlat = new OpenLayers.LonLat(geometry.y, geometry.x);
        var center_px = map.getViewPortPxFromLonLat(center_lonlat);

        var radius_m = parseFloat(feature.attributes["radius"]);
        var radius_lonlat = OpenLayers.Util.destinationVincenty(center_lonlat.clone().transform(spherical_mercator, wgs84), 0, radius_m).transform(wgs84, spherical_mercator);
        var radius_px = map.getViewPortPxFromLonLat(radius_lonlat);

        var radius = Math.abs(radius_px.y - center_px.y);

用 OpenLayers.Control.ScaleLine 测量圆圈,大小准确:D

关于javascript - 获取 OpenLayers 中 2 个 LonLat 对象之间的像素距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6578846/

相关文章:

javascript - THREE.js:使用 JSONLoader 加载模型仅加载一半纹理

javascript - 如何配置日期选择器,使其无法选择小于当天的日期?

javascript - Openlayers OSM 始终设置为 (long/lat) (0/0)

javascript - OpenLayers.Controls.DrawFeature 的激活/停用失败

javascript - 使用递归输出所有嵌套数组元素

javascript - 通过 ajax 调用加载新图像的 jquery 回调

javascript - 在javascript中将字符串拆分为多行

javascript - map 左下角的 OpenLayers 静态归因

javascript - 如何使用 Vuelayers 与 GeoServer 提供的 WMS 切片图层进行交互?

android - openlayers 到 native android 应用程序