javascript - Node.js:如何处理在字典中查找同名的不同城市?
问题描述
背景:我正在构建一个 Node.js 应用程序,它需要跟踪城市中的活跃用户数量。
在服务器端,有一个城市名称与城市活跃用户数量的映射。例如,"Las Vegas" : 5
。但是,对于同名的不同城市,例如Newport, WA和Newport, RI,由于 key 重复,服务器无法正确更新活动用户数。
将州添加到密钥中不起作用,因为这是针对美国的解决方案(例如[city name]-[state]
),并且将国家/地区添加到密钥中也不起作用(例如[city-name]-[country]
),因为这不涵盖一个国家中具有相同名称的不同城市.
我已经研究过将纬度和经度数据嵌入到密钥中,但这可能无法使用,因为城市边界差异很大。问题是,我可以确保具有相同名称的不同城市作为具有某种格式的不同键出现在字典中,例如city-[longNum]-[latNum]
. 在客户端,我可以获得城市名称、经度和纬度坐标,但显然,客户的坐标不会与城市坐标的中心完全相同,因此无法正确定位客户所在的城市服务器字典使用city-[longNum]-[latNum]
.
如果客户在重复的城市,有什么方法可以从字典/映射中找到客户的正确城市?我正在考虑使用 Redis 的地理空间索引,但我不确定这是否适用于这个问题。
解决方案
这是一个关于如何设计城市存储城市名称的策略而不是使用字典的问题。
您可以将城市的信息放置在如下结构中并对其进行序列化。
{
"country": "USA",
"name": "Newport",
"subdivision": "WA",
}
您可以使用更多字段,其中一些字段可能为空,具体取决于其他字段。就像某些国家/地区一样,您不存储细分。
作为另一种选择,您可以重新设计客户端以使用城市的某种唯一标识符来使用查询信息。并从服务器查询他们的文本名称。但这取决于数据在地图中的表示方式。
推荐阅读
- api - AXIOS POST 访问控制检查失败:没有 'Access-Control-Allow-Origin' .HTTP 状态代码 405
- galera - Galera Donor 并切换到另一台主机进行插入语句
- svg - SVG 外部对象大小不一致
- java - 不返回void的java虚拟方法
- docker - 尝试在 docker 映像中设置 JAVA_HOME,不知道为什么它不起作用
- reactjs - OpenLayer 4 在地图上绘制箭头
- c# - 忽略大小写的 C# 表达式树或更低
- android - Firebase Firestore 如何识别离线读取
- node.js - 是否有组织/增强 Express.js 服务器的“标准”方式?
- sql - 从 PostgreSQL 中的字符串中删除数字索引