【问题标题】:Address standardization within a database数据库内的地址标准化
【发布时间】:2017-05-06 02:34:52
【问题描述】:

在 MS Access 2013 中工作。有大量需要标准化的位置/地址。

示例包括以下地址:

  • 500 W 主街
  • 西大街500号
  • 西大街500号

你明白了。

我考虑过运行一个查询,该查询会提取数据库中左侧 (7) 或某些字符多次存在的所有记录,但该逻辑存在明显缺陷。

是否有一个函数或查询或其他任何东西可以帮助我生成一个记录列表,这些记录的地址可能以稍微不同的方式存在多次?

【问题讨论】:

  • 我认为不存在这样的功能。你必须自己处理。

标签: sql database ms-access standards


【解决方案1】:

这是一项棘手的业务……黑魔法和科学是同等重要的。光是林荫大道的变化,你就会惊叹不已。

这就是我使用 Google API 的原因。对于初始数据集来说,这可能很耗时,但只需要解决新添加的问题。

例如

https://maps.googleapis.com/maps/api/geocode/json?address=500 S Main St,Providence RI 02903

部分返回

"formatted_address" : "500 S Main St, Providence, RI 02903, USA"

好消息是

https://maps.googleapis.com/maps/api/geocode/json?address=500 South Main Steet,Providence RI 02903

返回与上一个查询相同的格式化地址

"formatted_address" : "500 S Main St, Providence, RI 02903, USA"

VBA 示例:

执行以下代码时...

' VBA project Reference required:
' Microsoft XML, v3.0

Dim httpReq As New MSXML2.ServerXMLHTTP
httpReq.Open "GET", "https://maps.googleapis.com/maps/api/geocode/json?address=500 South Main Steet,Providence RI 02903", False
httpReq.send
Dim response As String
response = httpReq.responseText

...字符串变量response包含以下JSON数据:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "500",
               "short_name" : "500",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "South Main Street",
               "short_name" : "S Main St",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Fox Point",
               "short_name" : "Fox Point",
               "types" : [ "neighborhood", "political" ]
            },
            {
               "long_name" : "Providence",
               "short_name" : "Providence",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Providence County",
               "short_name" : "Providence County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Rhode Island",
               "short_name" : "RI",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "02903",
               "short_name" : "02903",
               "types" : [ "postal_code" ]
            },
            {
               "long_name" : "2915",
               "short_name" : "2915",
               "types" : [ "postal_code_suffix" ]
            }
         ],
         "formatted_address" : "500 S Main St, Providence, RI 02903, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 41.82055829999999,
                  "lng" : -71.4028137
               },
               "southwest" : {
                  "lat" : 41.8204014,
                  "lng" : -71.40319219999999
               }
            },
            "location" : {
               "lat" : 41.8204799,
               "lng" : -71.40300289999999
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 41.8218288302915,
                  "lng" : -71.40165396970851
               },
               "southwest" : {
                  "lat" : 41.8191308697085,
                  "lng" : -71.40435193029151
               }
            }
         },
         "partial_match" : true,
         "place_id" : "ChIJicPQAT9F5IkRfq2njkYqZtE",
         "types" : [ "premise" ]
      }
   ],
   "status" : "OK"
}

【讨论】:

  • 可以用一个简单的HttpWebRequest处理吗?
  • @mcNets 绝对是,但您需要解析 JSON。
  • @mcNets 没说,你每天可能有 2000 次点击,但扩展访问非常便宜。您还可以获得 LAT/LNG
  • @mcNets 只是一个想法,您也许可以在多台机器上解析工作。我将这种方法用于数以万计的可怕地址。现在,它不是 100% ...... GIGO...... 但之后我们进行了名义上的磨砂。
  • @JohnnyBones 您可以使用我项目中的 Json 模块(用于其他目的):VBA.CVRAPI
【解决方案2】:

John 的回答完全有效,我还想补充一点,您可以使用 HERE API 实现相同的目标。您可以使用 HERE 地图免费执行此操作,并且无需信用卡即可开始。

https://geocode.search.hereapi.com/v1/geocode?q=500 West Main Street&apiKey=YOUR_API_KEY

返回:

{
    "items": [
        {
            "title": "500 W Main St, Alhambra, CA 91801-3308, United States",
            "id": "here:af:streetsection:-2rEzgpCkFyX.gMQjWtV1A:CgcIBCCl6q07EAEaAzUwMChk",
            "resultType": "houseNumber",
            "houseNumberType": "PA",
            "address": {
                "label": "500 W Main St, Alhambra, CA 91801-3308, United States",
                "countryCode": "USA",
                "countryName": "United States",
                "state": "California",
                "county": "Los Angeles",
                "city": "Alhambra",
                "street": "W Main St",
                "postalCode": "91801-3308",
                "houseNumber": "500"
            },
            "position": {
                "lat": 34.09193,
                "lng": -118.13238
            },
            "access": [
                {
                    "lat": 34.09241,
                    "lng": -118.13272
                }
            ],
            "mapView": {
                "west": -118.13347,
                "south": 34.09103,
                "east": -118.13129,
                "north": 34.09283
            },
            "scoring": {
                "queryScore": 1.0,
                "fieldScore": {
                    "streets": [
                        1.0
                    ],
                    "houseNumber": 1.0
                }
            }
        },
        additional results...

因此您可以根据标题规范化您的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2010-09-18
    • 2014-07-13
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多