I'm looking for a good tool that can take a full mailing address, formatted for display or use with a mailing label, and convert it into a structured object.
So for instance:
// Start with a formatted address in a single string
string f = "18698 E. Main Street\r\nBig Town, AZ, 86011";
// Parse into address
Address addr = new Address(f);
addr.Street; // 18698 E. Main Street
addr.Locality; // Big Town
addr.Region; // AZ
addr.PostalCode; // 86011
Now I could do this using RegEx. But the tricky part is keeping it general enough to handle any address in the world!
I'm sure there has to be something out there that can do it.
If anyone noticed, this is actually the format of the opensocial.address object.
The Googlemaps API works pretty well for this. E.g., suppose you are given the string "120 w 45 st nyc". Pass it into the Googlemaps API like so: http://maps.google.com/maps/geo?q=120+w+45+st+nyc
and you get this response:
{
"name": "120 w 45 st nyc",
"Status": {
"code": 200,
"request": "geocode"
},
"Placemark": [ {
"id": "p1",
"address": "120 W 45th St, New York, NY 10036, USA",
"AddressDetails": {"Country": {"CountryNameCode": "US","CountryName": "USA","AdministrativeArea": {"AdministrativeAreaName": "NY","Locality": {"LocalityName": "New York","Thoroughfare":{"ThoroughfareName": "120 W 45th St"},"PostalCode": {"PostalCodeNumber": "10036"}}}},"Accuracy": 8},
"ExtendedData": {
"LatLonBox": {
"north": 40.7603883,
"south": 40.7540931,
"east": -73.9807141,
"west": -73.9870093
}
},
"Point": {
"coordinates": [ -73.9838617, 40.7572407, 0 ]
}
} ]
}