【问题标题】:Address Table Scheme for Geolocation services地理定位服务的地址表方案
【发布时间】:2018-06-29 11:25:13
【问题描述】:

我有一个 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. 我打算使用 Google 地理编码 API,所以我应该存储 PlaceId 然后 Google 返回我的数据库吗?

我的主要目标是:

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

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

【问题讨论】:

    标签: sql-server google-maps database-design geolocation google-geocoder


    【解决方案1】:

    您是否考虑过将 HouseNumber 分开?一些外部服务或 API 需要这样做。如果需要,更容易连接此字段。

    地理位置有一个地理数据类型:https://docs.microsoft.com/en-us/sql/t-sql/spatial-geography/spatial-types-geography?view=sql-server-2017 使用这种类型,您可以使用一些地理功能高效地查询数据库,例如两点之间的距离。

    我不会直接保存 Google-API 结果。使用您自己所需的架构。

    如果您使用地理类型,您可以使用 Long/Lat 和 Distance by radius 进行查询。

    【讨论】:

    • 所以您建议使用我的架构在数据库中保存地址。创建新地址时,调用 Google API 以获取纬度和经度并将这两个值作为地理保存在我的数据库中。现在我可以使用自己的数据库按位置进行过滤。如果这就是你的意思,那也是我的想法,也许我解释得不好。
    • 当用户在一个输入中键入某个地址时,我将使用谷歌地图自动完成功能,例如,“20 Oxford Street, London, UK”然后我将获得地址字段和纬度 /该地址的经度来自谷歌并将其存储在我自己的架构中。
    • 是的,有一个门牌号字段可能是个好主意。我没有添加它,因为它是一个变化很大的字段,所以我不知道是否可以对其进行规范化。我正在寻找其中一些服务使用的架构以及 ISO 架构(如果有的话)。
    • 你走对了。我只想更改架构:纬度经度 -> 位置地理
    猜你喜欢
    • 2014-07-23
    • 1970-01-01
    • 2020-01-31
    • 2015-12-24
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多