首页 > 解决方案 > 地理定位服务的地址表方案

问题描述

我有一个 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

我有几个问题:

  1. 我的地址表方案适合这个吗?

  2. 我打算使用谷歌地理编码 API,所以我应该存储 PlaceId 然后谷歌返回我的数据库吗?

我的主要目标是:

  1. 将用户输入的地址转换成地址字段并存入数据库;

  2. 通过在我的数据库中获得用户地址类型的纬度和经度,我将能够按位置搜索它们。示例:在伦敦地址 20 公里半径范围内获取我的应用程序的用户。

标签: sql-servergoogle-mapsdatabase-designgeolocationgoogle-geocoder

解决方案


您是否考虑过将 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 进行查询。


推荐阅读