基本的には自分のサイトの申請書を作っています。ユーザー入力の郵便番号を使用して完全な住所を検索する必要があり、その郵便番号の結果を提供して選択できるようにしたいと考えています。ある種のデータベースが必要になることは承知していますが、これを入手するのに苦労しており、助けていただければ幸いです。
7 に答える
英国では、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
コードが少し乱雑で、独学のプログラマーの場合は申し訳ありません。
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
データベースは通常、サードパーティから購入されます。
これに対する答えを自分で探しているときに、これを見つけました( 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',
});
あなたは英国にいるようですが、残念ながら、Royal Mailの郵便番号アドレスファイル(PAF)にアクセスするためにわいせつな金額をフォークすることを意味します。
GoogleのgeolocationapiのようなWebサービスを使用できます。
次のようなサービスという意味ですか?
http://www.postcodeanywhere.co.uk/demos/address-finder.aspx
私たちはこれを仕事で使用しているのでこれを提案するだけで、問題はありませんが、他にも同じように優れたオプションがたくさんあると思います。
これは有料サービスですが(私は信じています)。