javascript - 验证用户提交的位置
问题描述
我正在构建一个 Web 应用程序,它调用 mapquest 地理编码 API 来获取用户的经纬度位置,然后再次调用另一个 API 以返回另一组数据。我遇到的主要问题是当我调用 mapquest Geocode API 时,用户可以输入任何字符串或组成位置,它会返回带有数据的 JSON。我需要找到一种方法来确保用户输入实际位置来防止这种情况发生。这是 mapquest 地理编码 API https://developer.mapquest.com/documentation/geocoding-api/address/get/
我相信我的答案就在这里,但我不确定如何使用这些来验证位置https://developer.mapquest.com/documentation/geocoding-api/quality-codes/
我已经尝试设置一些 if 语句在 responseJson.results[0].locations[0].geocodeQualityCode 的任何值中查找 X 但这仍然会退回有效结果
这是 API 返回的可接受条目的示例
{
"info": {
"statuscode": 0,
"copyright": {
"text": "© 2019 MapQuest, Inc.",
"imageUrl": "http://api.mqcdn.com/res/mqlogo.gif",
"imageAltText": "© 2019 MapQuest, Inc."
},
"messages": []
},
"options": {
"maxResults": -1,
"thumbMaps": true,
"ignoreLatLngInput": false
},
"results": [
{
"providedLocation": {
"location": "Lawton, ok"
},
"locations": [
{
"street": "",
"adminArea6": "",
"adminArea6Type": "Neighborhood",
"adminArea5": "Lawton",
"adminArea5Type": "City",
"adminArea4": "Comanche County",
"adminArea4Type": "County",
"adminArea3": "OK",
"adminArea3Type": "State",
"adminArea1": "US",
"adminArea1Type": "Country",
"postalCode": "",
"geocodeQualityCode": "A5XAX",
"geocodeQuality": "CITY",
"dragPoint": false,
"sideOfStreet": "N",
"linkId": "282026294",
"unknownInput": "",
"type": "s",
"latLng": {
"lat": 34.606378,
"lng": -98.396817
},
"displayLatLng": {
"lat": 34.606378,
"lng": -98.396817
},
"mapUrl": "http://www.mapquestapi.com/staticmap/v5/map?key=zkn6RGyTDlLGsN8i8RfEmURf2GozTAkL&type=map&size=225,160&locations=34.606378,-98.396817|marker-sm-50318A-1&scalebar=true&zoom=12&rand=197404762"
}
]
}
]
}
解决方案
给定 Lawton, ok 输入,地理编码器返回一个 A5XAX,这意味着它找到了一个没有地址匹配的城市 (A5)(第一个 X),一个完全匹配的城市/州(A)而不是邮政编码匹配(第二个 X) .
您可以将返回的质量代码插入文档页面,以获得更详细的完整说明。
地理编码 API 并非旨在通过确保用户输入实际位置来防止用户输入任何字符串或虚构位置。如果输入不是随机击键,则可能有一个城市或街道名称将是紧密匹配并返回 X 以外的其他内容。因此应用程序需要确定它将接受不匹配的位置以及如何它会接受许多不匹配的内容。例如,如果您需要准确匹配交货地址,您将不需要 X 并且可能需要所有 A 或 B 置信度。如果一个城市没问题,那么 XAX 可能没问题。一如既往,这取决于。
推荐阅读
- python - 如何将数据集 id 传递给 python 的 bigquery 客户端
- r - 使用重采样在 Tidymodels 中预先分配虚拟变量级别
- javascript - 为什么 IFrame 不会在单击容器 div 时加载?
- python - 查找 txt 文件中出现次数最多的电子邮件地址
- symfony - 防止 Doctrine 将 ArrayCollection 用于关系
- ios - 通过 indexpath 使用结构和数据制作 tableView 单元格
- c# - XML 文档 (1, 1) 中存在错误。当反序列化一个简单的 xml 字符串时
- mysql - 是否有一个 SQL 命令来计算不同列中值的频率?
- c# - 是否可以从 C# 中的 Microsoft Identity Manager 获取信息?
- python - 如何通过使用 python selenium 单击链接按钮来访问在新选项卡中打开的元素?