根据纬度和经度获取网格中单元格的位置
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 米对我来说太多了,而且似乎是硬编码的。 我更新了我的答案。不确定这是否会解决您的问题。我不是一个微积分的人。但是,试一试也无妨。以上是关于根据纬度和经度获取网格中单元格的位置的主要内容,如果未能解决你的问题,请参考以下文章