2013-04-01 26 views
8

tôi đang cố gắng để có được những múi giờ cho vĩ độ và kinh độ nhưng đang gặp một vài vấn đề Những sai lầm có lẽ rất cơ bảnLấy Múi giờ từ các tọa độ của Lat Long?

Tôi có một bảng trong một cơ sở dữ liệu với khoảng 600 dòng. Mỗi hàng có chứa một tọa độ dài lat cho một nơi nào đó trên thế giới Tôi muốn đưa các tọa độ này vào một hàm và sau đó lấy lại múi giờ. Mục đích là chuyển đổi các sự kiện có dấu thời gian địa phương trong mỗi 600 địa điểm này thành thời gian UTC

Tôi đã tìm thấy blog post sử dụng a piece of code để lấy các múi giờ từ tọa độ địa lý.

Khi tôi cố gắng chạy mã, tôi nhận được lỗi geonames is not defined. Tôi đã đăng ký tài khoản với tên địa lý.

Tôi nghĩ rằng tôi vừa lưu tệp chức năng vào thư mục sai hoặc đơn giản. bất cứ ai có thể giúp

#------------------------------------------------------------------------------- 
# Converts latitude longitude into a time zone 
# REF: https://gist.github.com/pamelafox/2288222 
# REF: http://blog.pamelafox.org/2012/04/converting-addresses-to-timezones-in.html 
#------------------------------------------------------------------------------- 

geonames_client = geonames.GeonamesClient('Username_alpha') 
geonames_result = geonames_client.find_timezone({'lat': 48.871236, 'lng': 2.77928}) 
user.timezone = geonames_result['timezoneId'] 
+4

Dường như bạn không nhập * 'geonames'. Thêm dòng 'geonames' nhập? –

+2

Xem thêm [mục cộng đồng wiki này] (http://stackoverflow.com/q/16086962/634824) –

+1

liên quan: [Lấy Múi giờ từ Thành phố bằng Python/Django] (http://stackoverflow.com/q/16505501/ 4279), xem ['pytzwhere' ví dụ trong câu trả lời của tôi] (http://stackoverflow.com/a/16519004/4279). – jfs

Trả lời

1

này hoạt động như mong đợi:

import geonames 
geonames_client = geonames.GeonamesClient('demo') 
geonames_result = geonames_client.find_timezone({'lat': 48.871236, 'lng': 2.77928}) 
print geonames_result['timezoneId'] 

Output:

'Europe/Paris' 
+0

@manuel_riel thư viện này là gì ... nhập địa lý? – sirvon

+1

Chỉ cần một gói Python kết thúc tốt đẹp geonames.org. Đó là trong Pypi https://pypi.python.org/pypi/geonames/ –

+0

Gói bạn đã liên kết dường như không có lớp GeonamesClient. Bạn có thể sử dụng một gói khác? – waterproof

2
import requests 
lat = 48.871236 ## your latitude 
lon = 2.77928 ## your longitude 

url = "http://api.geonames.org/timezoneJSON?formatted=true&lat={}&lng={}&username=demo".format(lat,lon) 

r = requests.get(url) ## Make a request 
return r.json()['timezoneId'] ## return the timezone 
+0

Nó hoạt động tuyệt vời. Tuy nhiên, có bất kỳ giới hạn truy cập nào cho việc sử dụng dịch vụ web này không? – Sean

8

Với tzwhere và pytz:

import datetime 
import pytz 
from tzwhere import tzwhere 

tzwhere = tzwhere.tzwhere() 
timezone_str = tzwhere.tzNameAt(37.3880961, -5.9823299) # Seville coordinates 
timezone_str 
#> Europe/Madrid 

timezone = pytz.timezone(timezone_str) 
dt = datetime.datetime.now() 
timezone.utcoffset(dt) 
#> datetime.timedelta(0, 7200) 
+1

Nó hoạt động như một giải pháp ngoại tuyến mà chúng tôi cần. Mặc dù một số có thể gặp lỗi: Lỗi OSE: Không thể tìm thấy geos_c lib hoặc tải bất kỳ biến thể nào của nó khi nhập tzwhere. Điều này đã giúp: http://stackoverflow.com/a/23057508/3699126 – sunsetjunks

+0

không hoạt động trong mac os x sierra và python 2.7 –

+0

Mọi chi tiết bổ sung? Lỗi tin nhắn? Bạn có thể thử với Python 3 không? – tuxayo

0

Tôi đã có thể làm một tra cứu thích hợp cho mục đích sử dụng của tôi timezonefinder:

import datetime 
import timezonefinder, pytz 

tf = timezonefinder.TimezoneFinder() 

# Get the tz-database-style time zone name (e.g. 'America/Vancouver') or None 
timezone_str = tf.certain_timezone_at(lat=49.2827, lng=-123.1207) 

if timezone_str is None: 
    print "Could not determine the time zone" 
else: 
    # Display the current time in that time zone 
    timezone = pytz.timezone(timezone_str) 
    dt = datetime.datetime.utcnow() 
    print "The time in %s is %s" % (timezone_str, dt + timezone.utcoffset(dt)) 

Có một cuộc thảo luận về các phương pháp timezonefinder và hạn chế của nó trên its pypi page.

timezonefinderpytz có thể được tìm thấy trong các gói pip cùng tên.