You can use the Yahoo service called YQL. This service is free for a limited number of requests, up to 100,000 per day. Then you can get the latitude and longitude from the XML response in the query / results / location / centroid.
One thing that I noticed with this service is that city names must be exact, and this can be multiple results.
http://developer.yahoo.com/yql/
Example YQL query:
http://query.yahooapis.com/v1/public/yql?q=SELECT * FROM geo.places WHERE text="Seattle" and placeTypeName = "Town"
XML response:
<?xml version="1.0" encoding="UTF-8"?> <query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2012-07-09T16:20:40Z" yahoo:lang="en-US"> <results> <place xmlns="http://where.yahooapis.com/v1/schema.rng" xml:lang="en-US" yahoo:uri="http://where.yahooapis.com/v1/place/2490383"> <woeid>2490383</woeid> <placeTypeName code="7">Town</placeTypeName> <name>Seattle</name> <country code="US" type="Country">United States</country> <admin1 code="US-WA" type="State">Washington</admin1> <admin2 code="" type="County">King</admin2> <admin3/> <locality1 type="Town">Seattle</locality1> <locality2/> <postal/> <centroid> <latitude>47.603561</latitude> <longitude>-122.329437</longitude> </centroid> <boundingBox> <southWest> <latitude>47.422359</latitude> <longitude>-122.472153</longitude> </southWest> <northEast> <latitude>47.745071</latitude> <longitude>-122.176193</longitude> </northEast> </boundingBox> <areaRank>6</areaRank> <popRank>12</popRank> </place> </results> </query>
Jg in sd
source share