Поиск полного адреса из почтового индекса, каково решение? - PullRequest
1 голос
/ 01 ноября 2011

В основном я делаю форму заявки для своего сайта. Мне нужно найти полный адрес, используя введенный пользователем почтовый индекс, и хочу предложить результаты этого почтового индекса. Я знаю, что потребуется какая-то база данных, но я изо всех сил пытаюсь найти ее и буду признательна за любую помощь.

Ответы [ 6 ]

2 голосов
/ 29 августа 2012

В Великобритании вы можете получить полный адрес с любого почтового индекса, используя 192.com.

У них есть полностью бесплатная база данных, доступная на 192.com

Я не работаю для них или их рекламодателей, но использовал этот сайт для многих приложений ввода данных.

Отформатируйте URL из искомого почтового индекса. т.е.

'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

Извините, если код немного запутанный, программист-самоучка!

1 голос
/ 04 января 2014

Я нашел это (через 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/

0 голосов
/ 01 ноября 2011

В 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

База данных обычно приобретается у третьеговечеринка.

0 голосов
/ 01 ноября 2011

Вы имеете в виду услугу, подобную следующей?

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

Я предлагаю это только потому, что мы используем это на работе, и это не доставило нам никаких проблем, но я бы предположил, что есть множество других столь же хороших вариантов.

Хотя это платная услуга (я верю).

0 голосов
/ 01 ноября 2011

Вы можете использовать веб-сервис, такой как Googles Geolocation API.

0 голосов
/ 01 ноября 2011

Я вижу, что вы находитесь в Великобритании, что, к сожалению, означает, что вы должны получить нецензурную сумму денег за доступ к Адресному файлу почтового индекса Royal Mail (PAF).

...