病院の名前から緯度/経度情報を返すために、AccessDBアプリケーションで新しい機能を使用しています。次の機能は、私が名前&アドレスを提供するときに必要なものを提供します。私は(予期しない)、私は有効な病院の名前を提供しても、関数は書式設定された住所を返すことに気づいた。私は私のデータベースにアドレス情報をバックフィルするためにこれを悪用できると思います。GeoLocation - 構文解析済み/フォーマット済みアドレス?
Geocode.sRetAddress = .selectSingleNode("//formatted_address").Text
は "ほとんど"一貫性があり、区切り文字として "、"を使用して住所/市/州/ ZIP情報を取得するために簡単に解析されます。私の複雑さは、フォーマットされたアドレス文字列に "Floor Number"が含まれるまれなケースです。私の解析ルーチンは失敗します。
私が見つかりました。このルーチン(ない鉱山):
Option Explicit
Option Compare Database
'Public Type containing the geocoding of the postal address
Public Type tGeocodeResult
dLatitude As Double
dLongitude As Double
sRetAddress As String
sAccuracy As String
sStatus As String
End Type
'---------------------------------------------------------------------------------------
' Procedure : Geocode with Google Geocoding API v3
' Version : 1.01
' DateTime : 03/03/2011
' Author : Philben
' Purpose : converting addresses into geographic coordinates
' Parameter : No mandatory. string format or NULL
' Reference : http://code.google.com/intl/fr-FR/apis/maps/documentation/geocoding/index.html
' Remark : Query limit of 2,500 geolocation requests per day
' : A good accuracy is different of a good geocoding !!!
' : Minimum delay between two queries : >= 200 ms
'---------------------------------------------------------------------------------------
Public Function Geocode(Optional ByVal vAddress As Variant = Null, _
Optional ByVal vTown As Variant = Null, _
Optional ByVal vPostCode As Variant = Null, _
Optional ByVal vRegion As Variant = Null, _
Optional ByVal sCountry As String = "UNITED STATES+") As tGeocodeResult
On Error GoTo catch
Dim oXmlDoc As Object
Dim sUrl As String, sFormatAddress As String
If Not IsNull(vAddress) Then vAddress = Replace(vAddress, ",", " ")
sFormatAddress = (vAddress + ",") & _
(vTown + ",") & _
(vRegion + ",") & _
(vPostCode + ",") & _
sCountry
'To create the URL
sUrl = "http://maps.googleapis.com/maps/api/geocode/xml?address=" & sFormatAddress & "&sensor=false"
''XMLDOM to get the XML response
Set oXmlDoc = CreateObject("Microsoft.XMLDOM")
With oXmlDoc
.Async = False
If .Load(sUrl) And Not .selectSingleNode("GeocodeResponse/status") Is Nothing Then
'Status code
Geocode.sStatus = .selectSingleNode("GeocodeResponse/status").Text
'If a result is returned
If Not .selectSingleNode("GeocodeResponse/result") Is Nothing Then
'formatted_address
Geocode.sRetAddress = .selectSingleNode("//formatted_address").Text
'Accuracy
Geocode.sAccuracy = .selectSingleNode("//location_type").Text
'Latitude and longitude
Geocode.dLatitude = Val(.selectSingleNode("//location/lat").Text)
Geocode.dLongitude = Val(.selectSingleNode("//location/lng").Text)
End If
End If
End With
Set oXmlDoc = Nothing
Exit Function
catch:
Set oXmlDoc = Nothing
Err.Raise Err.Number, , Err.Description
End Function
例の結果(Geocode.sRetAddress - フォーマットされたアドレス):
良い:100 Sレイモンドアベニュー、アルハンブラ、CA 91801、USA
良い:3040、ソルトクリークのLn、アーリントンハイツ、IL 60005、USA
悪い:4階、2450アシュビーアベニュー、バークレー、CA 94705、USA
質問
どれ手がかり書式設定されたアドレスの「床」コンポーネントの場合は除外され、あるいは明示的にJUST所望の成分を返すことができますか?
おかげで、
マーク・ペルティエ
PSは>私は現在、文字列に「」の数をカウントし、条件付きで解析タスクを処理しています。しかし、一般的なアプローチとして、私はまだ遭遇していない他の例外がある可能性があります。
コンマの数を数える(またはコンマで分割してから連結する)のは、合理的な方法です。それがうまくいかない状況を示すことができない場合、私たちのためにそれを説明するのは難しいです。 –
有効なリンクを提供することは可能ですか? – SIM
Shahin、ここにリンクがあります:https://access-programmers.co.uk/forums/showthread.php?t=206247 –