2013-12-06 3 views
2

Надеюсь, что все хорошо.iOS Development - Общение города с NSTimezone Оффлайн

Итак, я занимаюсь разработкой приложения iOS с часовым поясом. Приложение требует, чтобы у нас был список городов с высоким населением, и когда пользователь выбирает его, он определяет идентификатор часового пояса Olson, необходимый для построения объекта NSTimeZone (который мы затем используем для конверсий NSDate).

Мне удалось получить список городов и их соответствующих лат и lng, которые я планировал прокормить в конечной точке обслуживания зоны времени в Geoname, чтобы определить вышеупомянутый идентификатор часового пояса Olson для каждого города.

Проблема в том, что количество запросов, которые мне нужно будет сделать, огромно, и мне интересно, нет ли более простого решения моей проблемы. Любые предложения/идеи будут высоко оценены.

Спасибо всем!

ответ

1

Вы должны построить отображение города/часового пояса только один раз (в разработке), а затем предоставить готовое сопоставление с приложением. Затем приложение никогда не нуждается в любом поиске в Интернете.

Вы также можете разместить файл на своем собственном сервере и периодически проверять приложение на наличие обновлений.

+0

Я согласен. Если у вас есть статический список городов, это лучшие решения. Города не собираются менять часовые пояса, поэтому в сочетании с этим статическим списком городов должен быть статический список часовых поясов. – nhgrif

2

Для тех, кто сталкивается с одной и той же проблемой, вот как я решил решить проблему.

Я загрузил список с разделителями на вкладке с сайта Geonames.org, в котором содержится список городов, в котором также содержится идентификатор часового пояса Olson для каждого города. Существует несколько разных списков, которые вы можете загрузить с помощью ссылки на экспортную дампу Geoname (см. Ниже), но я отправился в список городов5000.zip, чтобы иметь довольно полный список городов, не будучи слишком раздутым.

Вы можете найти ссылки для загрузки и информацию о списках по ссылке ниже: http://download.geonames.org/export/dump/readme.txt

Поскольку список содержит много ненужной информации (например, широта и LNG координаты), а потому, что мне нужны данные чтобы быть в формате .plist, чтобы его можно было легко использовать в приложении iOS, я написал простой сценарий Python, который будет извлекать названия городов и временные интервалы из списка, сортировать их в алфавитном порядке по названиям городов, а затем преобразовывать в .plist.

Для тех, кто заинтересован, сценарий питона выглядит следующим образом:

import json 
import httplib 
import os 

cities =() 
rows = [] 
# Open up the tab delim list from Geonames.org 
with open("cities15000.txt") as file: 
    lines = file.readlines() 

# Reading each line in the list 
for line in lines: 
    comps = line.split('\t') 
    city = comps[1].strip() 
    timezone = comps[17].strip() 

    # Make sure there are no duplicates 
    if not city in cities: 
     cities = cities + (city,) 
     row = {'city':city,'timezone':timezone} 
     rows = rows + [row,] 

# Sort the rows based on the city name 
def cmp(a,b): 
    if a['city'] > b['city']: 
     return 1 
    elif a['city'] == b['city']: 
     return 0 
    else: 
     return -1 
rows.sort(cmp) 


# Convert the array to json and then to plist 
jsonString = json.dumps(rows) 

with open("cities.json", "w") as jsonFile: 
    jsonFile.write(jsonString) 
os.system('plutil -convert xml1 cities.json -o cities.plist') 
+0

спасибо за скрипт, очень удобно :) Я только что исправил отступы, похоже, что он не скопировал/вставить правильно в SO. –

Смежные вопросы