2011-11-30 19 views
9

पर जीपीएस स्थिति मैं स्थानीय समय जानना चाहता हूं जहां मेरा उपयोगकर्ता अपना अनुरोध भेज रहा है। मूल रूप से, वहाँ इसटाइमज़ोन

var localTime = getLocalTime(lat, long); 

की तरह एक समारोह के रूप में ऐसी कोई बात मुझे यकीन है कि अगर अक्षांश पर एक साधारण विभाजन काम कर सकता था नहीं कर रहा हूँ, क्योंकि देशों के सबसे उत्तम ज्यामितीय आकार नहीं है।

कोई भी मदद महान होगी। कोई भी भाषा स्वीकार की जाती है। मैं दूरस्थ एपीआई को कॉल करने से बचना चाहता हूं।

+0

ठीक है, इसमें एक दूरस्थ API शामिल है, लेकिन इस प्रश्न का उत्तर देखें। यह आपको वही दे सकता है जो आप चाहते हैं: http://stackoverflow.com/questions/41504/timezone-lookup-from-latitude- longitude। –

उत्तर

-3

क्या आप बस यह निर्धारित करने के लिए उपयोगकर्ता आईपी का उपयोग नहीं कर सके कि वे किस में रहते हैं? और फिर आप स्थानीय समय प्राप्त करने के लिए (देश | जीएमटी के साथ अंतर) का एक सरणी उपयोग करते हैं।

2

मैं कुछ दिनों पहले एक ही चीज़ की खोज कर रहा था और दुर्भाग्यवश मुझे एपीआई या एक साधारण फ़ंक्शन नहीं मिला जो यह करता है। जैसा कि आपने कहा था कि देशों में सही ज्यामितीय आकार नहीं हैं। आपको प्रत्येक समय क्षेत्र के क्षेत्र का प्रतिनिधित्व करना होगा और देखें कि आपका बिंदु कहां स्थित है। मुझे लगता है कि यह दर्द होगा और मुझे नहीं पता कि यह बिल्कुल किया जा सकता है या नहीं।

मुझे मिला केवल एक ही वर्णन किया गया है: Determine timezone from latitude/longitude without using web services like Geonames.org। असल में आपको टाइमज़ोन के बारे में जानकारी के साथ एक डेटाबेस की आवश्यकता होती है और आप यह देखने की कोशिश कर रहे हैं कि आपकी रुचि के सबसे नज़दीकी कौन सा है।

हालांकि, मैं स्थिर समाधान (इंटरनेट का उपयोग किए बिना) की तलाश में था, इसलिए यदि आप इंटरनेट कनेक्शन का उपयोग कर सकते हैं तो आप इसका उपयोग कर सकते हैं: http://www.earthtools.org/webservices.htm जो आपको लेट/लोन निर्देशांक दिए गए टाइमज़ोन देने के लिए एक webservice प्रदान करता है।

4

Google Time Zone API ऐसा लगता है कि आप क्या कर रहे हैं।

टाइम जोन एपीआई पृथ्वी की सतह पर स्थानों के लिए समय ऑफसेट डेटा प्रदान करता है। किसी विशिष्ट अक्षांश/रेखांश युगल के लिए समय क्षेत्र की जानकारी का अनुरोध करने से उस समय क्षेत्र का नाम, यूटीसी से समय ऑफसेट और डेलाइट सेविंग ऑफसेट वापस आ जाएगा।

3

मुझे आज भी एक ही समस्या का सामना करना पड़ा, और मुझे यकीन नहीं है कि इस समय के बाद मेरा जवाब कितना प्रासंगिक है, लेकिन मूल रूप से मैंने केवल एक पायथन समारोह लिखा जो आप चाहते हैं। आप इसे यहां देख सकते हैं।

https://github.com/cstich/gpstotz

संपादित करें:

टिप्पणी मैं भी कोड पोस्ट करना चाहिए में उल्लेख किया है। कोड एरिक मुलर के टाइमज़ोन के आकारफाइल पर आधारित है, जिसे आप यहां प्राप्त कर सकते हैं - http://efele.net/maps/tz/world/

संपादित करें 2:

यह शेपफ़ाइलें पता चला है के रूप में (मूल रूप से बाहरी छल्ले, दाएँ हाथ के नियम का उपयोग कर रहे हैं, जबकि आंतरिक छल्ले बाएँ हाथ के नियम का उपयोग कर रहे हैं) बाहरी और आंतरिक के छल्ले के कुछ पुरातन परिभाषा नहीं है। किसी भी मामले में फियोना का ख्याल रखना प्रतीत होता है और मैंने तदनुसार कोड अपडेट किया।

from rtree import index # requires libspatialindex-c3.deb 
from shapely.geometry import Polygon 
from shapely.geometry import Point 

import os 
import fiona 

''' Read the world timezone shapefile ''' 
tzshpFN = os.path.join(os.path.dirname(__file__), 
        'resources/world/tz_world.shp') 

''' Build the geo-index ''' 
idx = index.Index() 
with fiona.open(tzshpFN) as shapes: 
    for i, shape in enumerate(shapes): 
     assert shape['geometry']['type'] == 'Polygon' 
     exterior = shape['geometry']['coordinates'][0] 
     interior = shape['geometry']['coordinates'][1:] 
     record = shape['properties']['TZID'] 
     poly = Polygon(exterior, interior) 
     idx.insert(i, poly.bounds, obj=(i, record, poly)) 


def gpsToTimezone(lat, lon): 
    ''' 
    For a pair of lat, lon coordiantes returns the appropriate timezone info. 
    If a point is on a timezone boundary, then this point is not within the 
    timezone as it is on the boundary. Does not deal with maritime points. 
    For a discussion of those see here: 
    http://efele.net/maps/tz/world/ 
    @lat: latitude 
    @lon: longitude 
    @return: Timezone info string 
    ''' 
    query = [n.object for n in idx.intersection((lon, lat, lon, lat), 
               objects=True)] 
    queryPoint = Point(lon, lat) 
    result = [q[1] for q in query 
       if q[2].contains(queryPoint)] 

    if len(result) > 0: 
     return result[0] 
    else: 
     return None 

if __name__ == "__main__": 
    ''' Tests ''' 
    assert gpsToTimezone(0, 0) is None # In the ocean somewhere 
    assert gpsToTimezone(51.50, 0.12) == 'Europe/London' 
+0

लोगों को ऑफ़-साइट जाने की आवश्यकता के बजाय आपको यहां प्रासंगिक कोड पोस्ट करना चाहिए। अन्य साइटों के लिंक पुराने हो सकते हैं, और एसओ खोज सुविधा द्वारा खोजा नहीं जा सकता है। –

+0

यह समझ में आता है, बस कोड पोस्ट किया। क्या उत्तर में फ़ाइलों को संलग्न करने का कोई तरीका है? – cstich

संबंधित मुद्दे