我在一个angular typescript web应用程序中有一个具有lat/lng坐标的数组。
const myArr = [
[lat, lng],
[lat, lng],
...x 500 lines
]
我希望能够转换成一个网址查询参数为用户重新访问或共享。是否有算法来散列数据,使其适用于一个网址?我知道我们可以通过SHA-256来散列密码。是否有两种方式的哈希理想的这种情况下?
?mapSelection=myArrHash
我在一个angular typescript web应用程序中有一个具有lat/lng坐标的数组。
const myArr = [
[lat, lng],
[lat, lng],
...x 500 lines
]
我希望能够转换成一个网址查询参数为用户重新访问或共享。是否有算法来散列数据,使其适用于一个网址?我知道我们可以通过SHA-256来散列密码。是否有两种方式的哈希理想的这种情况下?
?mapSelection=myArrHash
2条答案
按热度按时间nfs0ujit1#
根据您的问题我建议使用**rison**
这个库专注于获取适合您的应用程序的编码字符串。
blmhpbnm2#
所以让我们做一些餐巾纸背面的数学:
一个lat/lng坐标的整数部分有2位数,一个可选的负号,小数部分可能有3~5位数,这取决于你想要的精确程度。让我们称之为每个坐标7个字符,每个点有两个字符,加上一个分隔符。你有~500分。这是
(7 + 7 + separator) * 500 = 7500
个字符。虽然这是在一些浏览器的理论限制之内(假设你没有一个500字符的域名lol),但它不会在所有浏览器中工作,而且如果我做的那些假设有点乐观,你就会超过限制。另外,你说你希望人们能够分享这些链接,我不认为你希望人们尝试张贴链接的长度多页的文章。
所以我觉得这行不通。你只有一个选择使用较少的LAT/LNG对(500是一个 lot)和/或较低的精度。强制性XKCD:
如果你只需要一个有效数字
Number.prototype.toFixed(1)
(就像你在城市之间做路线),并且你删除了点(你总是可以在反序列化时除以100),这将使每个坐标减少到3~4个字符,所以平均每个 * 对 * 7个字符(而不是上面的每个坐标)。假设我们将所需的对的数量减半为250,这给了我们250 * (7 + separator) = 2000
个字符。这可能是 * 仍然 * 太多,但这是一个开始。最后一点,一定要选择一个URL友好的分隔符:如果你使用了一个必须进行百分比编码的分隔符,你将额外增加1000个左右的字符。
尽管如此,这可能根本不起作用,坦率地说,这里可能有太多的数据要在URL中编码,但至少这希望给你一个起点,看看你能压缩多少。