首页 > 解决方案 > Node.js:如何处理在字典中查找同名的不同城市?

问题描述

背景:我正在构建一个 Node.js 应用程序,它需要跟踪城市中的活跃用户数量。

在服务器端,有一个城市名称与城市活跃用户数量的映射。例如,"Las Vegas" : 5。但是,对于同名的不同城市,例如Newport, WANewport, RI,由于 key 重复,服务器无法正确更新活动用户数。

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

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

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

标签: javascriptnode.jsalgorithmdata-structuresgeolocation

解决方案


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

您可以将城市的信息放置在如下结构中并对其进行序列化。

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

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

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


推荐阅读