3

基本上我正在为我的网站制作申请表。我需要使用用户输入的邮政编码搜索完整地址,并希望提供该邮政编码的结果供他们选择。我知道将需要一个各种数据库,但我正在努力寻找它,并希望得到任何帮助。

4

7 回答 7

2

在英国,您可以使用 192.com 从任何邮政编码获取完整地址。

他们在 192.com 上有一个完全免费的数据库

我不为他们或他们的任何广告商工作,但已将此站点用于许多数据输入应用程序。

根据您正在搜索的邮政编码格式化 URL。IE

'a1 1aa' 将是http://www.192.com/places/a/a1-1/a1-1aa

这将列出邮政编码中的所有地址。

这是我写的课程,希望对您有所帮助:

    Imports System.Net
    Imports System.IO

    Public Class PCLookup
        Property Addresses As List(Of Address)

        Public Sub New(Postcode As String)
            GetAddresses(CreatDoc(Postcode))
        End Sub

        Private Function CreatDoc(PostCode As String) As mshtml.HTMLDocument
            Dim URL As String = FormatPostcode(PostCode)
            If URL = "" Then Return New mshtml.HTMLDocument
            Dim request As HttpWebRequest = WebRequest.Create(URL)
            Dim response As HttpWebResponse = request.GetResponse()
            Dim reader As StreamReader = New StreamReader(response.GetResponseStream())
            Dim doc As New mshtml.HTMLDocument
            Dim objDoc As mshtml.IHTMLDocument2 = doc
            Dim param As Object() = {reader.ReadToEnd()}
            objDoc.write(param)
            response.Close()
            reader.Close()
            Return objDoc
        End Function

        Private Function FormatPostcode(Postcode As String) As String
            Dim FullURL As String = "http://www.192.com/places/"
            Do Until Postcode.Contains(" ") = False
                Postcode = Replace(Postcode, " ", "")
            Loop
            If Len(Postcode) > 7 Or Len(Postcode) < 5 Then
                Return ""
            End If
            If Len(Postcode) = 5 Then
                FullURL &= Mid(Postcode, 1, 1) & "/"
                FullURL &= Mid(Postcode, 1, 2) & "-" & Mid(Postcode, 3, 1) & "/"
                FullURL &= Mid(Postcode, 1, 2) & "-" & Mid(Postcode, 3) & "/"
            End If
            If Len(Postcode) = 6 Then
                If IsNumeric(Mid(Postcode, 2, 1)) Then
                    FullURL &= Mid(Postcode, 1, 1) & "/"
                    FullURL &= Mid(Postcode, 1, 3) & "-" & Mid(Postcode, 4, 1) & "/"
                    FullURL &= Mid(Postcode, 1, 3) & "-" & Mid(Postcode, 4) & "/"
                Else
                    FullURL &= Mid(Postcode, 1, 2) & "/"
                    FullURL &= Mid(Postcode, 1, 3) & "-" & Mid(Postcode, 4, 1) & "/"
                    FullURL &= Mid(Postcode, 1, 3) & "-" & Mid(Postcode, 4) & "/"
                End If
            End If
            If Len(Postcode) = 7 Then
                FullURL &= Mid(Postcode, 1, 2) & "/"
                FullURL &= Mid(Postcode, 1, 4) & "-" & Mid(Postcode, 5, 1) & "/"
                FullURL &= Mid(Postcode, 1, 4) & "-" & Mid(Postcode, 5) & "/"
            End If
            Return FullURL
        End Function

        Private Sub GetAddresses(ObjDoc As mshtml.HTMLDocument)
            Dim Obj As mshtml.IHTMLElementCollection = ObjDoc.getElementsByTagName("td")
            Addresses = New List(Of Address)
            For Each TD As mshtml.HTMLTableCell In Obj
                If TD.className = "address" Then
                    Dim FullAddress As String = TD.innerText
                    Addresses.Add(New Address(FullAddress))
                End If
            Next        
        End Sub

    End Class

    Public Class Address
        Property Line1 As String
        Property Line2 As String
        Property Line3 As String
        Property Line4 As String
        Property Postcode As String
        Public Sub New(FullAddress As String)
            Dim Obj As Object = Split(FullAddress, ", ")
            Select Case UBound(Obj)
                Case 4
                    Line1 = Obj(0) & " " & Obj(1)
                    Line2 = ""
                    Line3 = Obj(2)
                    Line4 = Obj(3)
                    Postcode = Obj(4)
                Case 5
                    Line1 = Obj(0) & " " & Obj(1)
                    Line2 = Obj(2)
                    Line3 = Obj(3)
                    Line4 = Obj(4)
                    Postcode = Obj(5)
                Case 6
                    Line1 = Obj(0) & " " & Obj(1)
                    Line2 = Obj(2) & " " & Obj(3)
                    Line3 = Obj(4)
                    Line4 = Obj(5)
                    Postcode = Obj(6)
            End Select

        End Sub
    End Class

对不起,如果代码有点乱,自学程序员!

于 2012-08-29T14:32:04.990 回答
1

在 NL,您可以通过邮政编码和门牌号来唯一标识地址。

并非所有国家/地区都有此属性,因此您的里程可能会有所不同。

但是你会做这样的事情:

SELECT 
  CONCAT(street,' ','$housenumber') AS streetplusnumber 
  , city
FROM postcodetostreet p
WHERE p.postcode = '$postcode' and '$housenumber' between minnumber and maxnumber

街道的表邮政编码如下所示:

postcodetostreet
------------------
postcode varchar(6) primary key
street varchar(512)
city
minnumber
maxnumber

数据库通常是从第三方购买的。

于 2011-11-01T11:56:13.207 回答
1

我在自己寻找答案时发现了这个(通过http://ben-major.co.uk/2012/02/using-google-maps-to-lookup-uk-postcodes/ )。希望能帮助到你:

/*fill out the postcode and hit search*/
(function($) {
$.fn.searchPc = function(options) {

    var settings = $.extend({
        address1: 'address1',
        address2: 'address2',
        address3: 'address3',
        address4: 'address4'
    }, options);

    return this.each(function() {

        var $el = $(this);
        var $form = $el.closest('form');

        //insert the button on the form
        $('<a class="postCodeLookup">Search</a>').insertAfter($el);
        $('.postCodeLookup', $form).button({icons:{primary:'ui-icon-search'}});

        $form.on('click', '.postCodeLookup', function() {

            $.post('http://maps.googleapis.com/maps/api/geocode/json?address='+$el.val()+'&sensor=false', function(r) {
                var lat = r['results'][0]['geometry']['location']['lat'];
                var lng = r['results'][0]['geometry']['location']['lng'];
                $.post('http://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+lng+'&sensor=false', function(address) {
                    $('input[name='+settings.address1+']').val(address['results'][0]['address_components'][0]['long_name']);
                    $('input[name='+settings.address2+']').val(address['results'][0]['address_components'][1]['long_name']);
                    $('input[name='+settings.address3+']').val(address['results'][0]['address_components'][2]['long_name']);
                    $('input[name='+settings.address4+']').val(address['results'][0]['address_components'][3]['long_name']);
                });
            });

        });



    });
};
})(jQuery);


    $('input[name=postcode]').searchPc({
        address2: 'custom_field',
    });

http://jsfiddle.net/rxFBj/3/

于 2014-01-04T01:07:27.810 回答
0

我看到你在英国,不幸的是,这意味着要花一大笔钱来访问皇家邮政的邮政编码地址文件(PAF)。

于 2011-11-01T11:52:10.230 回答
0

你可以使用像谷歌地理定位 API 这样的网络服务。

于 2011-11-01T11:52:52.570 回答
0

你的意思是像下面这样的服务吗?

http://www.postcodeanywhere.co.uk/demos/address-finder.aspx

我只建议这样做,因为我们在工作中使用它并且它没有给我们带来任何问题,但我想还有很多其他同样好的选择。

这是一项付费服务​​(我相信)。

于 2011-11-01T11:54:19.743 回答
0

如果您想在地址表单中添加邮政编码查找解决方案,您需要购买付费服务才能访问 Royal Mail 的邮政编码地址文件。

Ideal Postcodes 为英国提供了这样的解决方案。您可以在此处查看演示:https ://ideal-postcodes.co.uk/postcode-lookup-demo

于 2021-03-22T10:55:38.597 回答