根据纬度和经度获取网格中单元格的位置

Posted

技术标签:

【中文标题】根据纬度和经度获取网格中单元格的位置【英文标题】:Get position of a cell in a grid based on latitude and longitude 【发布时间】:2020-10-17 23:44:21 【问题描述】:

我需要一个 javascript 函数,它可以在世界范围内创建自定义大小的网格,并根据纬度和经度输出单元格的 x 和 y 位置。

在这个问题中是一个有点相似的函数,但它是在 php 中并且似乎固定在 100x100 米上:Convert Latitude and Longitude values to a custom sized grid

所以我需要的函数应该为网格获取纬度、经度和以米为单位的单元格大小,并且应该输出坐标所在单元格的 x 和 y 位置。

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

我为你做了一个从 PHP 到 JS 的快速转换。 PHP 和 JS 类似。你只需要数学。在几个数学函数和一个用于重现 PHP 具有的 deg2rad 函数的函数前面。

JS 不会让您以 $ 开头 var,但它以这种方式接受它们,因此我没有更改示例链接中的任何其他功能。

function deg2rad (angle) 
    // http://jsphp.co/jsphp/fn/view/deg2rad
    // +   original by: Enrique Gonzalez
    // *     example 1: deg2rad(45);
    // *     returns 1: 0.7853981633974483
    return (angle / 180) * Math.PI;

function get_static_pointer_table_id($lat, $lng)

    $earth_circumference = 40000; // km

    $lat_bin = Math.round($lat / 0.0009);
    $lng_length = $earth_circumference * Math.cos(deg2rad($lat));
    $number_of_bins_on_lng = $lng_length * 10;
    $lng_bin = Math.round($number_of_bins_on_lng * $lng / 360);
    //the 'bin' unique identifier
    return $lat_bin + "_" + $lng_bin;


console.log(get_static_pointer_table_id(100, 99))

更新:

我并不是真正的微积分专家,但我尝试了一下。我尝试将计算转换为按米计算的数字,然后将最终的 bin 编号更新为 $m。舍入在第一个公式和通过 100m 的第二个公式之间稍微改变了一些东西,但也许它会做你想要的。同样,只是尝试一下,不确定它会解决您的问题。

function deg2rad (angle) 
    // http://jsphp.co/jsphp/fn/view/deg2rad
    // +   original by: Enrique Gonzalez
    // *     example 1: deg2rad(45);
    // *     returns 1: 0.7853981633974483
    return (angle / 180) * Math.PI;

function get_static_pointer_table_id($lat, $lng, $m)

    $earth_circumference = 40000000; // m

    $lat_bin = Math.round($lat / 0.09);
    $lng_length = $earth_circumference * Math.cos(deg2rad($lat));
    $number_of_bins_on_lng = $lng_length /10000;
    $lng_bin = Math.round($number_of_bins_on_lng * $lng / 360);
    //the 'bin' unique identifier
    return $lat_bin * $m + "_" + $lng_bin *$m;


console.log(get_static_pointer_table_id(50, 18, 100))

【讨论】:

谢谢,但是如何定义单元格的大小?距离其他线程 100x100 米对我来说太多了,而且似乎是硬编码的。 我更新了我的答案。不确定这是否会解决您的问题。我不是一个微积分的人。但是,试一试也无妨。

以上是关于根据纬度和经度获取网格中单元格的位置的主要内容,如果未能解决你的问题,请参考以下文章

如何通过列和行索引获取WPF网格中单元格的x,y坐标

网格布局android / kotlin中单元格的高度和宽度相同

Grid布局(四)单元格自定义布局

单击特定网格视图单元格时淡出网格视图

根据同一行中其他单元格的 SUM 设置单元格值

根据内容更改jQuery数据表的单元格背景