如何让 Google 将几何位置数据放入 Firebase
Posted
技术标签:
【中文标题】如何让 Google 将几何位置数据放入 Firebase【英文标题】:How to get Google places geometry location data into firebase 【发布时间】:2021-05-27 20:31:42 【问题描述】:我正在使用 React 应用程序在 formik 表单提交时将一些信息存储到 firebase/firestore。当用户输入位置时,react-google-autocomplete 会执行自动完成,然后返回格式正确的地址,以及 places.geometry.location 纬度和经度。在提交时,我可以使用 JSON.stringify 来控制台日志或警报,但控制台会返回一个 firebase 错误,内容如下:FirebaseError: Function addDoc() called with invalid data. Unsupported field value: a custom object (found in field orggeometry in the document
Formik code
这显示了我如何编写我的 formik onSubmit 等。
Input ref for the autocomplete, showing where my values for location are set
这显示了输入 ref,以及值是如何设置的。我有两个。它们的设置方式,我目前可以在我的两个自动完成输入中选择一个位置并获取纬度和经度数字后提交表单。
Example of working latitude and longitude on my Origin
如您所见,表单的值问题为零。问题严格在于firebase。我搜索过 Google 搜索、此网站、Firebase 文档和 Places/Maps 文档。任何帮助将不胜感激。
【问题讨论】:
firebase中orggeometry
的数据类型是什么?你在哪里保存数据?不建议使用地理点firebase.google.com/docs/firestore/manage-data/… 可以使用geohash,但需要先对位置进行哈希处理。 firebase.google.com/docs/firestore/solutions/geoqueries
它应该是一个字符串,如果不能正确回答问题,我很抱歉,因为我不确定你的意思。至于地理点,不幸的是,我必须按照项目规范使用它。
【参考方案1】:
好的,所以在睡了它并花了一些时间研究它之后,我找到了一个解决方案来解决我的问题。问题是 place.geometry.location
返回一个同时具有纬度和经度的对象,Firebase 不喜欢这个对象。我尝试对整个表单的值进行 JSON.stringify 处理,但这并没有修复它,但是按照以下方式重写它以针对我的特定情况修复它。
const ref = usePlacesWidget(apiKey: process.env.REACT_APP_GOOGLE, onPlaceSelected: (place) => setPlace(place); formik.setFieldValue("Origin", place.formatted_address); JSON.stringify(place.geometry.location) formik.setFieldValue("OriginGeometry", JSON.stringify(place.geometry.location))
现在它返回一个由对象本身组成的字符串,在我看来,对于任何想要一个看起来非常干净的数据库条目的人来说,这不是理想的解决方案,但在我的情况下完全没问题。
【讨论】:
如果这为您解决了问题,您可以接受自己的答案。请考虑对代码块进行格式化,以方便任何人按照您的路径进行操作。以上是关于如何让 Google 将几何位置数据放入 Firebase的主要内容,如果未能解决你的问题,请参考以下文章
如何从 fire-base 检索数据到新活动中单击 RecyclerView
使用 JSON 在 Google Maps API 中设置位置并保存最后一个已知位置