javascript - Node.js:如何处理在字典中查找具有相同名称的不同城市?

标签 javascript node.js algorithm data-structures geolocation

上下文:我正在构建一个需要跟踪城市活跃用户数量的 Node.js 应用程序。

在服务器端,有一个城市名称到该城市活跃用户数量的映射。例如,“拉斯维加斯”:5。但是,对于具有相同名称的不同城市,例如 Newport, WANewport, RI,由于重复键,服务器无法正确更新活跃用户数.

将州添加到 key 中不起作用,因为这是美国特定的解决方案(例如 [city name]-[state])并且将国家添加到 key 中也不起作用(例如 [city-name]-[country])因为这不涵盖一个国家/地区中具有相同名称的不同城市。

我研究过将纬度和经度数据嵌入到 key 中,但这可能无法使用,因为城市边界差异很大。问题是,我可以确保具有相同名称的不同城市作为具有某种格式的不同键出现在字典中,例如 city-[longNum]-[latNum]。客户端,我可以获取城市名称、经纬度坐标,但显然,客户端的坐标不会与城市坐标的中心完全相同,所以没有办法使用 city-[longNum]-[latNum] 格式在服务器字典中正确定位客户端的城市。

如果客户位于重复的城市,是否有任何方法可以从字典/映射中找到客户的正确城市?我正在考虑使用 Redis 的地理空间索引,但我不确定这是否适用于这个问题。

最佳答案

这是一个关于如何设计存储城市名称的策略的问题,而不是关于使用字典的问题。

你可以将一个城市的信息放在如下结构中并序列化。

{
  "country": "USA",
  "name": "Newport",
  "subdivision": "WA",
}

您可以使用更多字段,其中一些字段可能为空,具体取决于其他字段。与某些国家/地区一样,您不存储分割。

作为另一种选择,您可以重新设计您的客户端以使用使用某种城市唯一标识符的查询信息。并从服务器查询它们的文本名称。但这取决于数据在 map 中的表示方式。

关于javascript - Node.js:如何处理在字典中查找具有相同名称的不同城市?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57783535/

相关文章:

javascript - Sequelize – 查询重叠日期但有异常

CSS 样式未应用于 View

node.js - 监听 I/O 事件时是什么让事件循环保持打开状态?

algorithm - 二部图中的交叉数

javascript - 旋转 SVG 路径点以获得更好的变形

javascript - AngularJS:代码在 Controller 中有效,但在工厂中无效:可能未处理的拒绝:{}

javascript - HTML5 Canvas 形状从圆形到三 Angular 形

javascript - 按键过滤 map

algorithm - 通过多个最小生成树分割无向图

用于评估数学/算术表达式的 C++ 仿函数库