仅在9行代码中将地理搜索添加到您的网站/应用
#javascript #网络开发人员 #教程 #firebase

曾经想在您的网站或应用程序中添加 Geo-Search 等高级功能,但是该过程感觉太压倒了?

confused

好吧,我会让您进入商业秘密! ðÖ«

可以使用只使用9行代码<​​/strong>使用 firestore 来完成! ðÖ

让我们开始!

lets-get-started

将Geo-Hash添加到您的数据中

在使用地理搜索之前,您需要在称为geohash的数据中添加一个其他字段。

要生成geohash,您可以使用名为geofire-common的库。

npm install geofire-common

geohashForLocation函数接受 Latitude 经度作为输入,并返回 location geohash

await setDoc(doc(db, "cities", "LA"), {
  name: "Los Angeles",
  lat: 34.0,
  long: -118.2,

  // store geohash
  geohash: geofire.geohashForLocation([lat, lng]),
});

注意 GeoFire库可用于 swift kotlin java 也很强>,也使您也可以在移动应用程序中使用它

在半径内查询位置

geohash添加到数据中后,您现在可以从数据库开始查询位置

const getCitiesWithinRadius = async (
  radiusInM: number,
  center: [number, number]
) => {
  const bounds = geofire.geohashQueryBounds(
    center,
    radiusInM
  );

  const promises = [];
  for (const bound of bounds) {
    const q = query(
      collection(db, "cities"),
      orderBy("geoHash"),
      startAt(bound[0]),
      endAt(bound[1])
    );
    promises.push(getDocs(q));
  }

  const snapShots = await Promise.all(promises);
  const cities = snapShots
    .flatMap((snapShot) => snapShot.docs)
    .map((doc) => doc.data());
  return cities;
};

getCitiesWithinRadius将接受米> 中的半径坐标 latitude aterutity )作为输入&返回指定半径内的所有城市。

注意:要保持代码清洁易于阅读 9行已被分解为还有几行,如果干净的代码不是您的事,您甚至可以使用单线

限制

作为 firebase 文档:

边缘案例 - 此查询方法依赖于估计经度/纬度线之间的距离。随着要点越来越靠近北极或南极,该估计值的准确性降低了,这意味着Geohash查询在极端的纬度上具有更多的假阳性。

要删除误报,您可以将distanceBetween函数从geofire-common库中使用 过滤出​​半径外的城市,这需要需要其他计算

const filteredCities = cities.filter((city) => {
  const distanceInM = geofire.distanceBetween(
    [city.lat, city.long],
    center
  );
  return distanceInM <= radiusInM;
});

return filteredCities;

包起来

恭喜!

congratulations

现在基于位置的搜索不再是火箭科学,而是几行代码! ð

世界是您的游乐场! ð

PS :向我的朋友Bikram大喊大叫,以挖掘Firebase docs并嗅出这一令人难以置信的功能

谢谢阅读

需要一个最高评价的前端开发自由职业者才能砍掉您的开发困境吗?通过Upwork

与我联系

想看看我在做什么?查看我的Personal WebsiteGitHub

想连接吗?在LinkedIn

上与我联系

Instagram上关注我以查看我最近的工作。

Dev

上关注我的博客

常见问题

这些是我遇到的一些常见问题。因此,我希望这个常见问题部分解决了您的问题。

  1. 我是初学者,我应该如何学习前端Web Dev?
    研究以下文章:

    1. Front End Development Roadmap
    2. Front End Project Ideas
  2. 你会指导我吗?

    抱歉,我已经有很多工作量,没有时间指导任何人。