#php #codeigniter #lookup #street-address #postal-code
#php #codeigniter #поиск #уличный адрес #почтовый индекс
Вопрос:
По сути, я создаю форму заявки для своего сайта. Мне нужно выполнить поиск полного адреса, используя введенный пользователем почтовый индекс, и я хотел бы предложить результаты этого почтового индекса для их выбора. Я знаю, что потребуется какая-то база данных, но я изо всех сил пытаюсь найти ее источник и был бы признателен за любую помощь.
Комментарии:
1. … и что именно вы подразумеваете под «результатами этого почтового индекса»?
2. Прошу прощения за то, что я был слишком расплывчатым, я в Великобритании, я хотел, чтобы пользователь ввел почтовый индекс SW1 2LX, например, и был возвращен с адресами в этом почтовом коде, например, 1 some road, Лондон
Ответ №1:
В Великобритании вы можете получить полный адрес из любого почтового индекса, используя 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 amp;= Mid(Postcode, 1, 1) amp; "/"
FullURL amp;= Mid(Postcode, 1, 2) amp; "-" amp; Mid(Postcode, 3, 1) amp; "/"
FullURL amp;= Mid(Postcode, 1, 2) amp; "-" amp; Mid(Postcode, 3) amp; "/"
End If
If Len(Postcode) = 6 Then
If IsNumeric(Mid(Postcode, 2, 1)) Then
FullURL amp;= Mid(Postcode, 1, 1) amp; "/"
FullURL amp;= Mid(Postcode, 1, 3) amp; "-" amp; Mid(Postcode, 4, 1) amp; "/"
FullURL amp;= Mid(Postcode, 1, 3) amp; "-" amp; Mid(Postcode, 4) amp; "/"
Else
FullURL amp;= Mid(Postcode, 1, 2) amp; "/"
FullURL amp;= Mid(Postcode, 1, 3) amp; "-" amp; Mid(Postcode, 4, 1) amp; "/"
FullURL amp;= Mid(Postcode, 1, 3) amp; "-" amp; Mid(Postcode, 4) amp; "/"
End If
End If
If Len(Postcode) = 7 Then
FullURL amp;= Mid(Postcode, 1, 2) amp; "/"
FullURL amp;= Mid(Postcode, 1, 4) amp; "-" amp; Mid(Postcode, 5, 1) amp; "/"
FullURL amp;= Mid(Postcode, 1, 4) amp; "-" amp; Mid(Postcode, 5) amp; "/"
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) amp; " " amp; Obj(1)
Line2 = ""
Line3 = Obj(2)
Line4 = Obj(3)
Postcode = Obj(4)
Case 5
Line1 = Obj(0) amp; " " amp; Obj(1)
Line2 = Obj(2)
Line3 = Obj(3)
Line4 = Obj(4)
Postcode = Obj(5)
Case 6
Line1 = Obj(0) amp; " " amp; Obj(1)
Line2 = Obj(2) amp; " " amp; Obj(3)
Line3 = Obj(4)
Line4 = Obj(5)
Postcode = Obj(6)
End Select
End Sub
End Class
Извините, если код немного грязный, программист-самоучка!
Комментарии:
1. 192 сменили свой сайт. Добавьте это перед getrequest: С запросом. AllowAutoRedirect = True . Тайм-аут = 30000 .UserAgent = «Mozilla / 4.0 (совместимый; MSIE 5.01; Windows NT 5.0)» .Предварительная проверка подлинности = True . Учетные данные = CredentialCache. DefaultCredentials заканчиваются на
Ответ №2:
В 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
База данных обычно приобретается у третьей стороны.
Ответ №3:
Я нашел это (через 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() 'amp;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 'amp;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',
});
Комментарии:
1. Ваше приложение находит широту / Lng почтового индекса, а затем выполняет обратный поиск по одному уличному адресу с этой широтой / Lng, поэтому оно всегда найдет только одно свойство. Не решение исходного вопроса.
Ответ №4:
Я вижу, что вы в Великобритании, что, к сожалению, означает, что вы тратите неприличную сумму денег за доступ к файлу почтовых адресов Royal Mail (PAF). Почтовый индекс.
Ответ №5:
Вы могли бы использовать веб-сервис, такой как Google geolocation api.
Комментарии:
1. Как? Я не думаю, что в geo API есть способ получить все возможные адреса, соответствующие почтовому индексу.
2. Это то, чего он хочет? Введите почтовый индекс и список, возможно, перечислите 5000 полных адресов?
3. Похоже на то. Он очень неясен. (Тем не менее, Downvote не мой, хотя, даже если бы это было правильно, это был бы очень тонкий ответ. Возможно, стоит добавить несколько ссылок)
Ответ №6:
Вы имеете в виду сервис, подобный следующему?
http://www.postcodeanywhere.co.uk/demos/address-finder.aspx
Я предлагаю это только потому, что мы используем это на работе, и это не доставило нам никаких проблем, но я бы предположил, что есть много других, столь же хороших вариантов.
Хотя это платная услуга (я полагаю).
Ответ №7:
Если вы хотите добавить решение для поиска почтового индекса в свою адресную форму, вам нужно будет приобрести платную услугу для доступа к файлу почтовых индексов Royal Mail.
Ideal Postcodes предлагает подобное решение для Великобритании. Вы можете просмотреть демонстрацию здесь: https://ideal-postcodes.co.uk/postcode-lookup-demo