Skip to content
← 返回项目

手记 · 初创

Mapiva以地图为核心的社交发现

一款打开就是地图的应用。先看看身边正在发生什么,再去找附近的人和活动。

2025 年 8 月起任联合创始人兼开发负责人 · 计划 2027 年初公测

试试演示 ↓

Mapiva 是我联合创办的初创公司,应用还在开发中。本页是我个人的介绍。下面的演示是专门为这个网站写的概念示意,里面的人和活动都是合成的。它不是应用本身的代码,也没有任何内容来自应用、用户或品牌。

要解决的问题

想在附近找点事做,比听起来难。活动信息散落在不同的应用、网页和群聊里,大多数社交应用围绕的是一条信息流,而不是一个地方。刚到一座城市,或者只是某个下午有空,真正想问的是:我附近现在有什么?列表很难回答这个问题,地图却很合适。

但一张标着人的地图,本身就是一个隐私问题。哪怕只显示一个人的大致位置,也要从第一天起认真设计,而不是事后再补。

这个想法

Mapiva 是一款 iOS 和 Android 手机应用,帮人发现身边的人和活动,并建立联系。这个想法三步就能说清楚。

  1. 1

    从地图开始

    打开应用,先看到的是你周围的地图,而不是信息流。离你近的东西最先出现。

  2. 2

    看看附近有谁、有什么

    人和活动都以标记的形式出现在地图上,今天下午能去哪儿,一眼就看得出来。

  3. 3

    建立联系

    看到感兴趣的,就点开了解更多,再和背后的人联系。

从一开始就考虑隐私

隐私从一开始就是设计的一部分,其中有两点影响最大。

  • 注册时核验年龄,确保地图上的人都达到了使用年龄。
  • 他人的地图标记只显示大致位置。你能知道附近有人,但看不到对方确切在哪里。

要让位置变成“大致”的,有个简单的办法:把它吸附到网格上。地图被分成固定的方格,一个人的标记画在他所在方格的中心,而不是真实位置。下面的演示就是这样做的,你可以换几种方格大小,看看有什么变化。

网格必须固定不变。如果每次请求都随机加一点噪声,有耐心的人可以收集很多次结果,取个平均值就能还原真实位置。固定的网格每次给出的答案都一样,没有什么可以平均。挪动自己的位置也没用,最多只能知道对方在哪个方格里。

这里只是示意思路,并不代表应用的具体实现。

试一试:附近有谁、有什么

概念示意,并非真实系统。下面所有的人、活动和时间都是合成的,由你的浏览器用固定的随机种子生成。地图是为本页画的墨尔本内城简图,街道、公园和海岸线都只是大致位置。不会保存或发送任何数据。

假设现在是周六下午,你在卡尔顿附近。挪动你的位置,调整搜索半径,看看附近的列表怎么变化。再打开网格,看看每个人真实在哪里,他们的标记又画在了哪里。

合成数据 · 简化地图

合成时钟:周六下午 2:00

缩放 2/4

点击地图,或用方向键挪动你的位置,按住 Shift 移动得更远。按 + 或 - 缩放。

  • 你
  • 人,大致位置
  • 活动
  • 合并的标记
范围内的人
17
范围内的活动
4
他人位置精度
500 米

你在卡尔顿附近,1.5 公里以内有 17 个人、4 个活动。他人位置精确到 500 米的方格。

显示
他人标记的精度

附近此刻21

卡尔顿附近 · 1.5 公里

应用会向服务器要什么

仅作示意。这是一个虚构的接口,展示上面这次附近搜索可能返回的数据结构。人返回的是大致位置和取整后的距离。活动在公共场所举行,所以返回确切位置。

请求

GET /api/nearby?lat=-37.8001&lng=144.9671&radiusM=1500&kinds=people,events&page=1&pageSize=20

响应

{
  "status": 1,
  "message": "Success",
  "data": {
    "items": [
      {
        "id": "evt-0002",
        "kind": "event",
        "title": "公园下棋",
        "location": {
          "lat": -37.80115,
          "lng": 144.96682
        },
        "distanceM": 120,
        "startsAt": "2026-10-10T04:00:00Z",
        "endsAt": "2026-10-10T06:00:00Z"
      },
      {
        "id": "usr-0012",
        "kind": "person",
        "displayName": "Lou C.",
        "approxLocation": {
          "lat": -37.7978,
          "lng": 144.9659,
          "precisionM": 500
        },
        "approxDistanceM": 300,
        "interests": [
          "gardening",
          "board-games"
        ]
      }
    ],
    "page": 1,
    "pageSize": 20,
    "total": 21
  }
}

共 21 条,这里显示 2 条。

怎么搭建的

角色
联合创始人兼开发负责人
开始
2025 年 8 月
团队
小型兼职团队
下一步
2027 年初公测
  • React Native
  • Expo
  • Django
  • Rust
  • PostgreSQL
  • GitHub Actions

应用用 Expo 和 React Native 开发,一套代码同时支持 iOS 和 Android。后端用 Django 和 Rust 搭建,数据存放在 PostgreSQL 里,改动通过 GitHub Actions 持续集成和交付。

我的角色

我联合创办了 Mapiva,负责开发工作。作为开发负责人,我负责整体技术架构,也负责一支小型兼职工程团队的代码评审。

我还写了 2026–27 年的开发计划,定下公测的范围,以及发布前必须达到的标准。这些都是在本职工作之外完成的。

接下来

团队正朝着 2027 年初的公测推进,公测的范围和发布标准都写在开发计划里。

Mapiva 的代码不公开,所以本页没有源码链接和截图。演示是专门为这个网站写的。