sql-server - 地理定位服务的地址表方案
问题描述
我有一个 SQL 数据库,其中包含 Stores、Users 等表。
Store 和 User 以及其他实体都有一个地址。
我正在考虑为所有地址创建一个地址表:
Users
--------
UserId (PK)
AddressId (FK)
Name
Addresses
--------
AddressID (PK)
CountryID (FK) -> I have a table Countries with all Countries
Street
PostalCode
Locality
Region
Latitude
Longitude
当用户填写个人资料时,我会输入输入地址。
我想使用 Google Geocoding API 将输入的地址转换为其字段并将其保存到包括纬度和经度的数据库中。
https://developers.google.com/maps/documentation/geocoding/start
https://developers.google.com/maps/documentation/javascript/geocoding
我有几个问题:
我的地址表方案适合这个吗?
我打算使用谷歌地理编码 API,所以我应该存储 PlaceId 然后谷歌返回我的数据库吗?
我的主要目标是:
将用户输入的地址转换成地址字段并存入数据库;
通过在我的数据库中获得用户地址类型的纬度和经度,我将能够按位置搜索它们。示例:在伦敦地址 20 公里半径范围内获取我的应用程序的用户。
解决方案
您是否考虑过将 HouseNumber 分开?一些外部服务或 API 需要这样做。如果需要,更容易连接此字段。
地理位置有一个地理数据类型:https ://docs.microsoft.com/en-us/sql/t-sql/spatial-geography/spatial-types-geography?view=sql-server-2017 使用这种类型,您可以使用一些地理功能(例如两点之间的距离)高效地查询数据库。
我不会直接保存 Google-API 结果。使用您自己所需的架构。
如果您使用 geography 类型,您可以使用 Long/Lat 和 Distance by radius 进行查询。
推荐阅读
- javascript - NoUiSlider - 不隐藏线条
- android - Android GPS FusedLocationProviderClient:错误的经度
- r - 关闭交互式地图上的 tmap 图例?
- php - 从 xml 标签中提取值
- c# - 如何插入一个在 Unity 中每次更新都会获得新位置的相机?
- java - Java Scanner useDelimiter 意外结果
- dart - TextOverflow.visible 不可用(相同的代码在另一台计算机上可以)
- android - FlatList Android 项目重叠
- javascript - 捕捉 .bs.dropdown 事件
- rebus - 发布子模式使用 Rebus 在 Azure 服务总线上创建队列和主题