地图上的商店:地理位置、类型颜色与附近搜索

全新

玩家商店现在以彩色图钉的形式显示在2D世界地图上。每个商店都有地理位置和类型——你可以一目了然地看到世界各地的五金店、食品店、健身工作室和其他商家的分布。

更棒的是:你现在可以按半径搜索你附近的商店。想找50公里内的健身房?只需输入距离、选择类别,然后点击搜索即可。

商店类型与颜色

每位店主在创建或编辑商店时都会选择一个类型。每种类型在地图上都有独特的颜色和图标:

🔧 五金
🍎 食品
🛠️ 服务
💾 数字
👕 服装
🎨 艺术
💪 健身
📚 教育
💼 咨询
📍 其他
◆ 综合

地图图钉

当你打开世界地图时,已设置位置的商店会以彩色图钉显示。将鼠标悬停在图钉上可以看到:

  • 商店名称和类型
  • 简短描述
  • 货币类型(CC 或 KC)
  • 商品数量

点击图钉可直接跳转到该商店并浏览其商品。

图钉使用与预渲染国家形状相同的 geoNaturalEarth1 投影,因此它们与地图完美对齐。当你放大或缩小时,图钉会自动调整大小。

附近搜索

在商店面板中,你会看到一个新的 ”📍 附近” 搜索栏:

  1. 选择类别 —— 例如健身、食品、五金,或”所有类型”
  2. 设置半径 —— 单位为公里(默认:50公里)
  3. 点击搜索 —— 系统会找到该半径范围内所有该类型的商店

搜索默认使用你的所在国家位置。如果你的浏览器支持地理定位,你也可以使用真实的GPS位置以获得更精确的结果。

结果会显示每个商店的名称、类型、货币、商品数量以及距离(公里)。点击某个结果即可立即切换到该商店。

在后台,搜索使用Haversine公式——与导航中使用的大圆距离计算方法相同——来精确计算你的位置与每个已设置地理位置的商店之间的距离。

店主指南

如果你拥有商店,现在可以设置你的位置和商店类型:

  1. 在商店面板中打开 我的商店
  2. 点击你的商店以查看详情页面
  3. 点击 ”📍 设置位置”(如果已有位置则点击”更新位置”)
  4. 在迷你地图上点击以设置你的商店位置
  5. 从颜色编码选择器中选择商店类型
  6. 点击 保存

你的商店将立即作为彩色图钉出现在世界地图上,其他玩家可以通过附近搜索找到你。

你也可以在创建商店时设置位置和类型——表单现在包含这两个字段。

技术实现原理

🌍 数据库中的地理坐标
shop_channels 表现在存储 lat、lng 和 shop_type 列。迁移在服务器启动时自动执行——无需手动修改数据库。

📡 两个新的 API 端点
GET /shop/map-pins 返回所有带有地理坐标的活跃商店,用于地图渲染。GET /shop/nearby?lat=&lng=&radius_km=&category= 执行半径搜索,使用边界框预过滤和精确的 Haversine 距离计算。

🗺️ 投影匹配
2D地图使用来自 geoNaturalEarth1 投影的预渲染SVG路径。商店图钉在运行时使用相同的投影将经纬度转换为SVG坐标,确保与国界完美对齐。

下一步计划

本次发布为 ENLIGHTENMENT 中的地理感知商务奠定了基础。未来的改进包括:

  • 商店聚合 —— 在高缩放级别下将附近的图钉分组显示
  • 路线规划 —— 查看如何前往实体商店
  • 商店评价与评分
  • 地图上的精选商店
  • 基于地区的商店目录

ENLIGHTENMENT 是一款基于区块链的个人成长、原型探索与集体共鸣游戏。加入我们:getplasma.org。