寻找一对城市或国家的经度和纬度

时间:2014-04-17 03:22:42

标签: python twitter streaming

我正在尝试在Python中使用Twitter API,对于流API,我需要传递如何查找城市或国家或任何位置的经度和纬度对。

有没有办法在Python中找到这个 Pair ,或者是否有一个文件具有城市/国家/等的经度和纬度?

我需要一对经度和纬度,即两个经度和两个纬度。一个位于该位置的东北部,另一个位于该位置的西南部(假设该城市可以用矩形表示)。

2 个答案:

答案 0 :(得分:1)

使用有用的BeautifulSoup

代码:

import re
import urllib2

# Import Custom libraries
from BeautifulSoup import BeautifulSoup, BeautifulStoneSoup

def render_google_uri(idict):
    '''
    Render the appropriate Google Map Api request uri
    '''
    base_url = "http://maps.googleapis.com/maps/api/geocode/xml?"
    options = [(key,re.sub("\s+", "+", value)) for (key, value) in idict.items()]

    options = map(lambda x: "=".join(x), options)
    options = "&".join(options)
    url = base_url + options
    return url

def get_street_position(*args):
    '''
    Longitude and Latitude from Street Address
    '''
    def is_result(itag):
        if itag.name == "result":
            if itag.type.text == "locality":
                return True
        return False

    ret_list = []
    for address in args:
        google_api_dict = \
        {
            "address" : address,
            "sensor"  : "false",
        }
        request_uri = render_google_uri(google_api_dict)
        request = urllib2.Request(request_uri, None, {})

        try:
            response = urllib2.urlopen(request)
            the_page = response.read()
        except Exception:
            the_page = ""

        if the_page:
            pool = BeautifulStoneSoup(the_page)
            result = pool.find(is_result)

            if result:
                bounds = result.find("bounds")

                if bounds:

                    cur_dict = \
                    {
                        "Address"        : address,
                        "Google Address" : result.formatted_address.text,
                        "Bounds"         : \
                        {
                            "SW" :
                            {
                                "Longitude" : bounds.southwest.lng.text,
                                "Latitude"  : bounds.southwest.lat.text
                            },
                            "NE" :
                            {
                                "Longitude" : bounds.northeast.lng.text,
                                "Latitude"  : bounds.northeast.lat.text
                            }
                        }
                    }
                    ret_list += [cur_dict]

    return ret_list

if __name__ == "__main__":
    print get_street_position("Sydney", "Marrakech")

答案 1 :(得分:0)

快速谷歌透露: http://www.kindle-maps.com/blog/csv-location-of-all-the-cities-in-the-world.html

将此CSV读入内存应该是微不足道的。

或者,由于您已经在线,因此可以使用Google地图或其他API来提取信息。