From cf299dbec1985852b6eb7fbca7a4971519797071 Mon Sep 17 00:00:00 2001 From: Husnain_Khurshid Date: Wed, 4 Jan 2023 14:39:29 +0500 Subject: [PATCH 01/18] fix: (functions updated) --- hawqal/cities.py | 71 +++++++++++++++++++++++++++++++---------------- hawqal/country.py | 37 ++++++++---------------- hawqal/states.py | 37 ++++++++---------------- test_hawqal.py | 8 +++--- 4 files changed, 74 insertions(+), 79 deletions(-) diff --git a/hawqal/cities.py b/hawqal/cities.py index 41c885a..8e88ac2 100644 --- a/hawqal/cities.py +++ b/hawqal/cities.py @@ -32,35 +32,58 @@ def getCities(country="", state="", meta={}): f"SELECT city_name FROM cities ORDER BY city_name") cities = [city[0] for city in data] return cities - elif country != "" and type(country) != type({}) and state == "" and len(meta) == 0: + elif country != "" and state == "" and len(meta) == 0: data = cursor.execute( - f"SELECT city_name FROM cities WHERE (country_name='{string.capwords(country)}' OR state_name='{string.capwords(country)}') ORDER BY city_name") - return [city[0] for city in data] - - elif (type(country) == type({}) and state == "" and len(meta) == 0): - selectedFields = Filter.CityFilters(country) - if len(selectedFields) != 0: + f"SELECT city_name FROM cities WHERE country_name = '{string.capwords(country)}' ORDER BY city_name") + cities = [city[0] for city in data] + return cities + elif country == "" and state != "" and len(meta) == 0: + data = cursor.execute( + f"SELECT city_name FROM cities WHERE state_name = '{string.capwords(state)}' ORDER BY city_name") + cities = [city[0] for city in data] + return cities + elif country != "" and state != "" and len(meta) == 0: + data = cursor.execute( + f"SELECT city_name FROM cities WHERE country_name = '{string.capwords(country)}' AND state_name = '{string.capwords(state)}' ORDER BY city_name") + cities = [city[0] for city in data] + return cities + elif country != "" and state != "" and len(meta) != 0: + selectedFields = Filter.StateFilter(meta) + if len(selectedFields) > 0: data = cursor.execute( - f"SELECT city_name,{selectedFields} FROM cities ORDER BY city_name") - return [list(city) for city in list(data)] + f"SELECT city_name,{selectedFields} FROM cities WHERE country_name = '{string.capwords(country)}' AND state_name = '{string.capwords(state)}' ORDER BY city_name") + return [list(city) for city in data] else: data = cursor.execute( - f"SELECT city_name FROM cities ORDER BY city_name") - return [city[0] for city in list(data)] - - elif country != "" and type(state) == type({}) and len(meta) == 0: - selectedFields = Filter.CityFilters(state) - if len(selectedFields) != 0: + f"SELECT city_name FROM cities WHERE country_name = '{string.capwords(country)}' AND state_name = '{string.capwords(state)}' ORDER BY city_name") + return [city[0] for city in data] + elif country == "" and state != "" and len(meta) != 0: + selectedFields = Filter.StateFilter(meta) + if len(selectedFields) > 0: data = cursor.execute( - f"SELECT city_name,{selectedFields} FROM cities WHERE (country_name='{string.capwords(country)}' OR state_name='{string.capwords(country)}') ORDER BY city_name") - return [list(city) for city in list(data)] + f"SELECT city_name,{selectedFields} FROM cities WHERE state_name = '{string.capwords(state)}' ORDER BY city_name") + return [list(city) for city in data] else: data = cursor.execute( - f"SELECT city_name FROM cities WHERE (country_name='{string.capwords(country)}' OR state_name='{string.capwords(country)}') ORDER BY city_name") + f"SELECT city_name FROM cities WHERE state_name = '{string.capwords(state)}' ORDER BY city_name") + return [city[0] for city in data] + elif country != "" and state == "" and len(meta) != 0: + selectedFields = Filter.StateFilter(meta) + if len(selectedFields) > 0: + data = cursor.execute( + f"SELECT city_name,{selectedFields} FROM cities WHERE country_name = '{string.capwords(country)}' ORDER BY city_name") + return [list(city) for city in data] + else: + data = cursor.execute( + f"SELECT city_name FROM cities WHERE country_name = '{string.capwords(country)}' ORDER BY city_name") + return [city[0] for city in data] + elif country == "" and state == "" and len(meta) != 0: + selectedFields = Filter.StateFilter(meta) + if len(selectedFields) > 0: + data = cursor.execute( + f"SELECT city_name,{selectedFields} FROM cities ORDER BY city_name") + return[list(city) for city in data] + else: + data = cursor.execute( + f"SELECT city_name FROM cities ORDER BY city_name") return [city[0] for city in data] - - elif country != "" and state != "" and len(meta) > 0: - selectedFields = Filter.CityFilters(meta) - data = cursor.execute( - f"SELECT city_name,{selectedFields} FROM cities WHERE country_name='{string.capwords(string.capwords(country))}' AND state_name='{string.capwords(string.capwords(state))}' ORDER BY city_name") - return [list(city) for city in list(data)] diff --git a/hawqal/country.py b/hawqal/country.py index 5601c79..983f21b 100644 --- a/hawqal/country.py +++ b/hawqal/country.py @@ -9,10 +9,10 @@ class Country: @staticmethod def getCountries(country="", meta={}): """ - 1. Countries function takes two parameters as input country name and filters.\n + 1. Countries function takes two parameters as input country name and meta.\n 2. By default, function will return countries name.\n 3. Additional fields are included in filter.\n - 4. From filter of boolean TRUE fields will be included in output + 4. From meta TRUE fields will be included in output e.g { "coordinates": True, @@ -35,31 +35,16 @@ def getCountries(country="", meta={}): data = cursor.execute( f"SELECT country_name FROM countries ORDER BY country_name ASC") return [country[0] for country in list(data)] - - elif type(country) == type({}): - if type(meta) == type(""): - if meta != "": - selectedFields = Filter.CountryFilter(country) - data = cursor.execute( - f'SELECT country_name,{selectedFields} FROM countries WHERE country_name = "{string.capwords(meta)}"') - return [list(country) for country in data][0] - else: - selectedFields = Filter.CountryFilter(country) - data = cursor.execute( - f'SELECT country_name,{selectedFields} FROM countries') - return [list(country) for country in data] + elif country == "" and len(meta) != 0: + selectedFields = Filter.CountryFilter(meta) + if len(selectedFields) != 0: + data = cursor.execute( + f"SELECT country_name,{selectedFields} FROM countries ORDER BY country_name ASC") + return [list(country) for country in data] else: - meta, country = country, "" - selectedFields = Filter.CountryFilter(meta) - if len(selectedFields) != 0: - data = cursor.execute( - f'SELECT country_name,{selectedFields} FROM countries') - return [list(country) for country in data] - else: - data = cursor.execute( - f'SELECT country_name FROM countries') - return [country[0] for country in data] - + data = cursor.execute( + f"SELECT country_name FROM countries ORDER BY country_name ASC") + return [country[0] for country in list(data)] elif (country != "" and len(meta) > 0): selectedFields = Filter.CountryFilter(meta) if len(selectedFields) != 0: diff --git a/hawqal/states.py b/hawqal/states.py index 0e78990..31c7c27 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -31,43 +31,30 @@ def getStates(country="", meta={}): f'SELECT state_name FROM states') return [state[0] for state in data] - elif type(country) == type({}) and len(meta) == 0: - if type(meta) == type(""): - if meta != "": - selectedFields = Filter.CountryFilter(country) - data = cursor.execute( - f'SELECT state_name,{selectedFields} FROM states WHERE country_name = "{string.capwords(meta)}"') - return [list(country) for country in data] - else: - meta, country = country, "" - selectedFields = Filter.StateFilter(meta) - data = cursor.execute( - f'SELECT state_name,{selectedFields} FROM states') - return [list(country) for country in data] + elif country == "" and len(meta) != 0: + selectedFields = Filter.StateFilter(meta) + if len(selectedFields) != 0: + data = cursor.execute( + f'SELECT state_name,{selectedFields} FROM states') + return [list(state) for state in data] else: - selectedFields = Filter.CountryFilter(country) - if len(selectedFields) != 0: - data = cursor.execute( - f'SELECT state_name,{selectedFields} FROM states ORDER BY state_name') - return [list(country) for country in data] - else: - data = cursor.execute( - f'SELECT state_name FROM states ORDER BY state_name') - return [country[0] for country in data] + data = cursor.execute( + f'SELECT state_name FROM states') + return [state for state in data] elif country != "" and len(meta) > 0: selectedFields = Filter.StateFilter(meta) if len(selectedFields) != 0: data = cursor.execute( f'SELECT state_name,{selectedFields} FROM states WHERE country_name = "{string.capwords(country)}"') - return [list(country) for country in data] + return [list(state) for state in data] else: data = cursor.execute( f'SELECT state_name FROM states WHERE country_name = "{string.capwords(country)}"') - return [country[0] for country in data] + return [state[0] for state in data] elif country != "" and len(meta) == 0: selectedFields = Filter.StateFilter(meta) data = cursor.execute( f'SELECT state_name FROM states WHERE country_name = "{string.capwords(country)}"') - return [country[0] for country in list(data)] + return [state[0] for state in list(data)] diff --git a/test_hawqal.py b/test_hawqal.py index 145b0dc..00629e1 100644 --- a/test_hawqal.py +++ b/test_hawqal.py @@ -9,16 +9,16 @@ class TestFunc(unittest.TestCase): def test_getCountries(self): self.assertEqual(len(Country.getCountries()), 250) self.assertEqual(len(Country.getCountries( - "pakistan", {"coordinates": True})), 3) + country="pakistan", meta={"coordinates": True})), 3) def test_getStates(self): self.assertEqual(len(States.getStates()), 4989) - self.assertEqual(len(States.getStates("pakistan")), 8) + self.assertEqual(len(States.getStates(country="pakistan")), 8) def test_getCities(self): self.assertEqual(len(City.getCities()), 150710) - self.assertEqual(len(City.getCities("pakistan")), 458) - self.assertEqual(len(City.getCities("punjab")), 329) + self.assertEqual(len(City.getCities(country="pakistan")), 458) + self.assertEqual(len(City.getCities(state="punjab")), 329) if __name__ == '__main__': From 37cfda4ecdb66f6398ab68484e2afac593f7e68d Mon Sep 17 00:00:00 2001 From: hamzaanis Date: Wed, 4 Jan 2023 14:49:34 +0500 Subject: [PATCH 02/18] Simplifying the getting of data --- hawqal/country.py | 42 ++++++++++++------------------------------ 1 file changed, 12 insertions(+), 30 deletions(-) diff --git a/hawqal/country.py b/hawqal/country.py index 983f21b..c1475f1 100644 --- a/hawqal/country.py +++ b/hawqal/country.py @@ -7,7 +7,7 @@ class Country: @staticmethod - def getCountries(country="", meta={}): + def getCountries(meta={}): """ 1. Countries function takes two parameters as input country name and meta.\n 2. By default, function will return countries name.\n @@ -31,32 +31,14 @@ def getCountries(country="", meta={}): database = Database(file_name).makeConnection() cursor = database.cursor() - if country == "" and len(meta) == 0: - data = cursor.execute( - f"SELECT country_name FROM countries ORDER BY country_name ASC") - return [country[0] for country in list(data)] - elif country == "" and len(meta) != 0: - selectedFields = Filter.CountryFilter(meta) - if len(selectedFields) != 0: - data = cursor.execute( - f"SELECT country_name,{selectedFields} FROM countries ORDER BY country_name ASC") - return [list(country) for country in data] - else: - data = cursor.execute( - f"SELECT country_name FROM countries ORDER BY country_name ASC") - return [country[0] for country in list(data)] - elif (country != "" and len(meta) > 0): - selectedFields = Filter.CountryFilter(meta) - if len(selectedFields) != 0: - data = cursor.execute( - f'SELECT country_name,{selectedFields} FROM countries WHERE country_name = "{string.capwords(country)}"') - return [list(country) for country in data][0] - else: - data = cursor.execute( - f'SELECT country_name FROM countries WHERE country_name = "{string.capwords(country)}"') - return [list(country) for country in data][0] - - elif (country != "" and len(meta) == 0): - data = cursor.execute( - f'SELECT * FROM countries WHERE country_name = "{string.capwords(country)}"') - return [list(country) for country in data][0] + query = "SELECT" + + if len(meta) > 0: + query = query + f' {selectedFields}' + elif len(meta)==0: + query=query+" * " + + query = query + " FROM countries ORDER BY country_name ASC" + + data = cursor.execute(query) + return [country[0] for country in list(data)] From b22a22f8e7a2ac69e67e89e68b239cd20dfd65de Mon Sep 17 00:00:00 2001 From: hamzaanis Date: Wed, 4 Jan 2023 14:52:34 +0500 Subject: [PATCH 03/18] Added filter --- hawqal/country.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hawqal/country.py b/hawqal/country.py index c1475f1..e795811 100644 --- a/hawqal/country.py +++ b/hawqal/country.py @@ -33,7 +33,9 @@ def getCountries(meta={}): query = "SELECT" + if len(meta) > 0: + selectedFields = Filter.CountryFilter(meta) query = query + f' {selectedFields}' elif len(meta)==0: query=query+" * " From 97af1289d5548edfbcc16089fe7da67fd199bec8 Mon Sep 17 00:00:00 2001 From: hamzaanis Date: Wed, 4 Jan 2023 15:50:09 +0500 Subject: [PATCH 04/18] Get state and get states --- hawqal/states.py | 86 +++++++++++++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 30 deletions(-) diff --git a/hawqal/states.py b/hawqal/states.py index 31c7c27..e72a679 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -7,7 +7,7 @@ class States: @staticmethod - def getStates(country="", meta={}): + def getStates(country_name="", meta={}): """ 1. States function takes two parameters as input state name and filters.\n 2. By default, function will return states name.\n @@ -26,35 +26,61 @@ def getStates(country="", meta={}): database = Database(file_name).makeConnection() cursor = database.cursor() - if country == "" and len(meta) == 0: - data = cursor.execute( - f'SELECT state_name FROM states') - return [state[0] for state in data] + query = "SELECT" - elif country == "" and len(meta) != 0: + if len(meta)>0: selectedFields = Filter.StateFilter(meta) - if len(selectedFields) != 0: - data = cursor.execute( - f'SELECT state_name,{selectedFields} FROM states') - return [list(state) for state in data] - else: - data = cursor.execute( - f'SELECT state_name FROM states') - return [state for state in data] - - elif country != "" and len(meta) > 0: - selectedFields = Filter.StateFilter(meta) - if len(selectedFields) != 0: - data = cursor.execute( - f'SELECT state_name,{selectedFields} FROM states WHERE country_name = "{string.capwords(country)}"') - return [list(state) for state in data] - else: - data = cursor.execute( - f'SELECT state_name FROM states WHERE country_name = "{string.capwords(country)}"') - return [state[0] for state in data] - - elif country != "" and len(meta) == 0: + query = query + f' {selectedFields}' + elif len(meta)==0: + query = query + " *" + + query = query + " FROM states" + + if len(country_name)>0: + query=query+ f' where country_name= "{string.capwords(country_name)}"' + + cursor.execute(query) + + data_json = [] + header = [i[0] for i in curr.description] + data = cursor.fetchall() + for i in data: + data_json.append(dict(zip(header, i))) + return data_json + + + @staticmethod + def getState(country_name="",state_name="", meta={}): + + file_name = os.path.join( + os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') + + with open(file_name, 'r', encoding="utf8") as db: + database = Database(file_name).makeConnection() + cursor = database.cursor() + + query = "SELECT" + + if len(meta)>0: selectedFields = Filter.StateFilter(meta) - data = cursor.execute( - f'SELECT state_name FROM states WHERE country_name = "{string.capwords(country)}"') - return [state[0] for state in list(data)] + query = query + f' {selectedFields}' + elif len(meta)==0: + query = query + " *" + + query = query + " FROM states where" + + if len(country_name)>0 and len(state_name)>0: + query = f' country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' + elif len(country_name)>0: + query=query+ f' country_name= "{string.capwords(country_name)}"' + elif len(state_name)>0: + query=query+ f' state_name= "{string.capwords(state_name)}"' + + query = query + " ORDER BY country_name" + + data_json = [] + header = [i[0] for i in curr.description] + data = cursor.fetchall() + for i in data: + data_json.append(dict(zip(header, i))) + return data_json \ No newline at end of file From a15392e3da5d68c8bc515793cb4db9f36da007cd Mon Sep 17 00:00:00 2001 From: hamzaanis Date: Wed, 4 Jan 2023 15:53:43 +0500 Subject: [PATCH 05/18] Cursor execute not done for state --- hawqal/states.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hawqal/states.py b/hawqal/states.py index e72a679..0e6a6fd 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -78,8 +78,10 @@ def getState(country_name="",state_name="", meta={}): query = query + " ORDER BY country_name" + cursor.execute(query) + data_json = [] - header = [i[0] for i in curr.description] + header = [i[0] for i in cursor.description] data = cursor.fetchall() for i in data: data_json.append(dict(zip(header, i))) From 8cc2ee469b525e50c60f48e48c7227679cd74764 Mon Sep 17 00:00:00 2001 From: Husnain_Khurshid Date: Wed, 4 Jan 2023 16:28:35 +0500 Subject: [PATCH 06/18] fix: (fixed state function) --- hawqal/__init__.py | 3 ++- hawqal/states.py | 32 ++++++++++++++++---------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/hawqal/__init__.py b/hawqal/__init__.py index 7fb398c..94b4e2b 100644 --- a/hawqal/__init__.py +++ b/hawqal/__init__.py @@ -5,5 +5,6 @@ getCities = City.getCities getCountries = Country.getCountries getStates = States.getStates +getState = States.getState -__all__ = [getCities, getCountries, getStates] +__all__ = [getCities, getCountries, getStates, getState] diff --git a/hawqal/states.py b/hawqal/states.py index 0e6a6fd..354bc31 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -28,30 +28,30 @@ def getStates(country_name="", meta={}): query = "SELECT" - if len(meta)>0: + if len(meta) > 0: selectedFields = Filter.StateFilter(meta) query = query + f' {selectedFields}' - elif len(meta)==0: + elif len(meta) == 0: query = query + " *" query = query + " FROM states" - if len(country_name)>0: - query=query+ f' where country_name= "{string.capwords(country_name)}"' + if len(country_name) > 0: + query = query + \ + f' where country_name= "{string.capwords(country_name)}"' cursor.execute(query) data_json = [] - header = [i[0] for i in curr.description] + header = [i[0] for i in cursor.description] data = cursor.fetchall() for i in data: data_json.append(dict(zip(header, i))) return data_json - @staticmethod - def getState(country_name="",state_name="", meta={}): - + def getState(country_name="", state_name="", meta={}): + file_name = os.path.join( os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') @@ -61,20 +61,20 @@ def getState(country_name="",state_name="", meta={}): query = "SELECT" - if len(meta)>0: + if len(meta) > 0: selectedFields = Filter.StateFilter(meta) query = query + f' {selectedFields}' - elif len(meta)==0: + elif len(meta) == 0: query = query + " *" query = query + " FROM states where" - if len(country_name)>0 and len(state_name)>0: + if len(country_name) > 0 and len(state_name) > 0: query = f' country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' - elif len(country_name)>0: - query=query+ f' country_name= "{string.capwords(country_name)}"' - elif len(state_name)>0: - query=query+ f' state_name= "{string.capwords(state_name)}"' + elif len(country_name) > 0: + query = query + f' country_name= "{string.capwords(country_name)}"' + elif len(state_name) > 0: + query = query + f' state_name= "{string.capwords(state_name)}"' query = query + " ORDER BY country_name" @@ -85,4 +85,4 @@ def getState(country_name="",state_name="", meta={}): data = cursor.fetchall() for i in data: data_json.append(dict(zip(header, i))) - return data_json \ No newline at end of file + return data_json From d9e9086a9227bbef6f1e79585a7388e74fdfc433 Mon Sep 17 00:00:00 2001 From: hamzaanis Date: Wed, 4 Jan 2023 17:00:33 +0500 Subject: [PATCH 07/18] State filter added --- hawqal/__init__.py | 6 +++- hawqal/cities.py | 1 - hawqal/country.py | 4 +-- {filter => hawqal/filters}/filter.py | 2 +- hawqal/filters/state_filter.py | 24 +++++++++++++ hawqal/states.py | 54 +++++++++++----------------- 6 files changed, 52 insertions(+), 39 deletions(-) rename {filter => hawqal/filters}/filter.py (98%) create mode 100644 hawqal/filters/state_filter.py diff --git a/hawqal/__init__.py b/hawqal/__init__.py index 7fb398c..7ba367e 100644 --- a/hawqal/__init__.py +++ b/hawqal/__init__.py @@ -1,9 +1,13 @@ from hawqal.cities import City from hawqal.country import Country from hawqal.states import States +from .filters.state_filter import StateFilter getCities = City.getCities getCountries = Country.getCountries getStates = States.getStates +getState = States.getState -__all__ = [getCities, getCountries, getStates] +# filters = [StateFilter] +# functions = [getCities, getCountries, getStates, getState] +__all__ = [getCities, getCountries, getStates, getState] diff --git a/hawqal/cities.py b/hawqal/cities.py index 8e88ac2..4b19672 100644 --- a/hawqal/cities.py +++ b/hawqal/cities.py @@ -1,5 +1,4 @@ from dal.dao import Database -from filter.filter import Filter import string import os diff --git a/hawqal/country.py b/hawqal/country.py index e795811..669469c 100644 --- a/hawqal/country.py +++ b/hawqal/country.py @@ -1,8 +1,6 @@ from dal.dao import Database -from filter.filter import Filter +from .filters.filter import Filter import os -import string - class Country: diff --git a/filter/filter.py b/hawqal/filters/filter.py similarity index 98% rename from filter/filter.py rename to hawqal/filters/filter.py index d279480..def18d4 100644 --- a/filter/filter.py +++ b/hawqal/filters/filter.py @@ -50,4 +50,4 @@ def CityFilters(meta): for key, value in meta.items(): if value: fields = fields + keyArrtibutes[key] + ',' - return fields[:-1] + return fields[:-1] \ No newline at end of file diff --git a/hawqal/filters/state_filter.py b/hawqal/filters/state_filter.py new file mode 100644 index 0000000..01324d0 --- /dev/null +++ b/hawqal/filters/state_filter.py @@ -0,0 +1,24 @@ +class StateFilter: + def __init__(self, state_id=True, state_name=True, country_name=True, longitude=True, latitude=True): + print("Param") + print(state_id) + self.state_id = state_id + self.state_name = state_name + self.country_name = country_name + self.longitude = longitude + self.latitude = latitude + + def __str__(self): + fields = "" + if self.state_id: + fields = fields+'state_id,' + if self.state_name: + fields = fields+' state_name,' + if self.country_name: + fields = fields + 'country_name,' + if self.longitude: + fields = fields + 'longitude,' + if self.latitude: + fields = fields + 'latitude,' + + return fields[:-1]+' ' diff --git a/hawqal/states.py b/hawqal/states.py index 0e6a6fd..e6a24dc 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -1,5 +1,5 @@ from dal.dao import Database -from filter.filter import Filter +from .filters.state_filter import StateFilter import string import os @@ -7,7 +7,7 @@ class States: @staticmethod - def getStates(country_name="", meta={}): + def getStates(country_name="", filter=StateFilter()): """ 1. States function takes two parameters as input state name and filters.\n 2. By default, function will return states name.\n @@ -26,32 +26,28 @@ def getStates(country_name="", meta={}): database = Database(file_name).makeConnection() cursor = database.cursor() - query = "SELECT" + query = "SELECT " + str(filter) + " FROM states" - if len(meta)>0: - selectedFields = Filter.StateFilter(meta) - query = query + f' {selectedFields}' - elif len(meta)==0: - query = query + " *" - - query = query + " FROM states" - - if len(country_name)>0: - query=query+ f' where country_name= "{string.capwords(country_name)}"' + if len(country_name) > 0: + query = query + \ + f' where country_name= "{string.capwords(country_name)}"' + print(query) + print(filter) cursor.execute(query) data_json = [] - header = [i[0] for i in curr.description] + header = [i[0] for i in cursor.description] data = cursor.fetchall() for i in data: data_json.append(dict(zip(header, i))) return data_json - @staticmethod - def getState(country_name="",state_name="", meta={}): - + def getState(country_name="", state_name="", filter=StateFilter()): + if state_name == "": + raise ValueError("state_name must be set") + file_name = os.path.join( os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') @@ -59,22 +55,14 @@ def getState(country_name="",state_name="", meta={}): database = Database(file_name).makeConnection() cursor = database.cursor() - query = "SELECT" - - if len(meta)>0: - selectedFields = Filter.StateFilter(meta) - query = query + f' {selectedFields}' - elif len(meta)==0: - query = query + " *" + query = "SELECT " + filter + " FROM states" - query = query + " FROM states where" - - if len(country_name)>0 and len(state_name)>0: - query = f' country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' - elif len(country_name)>0: - query=query+ f' country_name= "{string.capwords(country_name)}"' - elif len(state_name)>0: - query=query+ f' state_name= "{string.capwords(state_name)}"' + if len(country_name) > 0 and len(state_name) > 0: + query = f'where country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' + elif len(country_name) > 0: + query = query + f' country_name= "{string.capwords(country_name)}"' + elif len(state_name) > 0: + query = query + f' state_name= "{string.capwords(state_name)}"' query = query + " ORDER BY country_name" @@ -85,4 +73,4 @@ def getState(country_name="",state_name="", meta={}): data = cursor.fetchall() for i in data: data_json.append(dict(zip(header, i))) - return data_json \ No newline at end of file + return data_json From 9b67a75291ac1b811f89a2534a1e7a37c3d5f167 Mon Sep 17 00:00:00 2001 From: Husnain_Khurshid Date: Wed, 4 Jan 2023 18:57:39 +0500 Subject: [PATCH 08/18] fix: (fixed city,country and state functions along with their filters) --- Json/Query.py | 7 ++ hawqal/__init__.py | 10 ++- hawqal/cities.py | 109 ++++++++++++++----------------- hawqal/country.py | 61 +++++++++++++---- hawqal/filters/city_filter.py | 28 ++++++++ hawqal/filters/country_filter.py | 52 +++++++++++++++ hawqal/filters/state_filter.py | 2 - hawqal/states.py | 33 +++------- 8 files changed, 199 insertions(+), 103 deletions(-) create mode 100644 Json/Query.py create mode 100644 hawqal/filters/city_filter.py create mode 100644 hawqal/filters/country_filter.py diff --git a/Json/Query.py b/Json/Query.py new file mode 100644 index 0000000..6c07219 --- /dev/null +++ b/Json/Query.py @@ -0,0 +1,7 @@ +def convertJson(cursor): + data_json = [] + header = [i[0] for i in cursor.description] + data = cursor.fetchall() + for i in data: + data_json.append(dict(zip(header, i))) + return data_json diff --git a/hawqal/__init__.py b/hawqal/__init__.py index 7ba367e..7c4c6d1 100644 --- a/hawqal/__init__.py +++ b/hawqal/__init__.py @@ -2,12 +2,16 @@ from hawqal.country import Country from hawqal.states import States from .filters.state_filter import StateFilter +from .filters.city_filter import CityFilter +from .filters.country_filter import CountryFilter + getCities = City.getCities +getCity = City.getCity getCountries = Country.getCountries +getCountry = Country.getCountry getStates = States.getStates getState = States.getState -# filters = [StateFilter] -# functions = [getCities, getCountries, getStates, getState] -__all__ = [getCities, getCountries, getStates, getState] +__all__ = [getCountries, getStates, + getState, StateFilter, CountryFilter, getCountry, getCities, CityFilter, getCity] diff --git a/hawqal/cities.py b/hawqal/cities.py index 4b19672..c57080d 100644 --- a/hawqal/cities.py +++ b/hawqal/cities.py @@ -1,12 +1,14 @@ from dal.dao import Database import string import os +from .filters.city_filter import CityFilter +from Json.Query import convertJson class City: @staticmethod - def getCities(country="", state="", meta={}): + def getCities(country_name="", state_name="", filter=CityFilter()): """ 1. Countries function takes two parameters as input country name and filters.\n 2. By default, function will return countries name.\n @@ -19,6 +21,44 @@ def getCities(country="", state="", meta={}): "state":True } """ + + file_name = os.path.join( + os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') + + with open(file_name, 'r', encoding="utf8") as db: + database = Database(file_name).makeConnection() + cursor = database.cursor() + + query = "SELECT " + str(filter) + " FROM cities" + + if country_name != "": + query = query + \ + f" WHERE country_name = '{string.capwords(country_name)}'" + elif state_name != "": + query = query + \ + f" WHERE state_name = '{string.capwords(state_name)}'" + + cursor.execute(query) + + return convertJson(cursor) + + @staticmethod + def getCity(country_name="", state_name="", city_name="", filter=CityFilter()): + """ + 1. Countries function takes two parameters as input country name and filters.\n + 2. By default, function will return countries name.\n + 3. Additional fields are included in filter.\n + 4. From filter of boolean TRUE fields will be included in output + e.g + { + "coordinates": True, + "country": True, + "state":True + } + """ + if country_name == "" or state_name == "" or city_name == "": + raise ValueError("country,state and city name must be set") + file_name = os.path.join( os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') @@ -26,63 +66,10 @@ def getCities(country="", state="", meta={}): database = Database(file_name).makeConnection() cursor = database.cursor() - if state == "" and country == "" and len(meta) == 0: - data = cursor.execute( - f"SELECT city_name FROM cities ORDER BY city_name") - cities = [city[0] for city in data] - return cities - elif country != "" and state == "" and len(meta) == 0: - data = cursor.execute( - f"SELECT city_name FROM cities WHERE country_name = '{string.capwords(country)}' ORDER BY city_name") - cities = [city[0] for city in data] - return cities - elif country == "" and state != "" and len(meta) == 0: - data = cursor.execute( - f"SELECT city_name FROM cities WHERE state_name = '{string.capwords(state)}' ORDER BY city_name") - cities = [city[0] for city in data] - return cities - elif country != "" and state != "" and len(meta) == 0: - data = cursor.execute( - f"SELECT city_name FROM cities WHERE country_name = '{string.capwords(country)}' AND state_name = '{string.capwords(state)}' ORDER BY city_name") - cities = [city[0] for city in data] - return cities - elif country != "" and state != "" and len(meta) != 0: - selectedFields = Filter.StateFilter(meta) - if len(selectedFields) > 0: - data = cursor.execute( - f"SELECT city_name,{selectedFields} FROM cities WHERE country_name = '{string.capwords(country)}' AND state_name = '{string.capwords(state)}' ORDER BY city_name") - return [list(city) for city in data] - else: - data = cursor.execute( - f"SELECT city_name FROM cities WHERE country_name = '{string.capwords(country)}' AND state_name = '{string.capwords(state)}' ORDER BY city_name") - return [city[0] for city in data] - elif country == "" and state != "" and len(meta) != 0: - selectedFields = Filter.StateFilter(meta) - if len(selectedFields) > 0: - data = cursor.execute( - f"SELECT city_name,{selectedFields} FROM cities WHERE state_name = '{string.capwords(state)}' ORDER BY city_name") - return [list(city) for city in data] - else: - data = cursor.execute( - f"SELECT city_name FROM cities WHERE state_name = '{string.capwords(state)}' ORDER BY city_name") - return [city[0] for city in data] - elif country != "" and state == "" and len(meta) != 0: - selectedFields = Filter.StateFilter(meta) - if len(selectedFields) > 0: - data = cursor.execute( - f"SELECT city_name,{selectedFields} FROM cities WHERE country_name = '{string.capwords(country)}' ORDER BY city_name") - return [list(city) for city in data] - else: - data = cursor.execute( - f"SELECT city_name FROM cities WHERE country_name = '{string.capwords(country)}' ORDER BY city_name") - return [city[0] for city in data] - elif country == "" and state == "" and len(meta) != 0: - selectedFields = Filter.StateFilter(meta) - if len(selectedFields) > 0: - data = cursor.execute( - f"SELECT city_name,{selectedFields} FROM cities ORDER BY city_name") - return[list(city) for city in data] - else: - data = cursor.execute( - f"SELECT city_name FROM cities ORDER BY city_name") - return [city[0] for city in data] + query = "SELECT " + \ + str(filter) + \ + f" FROM cities WHERE country_name='{string.capwords(country_name)}' AND state_name='{string.capwords(state_name)}' AND city_name = '{string.capwords(city_name)}'" + + cursor.execute(query) + + return convertJson(cursor) diff --git a/hawqal/country.py b/hawqal/country.py index 669469c..9a66f1c 100644 --- a/hawqal/country.py +++ b/hawqal/country.py @@ -1,11 +1,15 @@ from dal.dao import Database from .filters.filter import Filter +from Json.Query import convertJson +from .filters.country_filter import CountryFilter +import string import os + class Country: @staticmethod - def getCountries(meta={}): + def getCountries(filter=CountryFilter()): """ 1. Countries function takes two parameters as input country name and meta.\n 2. By default, function will return countries name.\n @@ -21,24 +25,55 @@ def getCountries(meta={}): } """ + file_name = os.path.join( + os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') + + with open(file_name, 'r', encoding="utf8") as db: + database = Database(file_name).makeConnection() + cursor = database.cursor() + + query = "SELECT " + str(filter) + + query = query + " FROM countries ORDER BY country_name ASC" + print(query) + cursor.execute(query) + + return convertJson(cursor) + + @staticmethod + def getCountry(country_name="", filter=CountryFilter()): + """ + 1. Countries function takes two parameters as input country name and meta.\n + 2. By default, function will return countries name.\n + 3. Additional fields are included in filter.\n + 4. From meta TRUE fields will be included in output + e.g + { + "coordinates": True, + "region": True, + "currency": True, + "timezone": True, + "capital": True + } - file_name = os.path.join(os.path.dirname( - __file__), '..', 'database', 'hawqalDB.sqlite') + """ + file_name = os.path.join( + os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') with open(file_name, 'r', encoding="utf8") as db: database = Database(file_name).makeConnection() cursor = database.cursor() - query = "SELECT" + if country_name == "": + raise ValueError("country_name must be set") + query = "SELECT " + str(filter) + " FROM countries" - if len(meta) > 0: - selectedFields = Filter.CountryFilter(meta) - query = query + f' {selectedFields}' - elif len(meta)==0: - query=query+" * " - - query = query + " FROM countries ORDER BY country_name ASC" + if country_name != "": + + query = query + \ + f" WHERE country_name = '{string.capwords(country_name)}' ORDER BY country_name ASC" + + cursor.execute(query) - data = cursor.execute(query) - return [country[0] for country in list(data)] + return convertJson(cursor) diff --git a/hawqal/filters/city_filter.py b/hawqal/filters/city_filter.py new file mode 100644 index 0000000..2128c2d --- /dev/null +++ b/hawqal/filters/city_filter.py @@ -0,0 +1,28 @@ +class CityFilter: + def __init__(self, city_id=True, city_name=True, state_name=True, state_id=True, country_name=True, latitude=True, longitude=True): + self.country_name = country_name + self.longitude = longitude + self.latitude = latitude + self.city_id = city_id + self.city_name = city_name + self.state_name = state_name + self.state_id = state_id + + def __str__(self): + fields = "" + if self.country_name: + fields = fields+'country_name,' + if self.longitude: + fields = fields+' longitude,' + if self.latitude: + fields = fields + 'latitude,' + if self.city_id: + fields = fields+'city_id,' + if self.city_name: + fields = fields+' city_name,' + if self.state_name: + fields = fields + 'state_name,' + if self.state_id: + fields = fields + 'state_id,' + + return fields[:-1]+' ' diff --git a/hawqal/filters/country_filter.py b/hawqal/filters/country_filter.py new file mode 100644 index 0000000..ac90f22 --- /dev/null +++ b/hawqal/filters/country_filter.py @@ -0,0 +1,52 @@ +class CountryFilter: + def __init__(self, country_name=True, iso_code=True, phone_code=True, capital=True, currency=True, currency_name=True, currency_symbol=True, country_domain=True, region=True, subregion=-True, timezone=True, zone_city=True, UTC=True, latitude=True, longitude=True): + self.country_name = country_name + self.longitude = longitude + self.latitude = latitude + self.iso_code = iso_code + self.phone_code = phone_code + self.capital = capital + self.currency = currency + self.currency_name = currency_name + self.currency_symbol = currency_symbol + self.country_domain = country_domain + self.region = region + self.subregion = subregion + self.timezone = timezone + self.zone_city = zone_city + self.UTC = UTC + + def __str__(self): + fields = "" + if self.country_name: + fields = fields+'country_name,' + if self.longitude: + fields = fields+' longitude,' + if self.latitude: + fields = fields + 'latitude,' + if self.iso_code: + fields = fields + 'iso_code,' + if self.phone_code: + fields = fields + 'phone_code,' + if self.capital: + fields = fields+'capital,' + if self.currency: + fields = fields+' currency,' + if self.currency_name: + fields = fields + 'currency_name,' + if self.currency_symbol: + fields = fields + 'currency_symbol,' + if self.country_domain: + fields = fields + 'country_domain,' + if self.region: + fields = fields + 'region,' + if self.subregion: + fields = fields + 'subregion,' + if self.timezone: + fields = fields + 'timezone,' + if self.zone_city: + fields = fields + 'zone_city,' + if self.UTC: + fields = fields + 'UTC,' + + return fields[:-1]+' ' diff --git a/hawqal/filters/state_filter.py b/hawqal/filters/state_filter.py index 01324d0..dd1beb0 100644 --- a/hawqal/filters/state_filter.py +++ b/hawqal/filters/state_filter.py @@ -1,7 +1,5 @@ class StateFilter: def __init__(self, state_id=True, state_name=True, country_name=True, longitude=True, latitude=True): - print("Param") - print(state_id) self.state_id = state_id self.state_name = state_name self.country_name = country_name diff --git a/hawqal/states.py b/hawqal/states.py index 9660986..7ac1036 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -1,6 +1,7 @@ from dal.dao import Database from .filters.state_filter import StateFilter import string +from Json.Query import convertJson import os @@ -19,6 +20,7 @@ def getStates(country_name="", filter=StateFilter()): } """ + file_name = os.path.join( os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') @@ -32,45 +34,28 @@ def getStates(country_name="", filter=StateFilter()): query = query + \ f' where country_name= "{string.capwords(country_name)}"' - print(query) - print(filter) cursor.execute(query) - data_json = [] - header = [i[0] for i in cursor.description] - data = cursor.fetchall() - for i in data: - data_json.append(dict(zip(header, i))) - return data_json + return convertJson(cursor) @staticmethod def getState(country_name="", state_name="", filter=StateFilter()): if state_name == "": raise ValueError("state_name must be set") - file_name = os.path.join( - os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') - - with open(file_name, 'r', encoding="utf8") as db: - database = Database(file_name).makeConnection() - cursor = database.cursor() - query = "SELECT " + filter + " FROM states" - + cursor = Database.database_connection() if len(country_name) > 0 and len(state_name) > 0: query = f'where country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' elif len(country_name) > 0: - query = query + f'where country_name= "{string.capwords(country_name)}"' + query = query + \ + f'where country_name= "{string.capwords(country_name)}"' elif len(state_name) > 0: - query = query + f'where state_name= "{string.capwords(state_name)}"' + query = query + \ + f'where state_name= "{string.capwords(state_name)}"' query = query + " ORDER BY country_name" cursor.execute(query) - data_json = [] - header = [i[0] for i in cursor.description] - data = cursor.fetchall() - for i in data: - data_json.append(dict(zip(header, i))) - return data_json + return convertJson(cursor) From b74adb8a2d3ab3dc444e46471714fcd899602920 Mon Sep 17 00:00:00 2001 From: Hussnain12 <“hussnain.ml.fiver@gmail.com”> Date: Wed, 4 Jan 2023 21:26:32 +0500 Subject: [PATCH 09/18] updated cities file and fixed __str__ method in filters files --- dal/dao.py | 21 +++--- hawqal/cities.py | 120 +++++++++++++++++++------------ hawqal/country.py | 33 +++------ hawqal/filters/city_filter.py | 23 ++---- hawqal/filters/country_filter.py | 38 ++-------- hawqal/filters/state_filter.py | 16 ++--- hawqal/states.py | 22 +++--- 7 files changed, 117 insertions(+), 156 deletions(-) diff --git a/dal/dao.py b/dal/dao.py index 55b125b..149ec52 100644 --- a/dal/dao.py +++ b/dal/dao.py @@ -1,13 +1,10 @@ import sqlite3 - -''' -Connecting with database -''' - - -class Database: - def __init__(self, path): - self.databasePath = path - - def makeConnection(self): - return sqlite3.connect(f"{self.databasePath}") +import os + +def create_cursor(): + dirname = os.path.dirname(__file__) + file_name = os.path.join(dirname, '..', 'database', 'hawqalDB.sqlite') + with open(file_name, 'r', encoding="utf8"): + database = sqlite3.connect(file_name) + cursor = database.cursor() + return cursor \ No newline at end of file diff --git a/hawqal/cities.py b/hawqal/cities.py index c57080d..fed0da2 100644 --- a/hawqal/cities.py +++ b/hawqal/cities.py @@ -1,4 +1,4 @@ -from dal.dao import Database +from dal.dao import create_cursor import string import os from .filters.city_filter import CityFilter @@ -8,67 +8,93 @@ class City: @staticmethod - def getCities(country_name="", state_name="", filter=CityFilter()): + def getCities(country_name="", state_name="", filters=CityFilter()): """ - 1. Countries function takes two parameters as input country name and filters.\n - 2. By default, function will return countries name.\n - 3. Additional fields are included in filter.\n - 4. From filter of boolean TRUE fields will be included in output - e.g - { - "coordinates": True, - "country": True, - "state":True - } + it takes 3 optional parameters and return JSON object. + + Default: + By default it will return all the cities with all the fields including + + - city_id + + Args: + country_name (str): Optional - To get the cities of some specific country. + state_name (str): Optional - To get the cities of some specific state. + filters (CityFilter): Optional - A class object specifying which fields to include in the results. + + Returns: + list: A json object containing the requested information about the cities. + + Example: + - To get all cities + + ``` + hawqal.getCities() + ``` + + - To get all cities of some country + + ``` + hawqal.getCities(country_name="Pakistan") + ``` + + - To get all cities of some state in a country + + ``` + hawqal.getCities(country_name="Pakistan",state_name="Punjab") + ``` + + - To apply filters and exclude state_name + ``` + hawqal.getCities(filter=hawqal.CityFilter(state_name=False)) + ``` """ - - file_name = os.path.join( - os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') - - with open(file_name, 'r', encoding="utf8") as db: - database = Database(file_name).makeConnection() - cursor = database.cursor() - - query = "SELECT " + str(filter) + " FROM cities" + cursor = create_cursor() + query = "SELECT " + str(filters) + " FROM cities" if country_name != "": query = query + \ - f" WHERE country_name = '{string.capwords(country_name)}'" + f" WHERE country_name = '{string.capwords(country_name)}'" elif state_name != "": query = query + \ - f" WHERE state_name = '{string.capwords(state_name)}'" + f" WHERE state_name = '{string.capwords(state_name)}'" cursor.execute(query) return convertJson(cursor) @staticmethod - def getCity(country_name="", state_name="", city_name="", filter=CityFilter()): + def getCity(country_name="", state_name="", city_name="", filters=CityFilter()): """ - 1. Countries function takes two parameters as input country name and filters.\n - 2. By default, function will return countries name.\n - 3. Additional fields are included in filter.\n - 4. From filter of boolean TRUE fields will be included in output - e.g - { - "coordinates": True, - "country": True, - "state":True - } + Retrieves information about a city from the database. + + Parameters: + country_name (str): The name of the country where the city is located. Optional. + state_name (str): The name of the state or province where the city is located. Optional. + city_name (str): The name of the city. Required. + filters (CityFilter): An object specifying which fields to include in the results. Optional. + + Returns: + A Json object containing the requested information about the city. + + Raises: + ValueError: If `city_name` is not specified. """ - if country_name == "" or state_name == "" or city_name == "": - raise ValueError("country,state and city name must be set") - - file_name = os.path.join( - os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') - - with open(file_name, 'r', encoding="utf8") as db: - database = Database(file_name).makeConnection() - cursor = database.cursor() - - query = "SELECT " + \ - str(filter) + \ - f" FROM cities WHERE country_name='{string.capwords(country_name)}' AND state_name='{string.capwords(state_name)}' AND city_name = '{string.capwords(city_name)}'" + cursor = create_cursor() + country_name = string.capwords(country_name) + state_name = string.capwords(state_name) + city_name = string.capwords(city_name) + if city_name == "": + raise ValueError("City name must be set") + query = "SELECT " + str(filters) + " FROM CITIES " + if country_name != "": + query = query + f"WHERE country_name='{country_name}' AND city_name='{city_name}' " + elif state_name != "": + query = query + f"Where state_name='{state_name}' and city_name='{city_name}'" + elif country_name != "" and state_name != "": + query = query + f"Where state_name='{state_name}' and country_name='{country_name} and city_name='{city_name}' '" + else: + query = query + f"where city_name='{city_name}'" cursor.execute(query) diff --git a/hawqal/country.py b/hawqal/country.py index 9a66f1c..25e39b7 100644 --- a/hawqal/country.py +++ b/hawqal/country.py @@ -1,5 +1,5 @@ -from dal.dao import Database -from .filters.filter import Filter +from dal.dao import create_cursor +# from .filters.filter import Filter from Json.Query import convertJson from .filters.country_filter import CountryFilter import string @@ -9,13 +9,14 @@ class Country: @staticmethod - def getCountries(filter=CountryFilter()): + def getCountries(filters=CountryFilter()): """ - 1. Countries function takes two parameters as input country name and meta.\n - 2. By default, function will return countries name.\n + 1. getCountries function takes an opti\n + 2. By default, function will return countries name with all the filters.\n 3. Additional fields are included in filter.\n 4. From meta TRUE fields will be included in output e.g + { "coordinates": True, "region": True, @@ -25,14 +26,8 @@ def getCountries(filter=CountryFilter()): } """ - file_name = os.path.join( - os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') - - with open(file_name, 'r', encoding="utf8") as db: - database = Database(file_name).makeConnection() - cursor = database.cursor() - - query = "SELECT " + str(filter) + cursor=create_cursor() + query = "SELECT " + str(filters) query = query + " FROM countries ORDER BY country_name ASC" print(query) @@ -41,7 +36,7 @@ def getCountries(filter=CountryFilter()): return convertJson(cursor) @staticmethod - def getCountry(country_name="", filter=CountryFilter()): + def getCountry(country_name="", filters=CountryFilter()): """ 1. Countries function takes two parameters as input country name and meta.\n 2. By default, function will return countries name.\n @@ -57,17 +52,11 @@ def getCountry(country_name="", filter=CountryFilter()): } """ - file_name = os.path.join( - os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') - - with open(file_name, 'r', encoding="utf8") as db: - database = Database(file_name).makeConnection() - cursor = database.cursor() - + cursor = create_cursor() if country_name == "": raise ValueError("country_name must be set") - query = "SELECT " + str(filter) + " FROM countries" + query = "SELECT " + str(filters) + " FROM countries" if country_name != "": diff --git a/hawqal/filters/city_filter.py b/hawqal/filters/city_filter.py index 2128c2d..614b636 100644 --- a/hawqal/filters/city_filter.py +++ b/hawqal/filters/city_filter.py @@ -1,5 +1,6 @@ class CityFilter: - def __init__(self, city_id=True, city_name=True, state_name=True, state_id=True, country_name=True, latitude=True, longitude=True): + def __init__(self, city_id=True, city_name=True, state_name=True, state_id=True, country_name=True, latitude=True, + longitude=True): self.country_name = country_name self.longitude = longitude self.latitude = latitude @@ -10,19 +11,7 @@ def __init__(self, city_id=True, city_name=True, state_name=True, state_id=True, def __str__(self): fields = "" - if self.country_name: - fields = fields+'country_name,' - if self.longitude: - fields = fields+' longitude,' - if self.latitude: - fields = fields + 'latitude,' - if self.city_id: - fields = fields+'city_id,' - if self.city_name: - fields = fields+' city_name,' - if self.state_name: - fields = fields + 'state_name,' - if self.state_id: - fields = fields + 'state_id,' - - return fields[:-1]+' ' + for field in ['country_name', 'city_id', 'city_name', 'state_id', 'state_name', 'latitude', 'longitude']: + if getattr(self, field): + fields = fields + field + ', ' + return fields[:-2] diff --git a/hawqal/filters/country_filter.py b/hawqal/filters/country_filter.py index ac90f22..06e3ef2 100644 --- a/hawqal/filters/country_filter.py +++ b/hawqal/filters/country_filter.py @@ -16,37 +16,11 @@ def __init__(self, country_name=True, iso_code=True, phone_code=True, capital=Tr self.zone_city = zone_city self.UTC = UTC + + def __str__(self): fields = "" - if self.country_name: - fields = fields+'country_name,' - if self.longitude: - fields = fields+' longitude,' - if self.latitude: - fields = fields + 'latitude,' - if self.iso_code: - fields = fields + 'iso_code,' - if self.phone_code: - fields = fields + 'phone_code,' - if self.capital: - fields = fields+'capital,' - if self.currency: - fields = fields+' currency,' - if self.currency_name: - fields = fields + 'currency_name,' - if self.currency_symbol: - fields = fields + 'currency_symbol,' - if self.country_domain: - fields = fields + 'country_domain,' - if self.region: - fields = fields + 'region,' - if self.subregion: - fields = fields + 'subregion,' - if self.timezone: - fields = fields + 'timezone,' - if self.zone_city: - fields = fields + 'zone_city,' - if self.UTC: - fields = fields + 'UTC,' - - return fields[:-1]+' ' + for field in ['country_name', 'iso_code', 'phone_code', 'capital', 'currency', 'currency_name', 'currency_symbol', 'country_domain', 'region', 'subregion', 'timezone', 'zone_city', 'UTC', 'longitude', 'latitude']: + if getattr(self, field): + fields = fields + field + ', ' + return fields[:-2] \ No newline at end of file diff --git a/hawqal/filters/state_filter.py b/hawqal/filters/state_filter.py index dd1beb0..1296431 100644 --- a/hawqal/filters/state_filter.py +++ b/hawqal/filters/state_filter.py @@ -8,15 +8,7 @@ def __init__(self, state_id=True, state_name=True, country_name=True, longitude= def __str__(self): fields = "" - if self.state_id: - fields = fields+'state_id,' - if self.state_name: - fields = fields+' state_name,' - if self.country_name: - fields = fields + 'country_name,' - if self.longitude: - fields = fields + 'longitude,' - if self.latitude: - fields = fields + 'latitude,' - - return fields[:-1]+' ' + for field in ['state_id', 'state_name', 'country_name', 'longitude', 'latitude']: + if getattr(self, field): + fields = fields + field + ', ' + return fields[:-2] diff --git a/hawqal/states.py b/hawqal/states.py index 7ac1036..e92e316 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -1,4 +1,4 @@ -from dal.dao import Database +from dal.dao import create_cursor from .filters.state_filter import StateFilter import string from Json.Query import convertJson @@ -8,11 +8,11 @@ class States: @staticmethod - def getStates(country_name="", filter=StateFilter()): + def getStates(country_name="", filters=StateFilter()): """ 1. States function takes two parameters as input state name and filters.\n 2. By default, function will return states name.\n - 3. Additional fields are included in filter.\n + 3. Additional fields are included in filters.\n 4. From filter of boolean TRUE fields will be included in output e.g { @@ -20,15 +20,9 @@ def getStates(country_name="", filter=StateFilter()): } """ + cursor = create_cursor() - file_name = os.path.join( - os.path.dirname(__file__), '..', 'database', 'hawqalDB.sqlite') - - with open(file_name, 'r', encoding="utf8") as db: - database = Database(file_name).makeConnection() - cursor = database.cursor() - - query = "SELECT " + str(filter) + " FROM states" + query = "SELECT " + str(filters) + " FROM states" if len(country_name) > 0: query = query + \ @@ -39,12 +33,12 @@ def getStates(country_name="", filter=StateFilter()): return convertJson(cursor) @staticmethod - def getState(country_name="", state_name="", filter=StateFilter()): + def getState(country_name="", state_name="", filters=StateFilter()): if state_name == "": raise ValueError("state_name must be set") - query = "SELECT " + filter + " FROM states" - cursor = Database.database_connection() + query = "SELECT " + filters + " FROM states" + cursor=create_cursor() if len(country_name) > 0 and len(state_name) > 0: query = f'where country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' elif len(country_name) > 0: From b3533240f947d12010a97bda65f3c33438ca3364 Mon Sep 17 00:00:00 2001 From: Husnain_Khurshid Date: Thu, 5 Jan 2023 17:25:19 +0500 Subject: [PATCH 10/18] fix: Updated the structure for the loading of data and fixing json response encoding --- .gitignore | 3 +- Json/Query.py | 18 +++-- dal/dao.py | 8 ++- hawqal/cities.py | 111 ++++++++++++++----------------- hawqal/country.py | 15 ++--- hawqal/filters/city_filter.py | 4 +- hawqal/filters/country_filter.py | 6 +- hawqal/filters/state_filter.py | 4 +- hawqal/states.py | 14 ++-- undefined | 0 10 files changed, 88 insertions(+), 95 deletions(-) create mode 100644 undefined diff --git a/.gitignore b/.gitignore index 0df1bcc..c6c3c6f 100644 --- a/.gitignore +++ b/.gitignore @@ -167,4 +167,5 @@ poetry.toml # End of https://www.toptal.com/developers/gitignore/api/python -main.py \ No newline at end of file +main.py +*/.json \ No newline at end of file diff --git a/Json/Query.py b/Json/Query.py index 6c07219..b9e090a 100644 --- a/Json/Query.py +++ b/Json/Query.py @@ -1,7 +1,13 @@ +import json + + def convertJson(cursor): - data_json = [] - header = [i[0] for i in cursor.description] - data = cursor.fetchall() - for i in data: - data_json.append(dict(zip(header, i))) - return data_json + jsonData = [] + rows = [item for item in cursor] + cols = [item[0] for item in cursor.description] + for row in rows: + data = {} + for index, value in zip(cols, row): + data[index] = value + jsonData.append(data) + return json.dumps(jsonData) diff --git a/dal/dao.py b/dal/dao.py index 149ec52..f4cdda4 100644 --- a/dal/dao.py +++ b/dal/dao.py @@ -1,10 +1,12 @@ import sqlite3 import os -def create_cursor(): + +def databaseConnection(): dirname = os.path.dirname(__file__) file_name = os.path.join(dirname, '..', 'database', 'hawqalDB.sqlite') - with open(file_name, 'r', encoding="utf8"): + with open(file_name, 'r', encoding="utf-8"): database = sqlite3.connect(file_name) cursor = database.cursor() - return cursor \ No newline at end of file + cursor.execute("pragma encoding") + return cursor diff --git a/hawqal/cities.py b/hawqal/cities.py index fed0da2..030bd5e 100644 --- a/hawqal/cities.py +++ b/hawqal/cities.py @@ -1,6 +1,7 @@ -from dal.dao import create_cursor +from dal.dao import databaseConnection import string import os +import json from .filters.city_filter import CityFilter from Json.Query import convertJson @@ -8,93 +9,79 @@ class City: @staticmethod - def getCities(country_name="", state_name="", filters=CityFilter()): + def getCities(country_name="", state_name="", filter=CityFilter()): """ - it takes 3 optional parameters and return JSON object. - - Default: - By default it will return all the cities with all the fields including - - - city_id - - Args: - country_name (str): Optional - To get the cities of some specific country. - state_name (str): Optional - To get the cities of some specific state. - filters (CityFilter): Optional - A class object specifying which fields to include in the results. - - Returns: - list: A json object containing the requested information about the cities. - - Example: + It takes 3 optional parameters and return JSON object.\n + Default: \n + By default it will return all the cities with all the fields including + - city_id\n + Args:\n + country_name (str): Optional - To get the cities of some specific country.\n + state_name (str): Optional - To get the cities of some specific state.\n + filters (CityFilter): Optional - A class object specifying which fields to include in the results.\n + Returns:\n + list: A json object containing the requested information about the cities.\n + Example: \n - To get all cities - - ``` - hawqal.getCities() - ``` - + ``` + hawqal.getCities() + ```\n - To get all cities of some country - - ``` - hawqal.getCities(country_name="Pakistan") - ``` - + ``` + hawqal.getCities(country_name="Pakistan") + ```\n - To get all cities of some state in a country - - ``` - hawqal.getCities(country_name="Pakistan",state_name="Punjab") - ``` - + ``` + hawqal.getCities(country_name="Pakistan",state_name="Punjab") + ```\n - To apply filters and exclude state_name - ``` - hawqal.getCities(filter=hawqal.CityFilter(state_name=False)) - ``` + ``` + hawqal.getCities(filter=hawqal.CityFilter(state_name=False)) + ``` """ - cursor = create_cursor() - query = "SELECT " + str(filters) + " FROM cities" + cursor = databaseConnection() + query = "SELECT " + str(filter) + " FROM cities" if country_name != "": query = query + \ - f" WHERE country_name = '{string.capwords(country_name)}'" + f" WHERE country_name = '{string.capwords(country_name)}'" elif state_name != "": query = query + \ - f" WHERE state_name = '{string.capwords(state_name)}'" + f" WHERE state_name = '{string.capwords(state_name)}'" cursor.execute(query) return convertJson(cursor) - @staticmethod + @ staticmethod def getCity(country_name="", state_name="", city_name="", filters=CityFilter()): """ - Retrieves information about a city from the database. - - Parameters: - country_name (str): The name of the country where the city is located. Optional. - state_name (str): The name of the state or province where the city is located. Optional. - city_name (str): The name of the city. Required. - filters (CityFilter): An object specifying which fields to include in the results. Optional. - - Returns: - A Json object containing the requested information about the city. - - Raises: - ValueError: If `city_name` is not specified. + Retrieves information about a city from the database.\n + Parameters:\n + country_name (str): The name of the country where the city is located. Optional.\n + state_name (str): The name of the state or province where the city is located. Optional.\n + city_name (str): The name of the city. Required.\n + filters (CityFilter): An object specifying which fields to include in the results. Optional.\n + Returns:\n + A Json object containing the requested information about the city.\n + Raises:\n + ValueError: If `city_name` is not specified. """ - cursor = create_cursor() - country_name = string.capwords(country_name) - state_name = string.capwords(state_name) - city_name = string.capwords(city_name) + cursor = databaseConnection() if city_name == "": raise ValueError("City name must be set") query = "SELECT " + str(filters) + " FROM CITIES " if country_name != "": - query = query + f"WHERE country_name='{country_name}' AND city_name='{city_name}' " + query = query +\ + f"WHERE country_name='{string.capwords(country_name)}' AND city_name='{string.capwords(city_name)}' " elif state_name != "": - query = query + f"Where state_name='{state_name}' and city_name='{city_name}'" + query = query +\ + f"Where state_name='{string.capwords(state_name)}' and city_name='{string.capwords(city_name)}'" elif country_name != "" and state_name != "": - query = query + f"Where state_name='{state_name}' and country_name='{country_name} and city_name='{city_name}' '" + query = query +\ + f"Where state_name='{string.capwords(state_name)}' and country_name='{string.capwords(country_name)} and city_name='{string.capwords(city_name)}' '" else: - query = query + f"where city_name='{city_name}'" + query = query + f"where city_name='{string.capwords(city_name)}'" cursor.execute(query) diff --git a/hawqal/country.py b/hawqal/country.py index 25e39b7..ed65d1c 100644 --- a/hawqal/country.py +++ b/hawqal/country.py @@ -1,5 +1,4 @@ -from dal.dao import create_cursor -# from .filters.filter import Filter +from dal.dao import databaseConnection from Json.Query import convertJson from .filters.country_filter import CountryFilter import string @@ -9,7 +8,7 @@ class Country: @staticmethod - def getCountries(filters=CountryFilter()): + def getCountries(filter=CountryFilter()): """ 1. getCountries function takes an opti\n 2. By default, function will return countries name with all the filters.\n @@ -26,8 +25,8 @@ def getCountries(filters=CountryFilter()): } """ - cursor=create_cursor() - query = "SELECT " + str(filters) + cursor = databaseConnection() + query = "SELECT " + str(filter) query = query + " FROM countries ORDER BY country_name ASC" print(query) @@ -36,7 +35,7 @@ def getCountries(filters=CountryFilter()): return convertJson(cursor) @staticmethod - def getCountry(country_name="", filters=CountryFilter()): + def getCountry(country_name="", filter=CountryFilter()): """ 1. Countries function takes two parameters as input country name and meta.\n 2. By default, function will return countries name.\n @@ -52,11 +51,11 @@ def getCountry(country_name="", filters=CountryFilter()): } """ - cursor = create_cursor() + cursor = databaseConnection() if country_name == "": raise ValueError("country_name must be set") - query = "SELECT " + str(filters) + " FROM countries" + query = "SELECT " + str(filter) + " FROM countries" if country_name != "": diff --git a/hawqal/filters/city_filter.py b/hawqal/filters/city_filter.py index 614b636..8ffa2cb 100644 --- a/hawqal/filters/city_filter.py +++ b/hawqal/filters/city_filter.py @@ -13,5 +13,5 @@ def __str__(self): fields = "" for field in ['country_name', 'city_id', 'city_name', 'state_id', 'state_name', 'latitude', 'longitude']: if getattr(self, field): - fields = fields + field + ', ' - return fields[:-2] + fields = fields + field + "," + return fields[:-1] diff --git a/hawqal/filters/country_filter.py b/hawqal/filters/country_filter.py index 06e3ef2..2aee2c7 100644 --- a/hawqal/filters/country_filter.py +++ b/hawqal/filters/country_filter.py @@ -16,11 +16,9 @@ def __init__(self, country_name=True, iso_code=True, phone_code=True, capital=Tr self.zone_city = zone_city self.UTC = UTC - - def __str__(self): fields = "" for field in ['country_name', 'iso_code', 'phone_code', 'capital', 'currency', 'currency_name', 'currency_symbol', 'country_domain', 'region', 'subregion', 'timezone', 'zone_city', 'UTC', 'longitude', 'latitude']: if getattr(self, field): - fields = fields + field + ', ' - return fields[:-2] \ No newline at end of file + fields = fields + field + ',' + return fields[:-1] diff --git a/hawqal/filters/state_filter.py b/hawqal/filters/state_filter.py index 1296431..e923928 100644 --- a/hawqal/filters/state_filter.py +++ b/hawqal/filters/state_filter.py @@ -10,5 +10,5 @@ def __str__(self): fields = "" for field in ['state_id', 'state_name', 'country_name', 'longitude', 'latitude']: if getattr(self, field): - fields = fields + field + ', ' - return fields[:-2] + fields = fields + field + ',' + return fields[:-1] diff --git a/hawqal/states.py b/hawqal/states.py index e92e316..e2cec3e 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -1,4 +1,4 @@ -from dal.dao import create_cursor +from dal.dao import databaseConnection from .filters.state_filter import StateFilter import string from Json.Query import convertJson @@ -8,7 +8,7 @@ class States: @staticmethod - def getStates(country_name="", filters=StateFilter()): + def getStates(country_name="", filter=StateFilter()): """ 1. States function takes two parameters as input state name and filters.\n 2. By default, function will return states name.\n @@ -20,9 +20,9 @@ def getStates(country_name="", filters=StateFilter()): } """ - cursor = create_cursor() + cursor = databaseConnection() - query = "SELECT " + str(filters) + " FROM states" + query = "SELECT " + str(filter) + " FROM states" if len(country_name) > 0: query = query + \ @@ -33,12 +33,12 @@ def getStates(country_name="", filters=StateFilter()): return convertJson(cursor) @staticmethod - def getState(country_name="", state_name="", filters=StateFilter()): + def getState(country_name="", state_name="", filter=StateFilter()): if state_name == "": raise ValueError("state_name must be set") - query = "SELECT " + filters + " FROM states" - cursor=create_cursor() + query = "SELECT " + filter + " FROM states" + cursor = databaseConnection() if len(country_name) > 0 and len(state_name) > 0: query = f'where country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' elif len(country_name) > 0: diff --git a/undefined b/undefined new file mode 100644 index 0000000..e69de29 From 916c53ac9d477bd39356c8e3f26d649d97b81fd2 Mon Sep 17 00:00:00 2001 From: Hussnain12 <“hussnain.ml.fiver@gmail.com”> Date: Thu, 5 Jan 2023 19:16:13 +0500 Subject: [PATCH 11/18] addded the docstrings --- hawqal/cities.py | 111 ++++++++++++++++++++++++++++++---------------- hawqal/country.py | 95 +++++++++++++++++++++++++++------------ hawqal/states.py | 78 +++++++++++++++++++++++++------- 3 files changed, 201 insertions(+), 83 deletions(-) diff --git a/hawqal/cities.py b/hawqal/cities.py index 030bd5e..5ea79a9 100644 --- a/hawqal/cities.py +++ b/hawqal/cities.py @@ -11,75 +11,112 @@ class City: @staticmethod def getCities(country_name="", state_name="", filter=CityFilter()): """ - It takes 3 optional parameters and return JSON object.\n + Description:\n + getCities function returns data of cities w.r.t to country or state in JSON format Default: \n - By default it will return all the cities with all the fields including + By default it will return all the cities with all the fields including\n - city_id\n + - country_name\n + - city_name\n + - state_id\n + - state_name\n + - latitude\n + - longitude\n Args:\n - country_name (str): Optional - To get the cities of some specific country.\n - state_name (str): Optional - To get the cities of some specific state.\n - filters (CityFilter): Optional - A class object specifying which fields to include in the results.\n + country_name (str): Optional : To get the cities of some specific country.\n + state_name (str): Optional : To get the cities of some specific state.\n + filters (CityFilter): Optional : A class object specifying which fields to include in the results.\n Returns:\n - list: A json object containing the requested information about the cities.\n + list: A json object containing the requested information about the cities.\n Example: \n - - To get all cities - ``` - hawqal.getCities() - ```\n + - To get all cities + ``` + hawqal.getCities() + ```\n - To get all cities of some country - ``` - hawqal.getCities(country_name="Pakistan") - ```\n + ``` + hawqal.getCities(country_name="Pakistan") + ```\n - To get all cities of some state in a country - ``` - hawqal.getCities(country_name="Pakistan",state_name="Punjab") - ```\n + ``` + hawqal.getCities(country_name="Pakistan",state_name="Punjab") + ```\n - To apply filters and exclude state_name - ``` - hawqal.getCities(filter=hawqal.CityFilter(state_name=False)) - ``` + ``` + hawqal.getCities(filter=hawqal.CityFilter(state_name=False)) + ``` """ cursor = databaseConnection() query = "SELECT " + str(filter) + " FROM cities" if country_name != "": query = query + \ - f" WHERE country_name = '{string.capwords(country_name)}'" + f" WHERE country_name = '{string.capwords(country_name)}'" elif state_name != "": query = query + \ - f" WHERE state_name = '{string.capwords(state_name)}'" + f" WHERE state_name = '{string.capwords(state_name)}'" cursor.execute(query) return convertJson(cursor) - @ staticmethod + @staticmethod def getCity(country_name="", state_name="", city_name="", filters=CityFilter()): """ - Retrieves information about a city from the database.\n - Parameters:\n - country_name (str): The name of the country where the city is located. Optional.\n - state_name (str): The name of the state or province where the city is located. Optional.\n - city_name (str): The name of the city. Required.\n - filters (CityFilter): An object specifying which fields to include in the results. Optional.\n + Description:\n + getCity function returns data of a single city JSON format + Default: \n + By default it will return data of a city if we provide that in the function with all the field + including\n + - city_id\n + - country_name\n + - city_name\n + - state_id\n + - state_name\n + - latitude\n + - longitude\n + Args:\n + country_name (str): Optional : To get the cities of some specific country.\n + state_name (str): Optional : To get the cities of some specific state.\n + city_name (str): Required : To get the city.\n + filters (CityFilter): Optional : A class object specifying which fields to include in the results.\n Returns:\n - A Json object containing the requested information about the city.\n - Raises:\n - ValueError: If `city_name` is not specified. + list: A JSON object containing the requested information about the cities.\n + Example: \n + - To get single city with all the filters + ``` + hawqal.getCity(city_name="wah") + ```\n + - To get city of specific country + ``` + hawqal.getCity(country_name="Pakistan",city_name="wah") + ```\n + - To get city of specific state + ``` + hawqal.getCity(state_name="punjab",city_name="wah") + ```\n + - To get city of specific state and country + ``` + hawqal.getCity(country_name="pakistan",state_name="punjab",city_name="wah") + ```\n + - To apply filters and exclude longitude + ``` + hawqal.getCity(country_name="pakistan",state_name="punjab",city_name="wah",filter=hawqal.CityFilter(longitude=False)) + ``` """ cursor = databaseConnection() if city_name == "": raise ValueError("City name must be set") query = "SELECT " + str(filters) + " FROM CITIES " if country_name != "": - query = query +\ - f"WHERE country_name='{string.capwords(country_name)}' AND city_name='{string.capwords(city_name)}' " + query = query + \ + f"WHERE country_name='{string.capwords(country_name)}' AND city_name='{string.capwords(city_name)}' " elif state_name != "": - query = query +\ - f"Where state_name='{string.capwords(state_name)}' and city_name='{string.capwords(city_name)}'" + query = query + \ + f"Where state_name='{string.capwords(state_name)}' and city_name='{string.capwords(city_name)}'" elif country_name != "" and state_name != "": - query = query +\ - f"Where state_name='{string.capwords(state_name)}' and country_name='{string.capwords(country_name)} and city_name='{string.capwords(city_name)}' '" + query = query + \ + f"Where state_name='{string.capwords(state_name)}' and country_name='{string.capwords(country_name)} and city_name='{string.capwords(city_name)}' '" else: query = query + f"where city_name='{string.capwords(city_name)}'" diff --git a/hawqal/country.py b/hawqal/country.py index ed65d1c..098bc59 100644 --- a/hawqal/country.py +++ b/hawqal/country.py @@ -10,20 +10,38 @@ class Country: @staticmethod def getCountries(filter=CountryFilter()): """ - 1. getCountries function takes an opti\n - 2. By default, function will return countries name with all the filters.\n - 3. Additional fields are included in filter.\n - 4. From meta TRUE fields will be included in output - e.g - - { - "coordinates": True, - "region": True, - "currency": True, - "timezone": True, - "capital": True - } - + Description:\n + Get information about multiple countries from the database + Default: \n + By default, this method returns data about all countries, including the following fields:\n + - country_name\n + - iso_code\n + - phone_code\n + - capital\n + - currency\n + - currency_name\n + - currency_symbol\n + - country_domain\n + - region\n + - subregion\n + - timezone\n + - zone_city\n + - UTC\n + - latitude\n + - longitude\n + Args:\n + filters (CountryFilter): Optional : A class object specifying which fields to include in the results.\n + Returns:\n + list: A JSON object containing the requested information about the countries.\n + Example: \n + - To get all the countries + ``` + hawqal.getCountries() + ``` + - To apply filters and exclude longitude + ``` + hawqal.getCountries(filter=hawqal.CountryFilter(longitude=False)) + ``` """ cursor = databaseConnection() query = "SELECT " + str(filter) @@ -37,19 +55,39 @@ def getCountries(filter=CountryFilter()): @staticmethod def getCountry(country_name="", filter=CountryFilter()): """ - 1. Countries function takes two parameters as input country name and meta.\n - 2. By default, function will return countries name.\n - 3. Additional fields are included in filter.\n - 4. From meta TRUE fields will be included in output - e.g - { - "coordinates": True, - "region": True, - "currency": True, - "timezone": True, - "capital": True - } - + Description:\n + Get information about a specific country from the database. + Default: + By default, this method returns data about a country, including the following fields:\n + - country_name\n + - iso_code\n + - phone_code\n + - capital\n + - currency\n + - currency_name\n + - currency_symbol\n + - country_domain\n + - region\n + - subregion\n + - timezone\n + - zone_city\n + - UTC\n + - latitude\n + - longitude\n + Args:\n + country_name (str): Required : Name of country + filters (CityFilter): Optional : A class object specifying which fields to include in the results.\n + Returns:\n + list: A JSON object containing the requested information about the country.\n + Example: \n + - To get the specific country data + ``` + hawqal.getCountry(country_name="pakistan") + ``` + - To apply filters and exclude longitude + ``` + hawqal.getCountry(country_name="pakistan",filter=hawqal.CountryFilter(longitude=False)) + ``` """ cursor = databaseConnection() if country_name == "": @@ -58,9 +96,8 @@ def getCountry(country_name="", filter=CountryFilter()): query = "SELECT " + str(filter) + " FROM countries" if country_name != "": - query = query + \ - f" WHERE country_name = '{string.capwords(country_name)}' ORDER BY country_name ASC" + f" WHERE country_name = '{string.capwords(country_name)}' ORDER BY country_name ASC" cursor.execute(query) diff --git a/hawqal/states.py b/hawqal/states.py index e2cec3e..0ed0e9b 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -10,15 +10,33 @@ class States: @staticmethod def getStates(country_name="", filter=StateFilter()): """ - 1. States function takes two parameters as input state name and filters.\n - 2. By default, function will return states name.\n - 3. Additional fields are included in filters.\n - 4. From filter of boolean TRUE fields will be included in output - e.g - { - "coordinates":True - } - + Description:\n + Get information about multiple states from the database + Default: \n + By default, this method returns data about all states, including the following fields:\n + - state_id\n + - state_name\n + - country_name\n + - latitude\n + - longitude\n + Args:\n + filters (StateFilter): Optional : A class object specifying which fields to include in the results.\n + country_name: Optional : Name of country + Returns:\n + list: A JSON object containing the requested information about the countries.\n + Example: \n + - To get all the states + ``` + hawqal.getState() + ```\n + - To get state of specific country + ``` + hawqal.getState(country_name="pakistan",state_name="punjab") + ```\n + - To apply filters and exclude longitude + ``` + hawqal.getState(state_name="punjab",filter=hawqal.StateFilter(longitude=False)) + ```\n """ cursor = databaseConnection() @@ -26,7 +44,7 @@ def getStates(country_name="", filter=StateFilter()): if len(country_name) > 0: query = query + \ - f' where country_name= "{string.capwords(country_name)}"' + f' where country_name= "{string.capwords(country_name)}"' cursor.execute(query) @@ -34,22 +52,48 @@ def getStates(country_name="", filter=StateFilter()): @staticmethod def getState(country_name="", state_name="", filter=StateFilter()): + """ + Description:\n + Get information about state from the database\n + Default: + By default, this method returns data about single state, including the following fields:\n + - state_id\n + - state_name\n + - country_name\n + - latitude\n + - longitude\n + Args:\n + filters (StateFilter): Optional : A class object specifying which fields to include in the results.\n + country_name: Optional : Name of country + state_name: Required : Name of the State + Returns:\n + list: A JSON object containing the requested information about the countries.\n + Example: \n + - To get single state with all the filters + ``` + hawqal.getState(state_name="punjab") + ```\n + - To get state of specific country + ``` + hawqal.getState(country_name="Pakistan",state_name="punjab") + ```\n + - To apply filters and exclude longitude + ``` + hawqal.getStates(state_name="punjab",filter=hawqal.StateFilter(longitude=False)) + ```\n + """ if state_name == "": raise ValueError("state_name must be set") - - query = "SELECT " + filter + " FROM states" + query = "SELECT " + str(filter) + " FROM states" cursor = databaseConnection() if len(country_name) > 0 and len(state_name) > 0: query = f'where country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' elif len(country_name) > 0: query = query + \ - f'where country_name= "{string.capwords(country_name)}"' + f'where country_name= "{string.capwords(country_name)}"' elif len(state_name) > 0: query = query + \ - f'where state_name= "{string.capwords(state_name)}"' - + f'where state_name= "{string.capwords(state_name)}"' query = query + " ORDER BY country_name" - cursor.execute(query) - return convertJson(cursor) From 79e90df7a6b1b9028a6f57c2b55ebbaa830e944a Mon Sep 17 00:00:00 2001 From: Hussnain12 <“hussnain.ml.fiver@gmail.com”> Date: Thu, 5 Jan 2023 19:58:09 +0500 Subject: [PATCH 12/18] updated the test cases and fixed the query in states file --- check.json | 4124 ++++++++++++++++++++++++++++++++++++++++++++++ hawqal/states.py | 5 +- test_hawqal.py | 19 +- 3 files changed, 4137 insertions(+), 11 deletions(-) create mode 100644 check.json diff --git a/check.json b/check.json new file mode 100644 index 0000000..cddd9e8 --- /dev/null +++ b/check.json @@ -0,0 +1,4124 @@ +[ + { + "country_name": "Pakistan", + "city_id": 85368, + "city_name": "Bhimbar", + "state_id": 3172, + "state_name": "Azad Kashmir", + "latitude": "32.97465", + "longitude": "74.07846" + }, + { + "country_name": "Pakistan", + "city_id": 85562, + "city_name": "Kotli", + "state_id": 3172, + "state_name": "Azad Kashmir", + "latitude": "33.51836", + "longitude": "73.9022" + }, + { + "country_name": "Pakistan", + "city_id": 85563, + "city_name": "Kotli District", + "state_id": 3172, + "state_name": "Azad Kashmir", + "latitude": "33.44559", + "longitude": "73.91557" + }, + { + "country_name": "Pakistan", + "city_id": 85614, + "city_name": "Mirpur District", + "state_id": 3172, + "state_name": "Azad Kashmir", + "latitude": "33.21556", + "longitude": "73.75144" + }, + { + "country_name": "Pakistan", + "city_id": 85628, + "city_name": "Muzaffar\u0101b\u0101d", + "state_id": 3172, + "state_name": "Azad Kashmir", + "latitude": "34.37002", + "longitude": "73.47082" + }, + { + "country_name": "Pakistan", + "city_id": 85643, + "city_name": "New Mirpur", + "state_id": 3172, + "state_name": "Azad Kashmir", + "latitude": "33.14782", + "longitude": "73.75187" + }, + { + "country_name": "Pakistan", + "city_id": 85682, + "city_name": "Rawala Kot", + "state_id": 3172, + "state_name": "Azad Kashmir", + "latitude": "33.85782", + "longitude": "73.76043" + }, + { + "country_name": "Pakistan", + "city_id": 85334, + "city_name": "Alik Ghund", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.48976", + "longitude": "67.52177" + }, + { + "country_name": "Pakistan", + "city_id": 85342, + "city_name": "Aw\u0101r\u0101n District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "26.21157", + "longitude": "65.42944" + }, + { + "country_name": "Pakistan", + "city_id": 85353, + "city_name": "Barkhan", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.89773", + "longitude": "69.52558" + }, + { + "country_name": "Pakistan", + "city_id": 85375, + "city_name": "B\u0101rkh\u0101n District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.98482", + "longitude": "69.69944" + }, + { + "country_name": "Pakistan", + "city_id": 85360, + "city_name": "Bela", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "26.22718", + "longitude": "66.31178" + }, + { + "country_name": "Pakistan", + "city_id": 85362, + "city_name": "Bhag", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.04174", + "longitude": "67.82394" + }, + { + "country_name": "Pakistan", + "city_id": 85401, + "city_name": "Ch\u0101gai District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.98765", + "longitude": "63.59087" + }, + { + "country_name": "Pakistan", + "city_id": 85385, + "city_name": "Chaman", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.91769", + "longitude": "66.45259" + }, + { + "country_name": "Pakistan", + "city_id": 85397, + "city_name": "Chowki Jamali", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.01944", + "longitude": "67.92083" + }, + { + "country_name": "Pakistan", + "city_id": 85402, + "city_name": "Dadhar", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.47489", + "longitude": "67.65167" + }, + { + "country_name": "Pakistan", + "city_id": 85406, + "city_name": "Dalbandin", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.88846", + "longitude": "64.40616" + }, + { + "country_name": "Pakistan", + "city_id": 85416, + "city_name": "Dera Bugti", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.03619", + "longitude": "69.15849" + }, + { + "country_name": "Pakistan", + "city_id": 85417, + "city_name": "Dera Bugti District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.9425", + "longitude": "69.06883" + }, + { + "country_name": "Pakistan", + "city_id": 85432, + "city_name": "Duki", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.15307", + "longitude": "68.57323" + }, + { + "country_name": "Pakistan", + "city_id": 85442, + "city_name": "Gadani", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "25.11879", + "longitude": "66.73219" + }, + { + "country_name": "Pakistan", + "city_id": 85445, + "city_name": "Garhi Khairo", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.06029", + "longitude": "67.98033" + }, + { + "country_name": "Pakistan", + "city_id": 85459, + "city_name": "Gwadar", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "25.12163", + "longitude": "62.32541" + }, + { + "country_name": "Pakistan", + "city_id": 85465, + "city_name": "Harnai", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.10077", + "longitude": "67.93824" + }, + { + "country_name": "Pakistan", + "city_id": 85497, + "city_name": "J\u0101far\u0101b\u0101d District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.30104", + "longitude": "68.19783" + }, + { + "country_name": "Pakistan", + "city_id": 85489, + "city_name": "Jhal Magsi District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.36881", + "longitude": "67.543" + }, + { + "country_name": "Pakistan", + "city_id": 85495, + "city_name": "Jiwani", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "25.04852", + "longitude": "61.74573" + }, + { + "country_name": "Pakistan", + "city_id": 85507, + "city_name": "Kalat", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.02663", + "longitude": "66.59361" + }, + { + "country_name": "Pakistan", + "city_id": 85511, + "city_name": "Kal\u0101t District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.88242", + "longitude": "66.53165" + }, + { + "country_name": "Pakistan", + "city_id": 85530, + "city_name": "Khadan Khak", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.75236", + "longitude": "67.71133" + }, + { + "country_name": "Pakistan", + "city_id": 85543, + "city_name": "Kharan", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.58459", + "longitude": "65.41501" + }, + { + "country_name": "Pakistan", + "city_id": 85550, + "city_name": "Kh\u0101r\u0101n District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "27.96308", + "longitude": "64.57113" + }, + { + "country_name": "Pakistan", + "city_id": 85548, + "city_name": "Khuzdar", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "27.81193", + "longitude": "66.61096" + }, + { + "country_name": "Pakistan", + "city_id": 85549, + "city_name": "Khuzd\u0101r District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "27.4868", + "longitude": "66.58703" + }, + { + "country_name": "Pakistan", + "city_id": 85552, + "city_name": "Kohlu", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.89651", + "longitude": "69.25324" + }, + { + "country_name": "Pakistan", + "city_id": 85556, + "city_name": "Kot Malik Barkhurdar", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.20379", + "longitude": "66.98723" + }, + { + "country_name": "Pakistan", + "city_id": 85579, + "city_name": "Lasbela District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "25.78634", + "longitude": "66.6033" + }, + { + "country_name": "Pakistan", + "city_id": 85584, + "city_name": "Loralai", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.37051", + "longitude": "68.59795" + }, + { + "country_name": "Pakistan", + "city_id": 85585, + "city_name": "Loralai District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.30253", + "longitude": "68.84636" + }, + { + "country_name": "Pakistan", + "city_id": 85586, + "city_name": "Mach", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.86371", + "longitude": "67.33018" + }, + { + "country_name": "Pakistan", + "city_id": 85599, + "city_name": "Mastung", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.79966", + "longitude": "66.84553" + }, + { + "country_name": "Pakistan", + "city_id": 85600, + "city_name": "Mastung District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.79455", + "longitude": "66.72068" + }, + { + "country_name": "Pakistan", + "city_id": 85605, + "city_name": "Mehrabpur", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.10773", + "longitude": "68.02554" + }, + { + "country_name": "Pakistan", + "city_id": 85629, + "city_name": "M\u016bsa Khel District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.84937", + "longitude": "69.90069" + }, + { + "country_name": "Pakistan", + "city_id": 85635, + "city_name": "Nas\u012br\u0101b\u0101d District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.62643", + "longitude": "68.12925" + }, + { + "country_name": "Pakistan", + "city_id": 85648, + "city_name": "Nushki", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.55218", + "longitude": "66.02288" + }, + { + "country_name": "Pakistan", + "city_id": 85651, + "city_name": "Ormara", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "25.21018", + "longitude": "64.63626" + }, + { + "country_name": "Pakistan", + "city_id": 85656, + "city_name": "Panjg\u016br District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "26.7375", + "longitude": "64.2038" + }, + { + "country_name": "Pakistan", + "city_id": 85658, + "city_name": "Pasni", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "25.26302", + "longitude": "63.46921" + }, + { + "country_name": "Pakistan", + "city_id": 85668, + "city_name": "Pishin", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.58176", + "longitude": "66.99406" + }, + { + "country_name": "Pakistan", + "city_id": 85671, + "city_name": "Qila Saifull\u0101h District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.95392", + "longitude": "68.33996" + }, + { + "country_name": "Pakistan", + "city_id": 85672, + "city_name": "Quetta", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.18414", + "longitude": "67.00141" + }, + { + "country_name": "Pakistan", + "city_id": 85673, + "city_name": "Quetta District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.17458", + "longitude": "66.76203" + }, + { + "country_name": "Pakistan", + "city_id": 85721, + "city_name": "Sibi", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "29.54299", + "longitude": "67.87726" + }, + { + "country_name": "Pakistan", + "city_id": 85727, + "city_name": "Sohbatpur", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.52038", + "longitude": "68.54298" + }, + { + "country_name": "Pakistan", + "city_id": 85731, + "city_name": "Surab", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.49276", + "longitude": "66.25999" + }, + { + "country_name": "Pakistan", + "city_id": 85755, + "city_name": "Turbat", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "26.00122", + "longitude": "63.04849" + }, + { + "country_name": "Pakistan", + "city_id": 85760, + "city_name": "Usta Muhammad", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "28.17723", + "longitude": "68.04367" + }, + { + "country_name": "Pakistan", + "city_id": 85761, + "city_name": "Uthal", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "25.80722", + "longitude": "66.62194" + }, + { + "country_name": "Pakistan", + "city_id": 85771, + "city_name": "Zhob", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "31.34082", + "longitude": "69.4493" + }, + { + "country_name": "Pakistan", + "city_id": 85772, + "city_name": "Zhob District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "31.36444", + "longitude": "69.20749" + }, + { + "country_name": "Pakistan", + "city_id": 85773, + "city_name": "Ziarat", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.38244", + "longitude": "67.72562" + }, + { + "country_name": "Pakistan", + "city_id": 85774, + "city_name": "Zi\u0101rat District", + "state_id": 3174, + "state_name": "Balochistan", + "latitude": "30.43591", + "longitude": "67.50962" + }, + { + "country_name": "Pakistan", + "city_id": 85336, + "city_name": "Alizai", + "state_id": 3173, + "state_name": "Federally Administered Tribal Areas", + "latitude": "33.53613", + "longitude": "70.34607" + }, + { + "country_name": "Pakistan", + "city_id": 85458, + "city_name": "Gulishah Kach", + "state_id": 3173, + "state_name": "Federally Administered Tribal Areas", + "latitude": "32.67087", + "longitude": "70.33917" + }, + { + "country_name": "Pakistan", + "city_id": 85577, + "city_name": "Landi Kotal", + "state_id": 3173, + "state_name": "Federally Administered Tribal Areas", + "latitude": "34.0988", + "longitude": "71.14108" + }, + { + "country_name": "Pakistan", + "city_id": 85611, + "city_name": "Miran Shah", + "state_id": 3173, + "state_name": "Federally Administered Tribal Areas", + "latitude": "33.00059", + "longitude": "70.07117" + }, + { + "country_name": "Pakistan", + "city_id": 85645, + "city_name": "North Waz\u012brist\u0101n Agency", + "state_id": 3173, + "state_name": "Federally Administered Tribal Areas", + "latitude": "32.95087", + "longitude": "69.95764" + }, + { + "country_name": "Pakistan", + "city_id": 85717, + "city_name": "Shinpokh", + "state_id": 3173, + "state_name": "Federally Administered Tribal Areas", + "latitude": "34.32959", + "longitude": "71.17852" + }, + { + "country_name": "Pakistan", + "city_id": 85728, + "city_name": "South Waz\u012brist\u0101n Agency", + "state_id": 3173, + "state_name": "Federally Administered Tribal Areas", + "latitude": "32.30397", + "longitude": "69.68207" + }, + { + "country_name": "Pakistan", + "city_id": 85764, + "city_name": "Wana", + "state_id": 3173, + "state_name": "Federally Administered Tribal Areas", + "latitude": "32.29889", + "longitude": "69.5725" + }, + { + "country_name": "Pakistan", + "city_id": 85352, + "city_name": "Barishal", + "state_id": 3170, + "state_name": "Gilgit-Baltistan", + "latitude": "36.32162", + "longitude": "74.69502" + }, + { + "country_name": "Pakistan", + "city_id": 85450, + "city_name": "Gilgit", + "state_id": 3170, + "state_name": "Gilgit-Baltistan", + "latitude": "35.91869", + "longitude": "74.31245" + }, + { + "country_name": "Pakistan", + "city_id": 85724, + "city_name": "Skardu", + "state_id": 3170, + "state_name": "Gilgit-Baltistan", + "latitude": "35.29787", + "longitude": "75.63372" + }, + { + "country_name": "Pakistan", + "city_id": 85475, + "city_name": "Islamabad", + "state_id": 3169, + "state_name": "Islamabad Capital Territory", + "latitude": "33.72148", + "longitude": "73.04329" + }, + { + "country_name": "Pakistan", + "city_id": 85329, + "city_name": "Abbottabad", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.1463", + "longitude": "73.21168" + }, + { + "country_name": "Pakistan", + "city_id": 85333, + "city_name": "Akora", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.00337", + "longitude": "72.12561" + }, + { + "country_name": "Pakistan", + "city_id": 85337, + "city_name": "Aman Garh", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.00584", + "longitude": "71.92971" + }, + { + "country_name": "Pakistan", + "city_id": 85338, + "city_name": "Amirabad", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.18729", + "longitude": "73.09078" + }, + { + "country_name": "Pakistan", + "city_id": 85340, + "city_name": "Ashanagro Koto", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.10773", + "longitude": "72.24517" + }, + { + "country_name": "Pakistan", + "city_id": 85345, + "city_name": "Baffa", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.4377", + "longitude": "73.22368" + }, + { + "country_name": "Pakistan", + "city_id": 85351, + "city_name": "Bannu", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "32.98527", + "longitude": "70.60403" + }, + { + "country_name": "Pakistan", + "city_id": 85356, + "city_name": "Bat Khela", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.6178", + "longitude": "71.97247" + }, + { + "country_name": "Pakistan", + "city_id": 85357, + "city_name": "Battagram", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.67719", + "longitude": "73.02329" + }, + { + "country_name": "Pakistan", + "city_id": 85358, + "city_name": "Battagram District", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.68051", + "longitude": "73.00535" + }, + { + "country_name": "Pakistan", + "city_id": 85374, + "city_name": "Buner District", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.44301", + "longitude": "72.49933" + }, + { + "country_name": "Pakistan", + "city_id": 85387, + "city_name": "Charsadda", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.14822", + "longitude": "71.7406" + }, + { + "country_name": "Pakistan", + "city_id": 85390, + "city_name": "Cherat Cantonement", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "33.82342", + "longitude": "71.89292" + }, + { + "country_name": "Pakistan", + "city_id": 85395, + "city_name": "Chitral", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "35.8518", + "longitude": "71.78636" + }, + { + "country_name": "Pakistan", + "city_id": 85419, + "city_name": "Dera Ismail Khan", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "31.83129", + "longitude": "70.9017" + }, + { + "country_name": "Pakistan", + "city_id": 85420, + "city_name": "Dera Ism\u0101\u012bl Kh\u0101n District", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "31.85963", + "longitude": "70.64879" + }, + { + "country_name": "Pakistan", + "city_id": 85430, + "city_name": "Doaba", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "33.4245", + "longitude": "70.73676" + }, + { + "country_name": "Pakistan", + "city_id": 85463, + "city_name": "Hangu", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "33.53198", + "longitude": "71.0595" + }, + { + "country_name": "Pakistan", + "city_id": 85464, + "city_name": "Haripur", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "33.99783", + "longitude": "72.93493" + }, + { + "country_name": "Pakistan", + "city_id": 85470, + "city_name": "Havelian", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.05348", + "longitude": "73.15993" + }, + { + "country_name": "Pakistan", + "city_id": 85504, + "city_name": "Kakad Wari Dir Upper", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.99798", + "longitude": "72.07295" + }, + { + "country_name": "Pakistan", + "city_id": 85522, + "city_name": "Karak", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "33.11633", + "longitude": "71.09354" + }, + { + "country_name": "Pakistan", + "city_id": 85536, + "city_name": "Khalabat", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.05997", + "longitude": "72.88963" + }, + { + "country_name": "Pakistan", + "city_id": 85551, + "city_name": "Kohat", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "33.58196", + "longitude": "71.44929" + }, + { + "country_name": "Pakistan", + "city_id": 85566, + "city_name": "Kulachi", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "31.93058", + "longitude": "70.45959" + }, + { + "country_name": "Pakistan", + "city_id": 85570, + "city_name": "Lachi", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "33.38291", + "longitude": "71.33733" + }, + { + "country_name": "Pakistan", + "city_id": 85574, + "city_name": "Lakki", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "32.60724", + "longitude": "70.91234" + }, + { + "country_name": "Pakistan", + "city_id": 85597, + "city_name": "Mansehra", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.33023", + "longitude": "73.19679" + }, + { + "country_name": "Pakistan", + "city_id": 85598, + "city_name": "Mardan", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.19794", + "longitude": "72.04965" + }, + { + "country_name": "Pakistan", + "city_id": 85610, + "city_name": "Mingora", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.7795", + "longitude": "72.36265" + }, + { + "country_name": "Pakistan", + "city_id": 85644, + "city_name": "Noorabad", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.25195", + "longitude": "71.96656" + }, + { + "country_name": "Pakistan", + "city_id": 85646, + "city_name": "Nowshera", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.01583", + "longitude": "71.98123" + }, + { + "country_name": "Pakistan", + "city_id": 85647, + "city_name": "Nowshera Cantonment", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "33.99829", + "longitude": "71.99834" + }, + { + "country_name": "Pakistan", + "city_id": 85652, + "city_name": "Pabbi", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.00968", + "longitude": "71.79445" + }, + { + "country_name": "Pakistan", + "city_id": 85654, + "city_name": "Paharpur", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "32.10502", + "longitude": "70.97055" + }, + { + "country_name": "Pakistan", + "city_id": 85661, + "city_name": "Peshawar", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.008", + "longitude": "71.57849" + }, + { + "country_name": "Pakistan", + "city_id": 85686, + "city_name": "Risalpur Cantonment", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.06048", + "longitude": "71.99276" + }, + { + "country_name": "Pakistan", + "city_id": 85700, + "city_name": "Sarai Naurang", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "32.82581", + "longitude": "70.78107" + }, + { + "country_name": "Pakistan", + "city_id": 85705, + "city_name": "Shabqadar", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.21599", + "longitude": "71.5548" + }, + { + "country_name": "Pakistan", + "city_id": 85716, + "city_name": "Shingli Bala", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.67872", + "longitude": "72.98491" + }, + { + "country_name": "Pakistan", + "city_id": 85718, + "city_name": "Shorkot", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "31.91023", + "longitude": "70.87757" + }, + { + "country_name": "Pakistan", + "city_id": 85733, + "city_name": "Swabi", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.12018", + "longitude": "72.46982" + }, + { + "country_name": "Pakistan", + "city_id": 85745, + "city_name": "Tangi", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.3009", + "longitude": "71.65238" + }, + { + "country_name": "Pakistan", + "city_id": 85747, + "city_name": "Tank", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "32.21707", + "longitude": "70.38315" + }, + { + "country_name": "Pakistan", + "city_id": 85749, + "city_name": "Thal", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "35.47836", + "longitude": "72.24383" + }, + { + "country_name": "Pakistan", + "city_id": 85754, + "city_name": "Topi", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.07034", + "longitude": "72.62147" + }, + { + "country_name": "Pakistan", + "city_id": 85759, + "city_name": "Upper Dir", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "35.2074", + "longitude": "71.8768" + }, + { + "country_name": "Pakistan", + "city_id": 85762, + "city_name": "Utmanzai", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.18775", + "longitude": "71.76274" + }, + { + "country_name": "Pakistan", + "city_id": 85770, + "city_name": "Zaida", + "state_id": 3171, + "state_name": "Khyber Pakhtunkhwa", + "latitude": "34.0595", + "longitude": "72.4669" + }, + { + "country_name": "Pakistan", + "city_id": 85332, + "city_name": "Ahmadpur Sial", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.67791", + "longitude": "71.74344" + }, + { + "country_name": "Pakistan", + "city_id": 85331, + "city_name": "Ahmedpur East", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.14269", + "longitude": "71.25771" + }, + { + "country_name": "Pakistan", + "city_id": 85335, + "city_name": "Alipur Chatha", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.38242", + "longitude": "70.91106" + }, + { + "country_name": "Pakistan", + "city_id": 85339, + "city_name": "Arifwala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.29058", + "longitude": "73.06574" + }, + { + "country_name": "Pakistan", + "city_id": 85341, + "city_name": "Attock Tehsil", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.76671", + "longitude": "72.35977" + }, + { + "country_name": "Pakistan", + "city_id": 85343, + "city_name": "Baddomalhi", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.99042", + "longitude": "74.6641" + }, + { + "country_name": "Pakistan", + "city_id": 85347, + "city_name": "Bahawalnagar", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.99835", + "longitude": "73.25272" + }, + { + "country_name": "Pakistan", + "city_id": 85348, + "city_name": "Bahawalpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.39779", + "longitude": "71.6752" + }, + { + "country_name": "Pakistan", + "city_id": 85349, + "city_name": "Bakhri Ahmad Khan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.73586", + "longitude": "70.83796" + }, + { + "country_name": "Pakistan", + "city_id": 85354, + "city_name": "Basirpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.57759", + "longitude": "73.83912" + }, + { + "country_name": "Pakistan", + "city_id": 85355, + "city_name": "Basti Dosa", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.78769", + "longitude": "70.86853" + }, + { + "country_name": "Pakistan", + "city_id": 85359, + "city_name": "Begowala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.43816", + "longitude": "74.26794" + }, + { + "country_name": "Pakistan", + "city_id": 85363, + "city_name": "Bhakkar", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.62685", + "longitude": "71.06471" + }, + { + "country_name": "Pakistan", + "city_id": 85364, + "city_name": "Bhalwal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.26576", + "longitude": "72.89809" + }, + { + "country_name": "Pakistan", + "city_id": 85366, + "city_name": "Bhawana", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.56884", + "longitude": "72.64917" + }, + { + "country_name": "Pakistan", + "city_id": 85367, + "city_name": "Bhera", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.48206", + "longitude": "72.90865" + }, + { + "country_name": "Pakistan", + "city_id": 85371, + "city_name": "Bhopalwala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.42968", + "longitude": "74.3635" + }, + { + "country_name": "Pakistan", + "city_id": 85376, + "city_name": "Burewala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.16667", + "longitude": "72.65" + }, + { + "country_name": "Pakistan", + "city_id": 85378, + "city_name": "Chak Azam Saffo", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.75202", + "longitude": "73.02834" + }, + { + "country_name": "Pakistan", + "city_id": 85380, + "city_name": "Chak Jhumra", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.56808", + "longitude": "73.18317" + }, + { + "country_name": "Pakistan", + "city_id": 85381, + "city_name": "Chak One Hundred Twenty Nine Left", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.42919", + "longitude": "73.04522" + }, + { + "country_name": "Pakistan", + "city_id": 85382, + "city_name": "Chak Thirty-one -Eleven Left", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.42388", + "longitude": "72.69737" + }, + { + "country_name": "Pakistan", + "city_id": 85383, + "city_name": "Chak Two Hundred Forty-Nine TDA", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.17772", + "longitude": "71.2048" + }, + { + "country_name": "Pakistan", + "city_id": 85384, + "city_name": "Chakwal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.93286", + "longitude": "72.85394" + }, + { + "country_name": "Pakistan", + "city_id": 85388, + "city_name": "Chawinda", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.34434", + "longitude": "74.70507" + }, + { + "country_name": "Pakistan", + "city_id": 85392, + "city_name": "Chichawatni", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.5301", + "longitude": "72.69155" + }, + { + "country_name": "Pakistan", + "city_id": 85393, + "city_name": "Chiniot", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.72091", + "longitude": "72.97836" + }, + { + "country_name": "Pakistan", + "city_id": 85394, + "city_name": "Chishtian", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.79713", + "longitude": "72.85772" + }, + { + "country_name": "Pakistan", + "city_id": 85396, + "city_name": "Choa Saidanshah", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.71962", + "longitude": "72.98625" + }, + { + "country_name": "Pakistan", + "city_id": 143765, + "city_name": "Chuhar Kana", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.75", + "longitude": "73.8" + }, + { + "country_name": "Pakistan", + "city_id": 85400, + "city_name": "Chunian", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.96621", + "longitude": "73.97908" + }, + { + "country_name": "Pakistan", + "city_id": 85404, + "city_name": "Daira Din Panah", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.57053", + "longitude": "70.93722" + }, + { + "country_name": "Pakistan", + "city_id": 85405, + "city_name": "Dajal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.55769", + "longitude": "70.37614" + }, + { + "country_name": "Pakistan", + "city_id": 85407, + "city_name": "Dandot RS", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.64167", + "longitude": "72.975" + }, + { + "country_name": "Pakistan", + "city_id": 85409, + "city_name": "Darya Khan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.78447", + "longitude": "71.10197" + }, + { + "country_name": "Pakistan", + "city_id": 85411, + "city_name": "Daska", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.32422", + "longitude": "74.35039" + }, + { + "country_name": "Pakistan", + "city_id": 143767, + "city_name": "Daud Khel", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.87498", + "longitude": "71.57013" + }, + { + "country_name": "Pakistan", + "city_id": 85414, + "city_name": "Daultala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.19282", + "longitude": "73.14099" + }, + { + "country_name": "Pakistan", + "city_id": 85418, + "city_name": "Dera Ghazi Khan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.04587", + "longitude": "70.64029" + }, + { + "country_name": "Pakistan", + "city_id": 85421, + "city_name": "Dhanot", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.57991", + "longitude": "71.75213" + }, + { + "country_name": "Pakistan", + "city_id": 85422, + "city_name": "Dhaunkal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.40613", + "longitude": "74.13706" + }, + { + "country_name": "Pakistan", + "city_id": 143766, + "city_name": "Dhok Awan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.84452", + "longitude": "72.52357" + }, + { + "country_name": "Pakistan", + "city_id": 85425, + "city_name": "Dijkot", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.21735", + "longitude": "72.99621" + }, + { + "country_name": "Pakistan", + "city_id": 85426, + "city_name": "Dinan Bashnoian Wala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.76584", + "longitude": "73.26557" + }, + { + "country_name": "Pakistan", + "city_id": 85427, + "city_name": "Dinga", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.64101", + "longitude": "73.72039" + }, + { + "country_name": "Pakistan", + "city_id": 85428, + "city_name": "Dipalpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.66984", + "longitude": "73.65306" + }, + { + "country_name": "Pakistan", + "city_id": 85433, + "city_name": "Dullewala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.83439", + "longitude": "71.43639" + }, + { + "country_name": "Pakistan", + "city_id": 85434, + "city_name": "Dunga Bunga", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.74975", + "longitude": "73.24294" + }, + { + "country_name": "Pakistan", + "city_id": 85435, + "city_name": "Dunyapur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.80275", + "longitude": "71.74344" + }, + { + "country_name": "Pakistan", + "city_id": 85436, + "city_name": "Eminabad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.04237", + "longitude": "74.25996" + }, + { + "country_name": "Pakistan", + "city_id": 85437, + "city_name": "Faisalabad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.41554", + "longitude": "73.08969" + }, + { + "country_name": "Pakistan", + "city_id": 85438, + "city_name": "Faqirwali", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.46799", + "longitude": "73.03489" + }, + { + "country_name": "Pakistan", + "city_id": 85439, + "city_name": "Faruka", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.88642", + "longitude": "72.41362" + }, + { + "country_name": "Pakistan", + "city_id": 85440, + "city_name": "Fazilpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.17629", + "longitude": "75.06583" + }, + { + "country_name": "Pakistan", + "city_id": 143768, + "city_name": "Ferozewala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.3", + "longitude": "70.43333333" + }, + { + "country_name": "Pakistan", + "city_id": 85441, + "city_name": "Fort Abbas", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.19344", + "longitude": "72.85525" + }, + { + "country_name": "Pakistan", + "city_id": 85444, + "city_name": "Garh Maharaja", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.83383", + "longitude": "71.90491" + }, + { + "country_name": "Pakistan", + "city_id": 85451, + "city_name": "Gojra", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.14926", + "longitude": "72.68323" + }, + { + "country_name": "Pakistan", + "city_id": 85455, + "city_name": "Gujar Khan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.25411", + "longitude": "73.30433" + }, + { + "country_name": "Pakistan", + "city_id": 85456, + "city_name": "Gujranwala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.15567", + "longitude": "74.18705" + }, + { + "country_name": "Pakistan", + "city_id": 143769, + "city_name": "Gujranwala Division", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.45", + "longitude": "74.13333" + }, + { + "country_name": "Pakistan", + "city_id": 85457, + "city_name": "Gujrat", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.5742", + "longitude": "74.07542" + }, + { + "country_name": "Pakistan", + "city_id": 85460, + "city_name": "Hadali", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.64043", + "longitude": "74.56898" + }, + { + "country_name": "Pakistan", + "city_id": 85461, + "city_name": "Hafizabad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.07095", + "longitude": "73.68802" + }, + { + "country_name": "Pakistan", + "city_id": 85466, + "city_name": "Harnoli", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.27871", + "longitude": "71.55429" + }, + { + "country_name": "Pakistan", + "city_id": 85467, + "city_name": "Harunabad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.61206", + "longitude": "73.13802" + }, + { + "country_name": "Pakistan", + "city_id": 143770, + "city_name": "Hasan Abdal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.81948611", + "longitude": "72.68902778" + }, + { + "country_name": "Pakistan", + "city_id": 85468, + "city_name": "Hasilpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.69221", + "longitude": "72.54566" + }, + { + "country_name": "Pakistan", + "city_id": 85469, + "city_name": "Haveli Lakha", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.45097", + "longitude": "73.69371" + }, + { + "country_name": "Pakistan", + "city_id": 85471, + "city_name": "Hazro", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.9099", + "longitude": "72.49179" + }, + { + "country_name": "Pakistan", + "city_id": 85473, + "city_name": "Hujra Shah Muqeem", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.74168", + "longitude": "73.82327" + }, + { + "country_name": "Pakistan", + "city_id": 85478, + "city_name": "Jahanian Shah", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.80541", + "longitude": "72.2774" + }, + { + "country_name": "Pakistan", + "city_id": 85479, + "city_name": "Jalalpur Jattan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.64118", + "longitude": "74.20561" + }, + { + "country_name": "Pakistan", + "city_id": 85480, + "city_name": "Jalalpur Pirwala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.5051", + "longitude": "71.22202" + }, + { + "country_name": "Pakistan", + "city_id": 85481, + "city_name": "Jampur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.64235", + "longitude": "70.59518" + }, + { + "country_name": "Pakistan", + "city_id": 85483, + "city_name": "Jand", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.43304", + "longitude": "72.01877" + }, + { + "country_name": "Pakistan", + "city_id": 85484, + "city_name": "Jandiala Sher Khan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.82098", + "longitude": "73.91815" + }, + { + "country_name": "Pakistan", + "city_id": 85485, + "city_name": "Jaranwala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.3332", + "longitude": "73.41868" + }, + { + "country_name": "Pakistan", + "city_id": 85487, + "city_name": "Jatoi Shimali", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.51827", + "longitude": "70.84474" + }, + { + "country_name": "Pakistan", + "city_id": 85488, + "city_name": "Jauharabad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.29016", + "longitude": "72.28182" + }, + { + "country_name": "Pakistan", + "city_id": 85490, + "city_name": "Jhang", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.30568", + "longitude": "72.32594" + }, + { + "country_name": "Pakistan", + "city_id": 85491, + "city_name": "Jhang Sadar", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.26981", + "longitude": "72.31687" + }, + { + "country_name": "Pakistan", + "city_id": 85492, + "city_name": "Jhawarian", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.36192", + "longitude": "72.62275" + }, + { + "country_name": "Pakistan", + "city_id": 85493, + "city_name": "Jhelum", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.93448", + "longitude": "73.73102" + }, + { + "country_name": "Pakistan", + "city_id": 85499, + "city_name": "Kabirwala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.40472", + "longitude": "71.86269" + }, + { + "country_name": "Pakistan", + "city_id": 85501, + "city_name": "Kahna Nau", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.36709", + "longitude": "74.36899" + }, + { + "country_name": "Pakistan", + "city_id": 85503, + "city_name": "Kahuta", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.59183", + "longitude": "73.38736" + }, + { + "country_name": "Pakistan", + "city_id": 85505, + "city_name": "Kalabagh", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.96164", + "longitude": "71.54638" + }, + { + "country_name": "Pakistan", + "city_id": 85506, + "city_name": "Kalaswala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.20081", + "longitude": "74.64858" + }, + { + "country_name": "Pakistan", + "city_id": 85508, + "city_name": "Kaleke Mandi", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.97597", + "longitude": "73.59999" + }, + { + "country_name": "Pakistan", + "city_id": 85509, + "city_name": "Kallar Kahar", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.77998", + "longitude": "72.69793" + }, + { + "country_name": "Pakistan", + "city_id": 85510, + "city_name": "Kalur Kot", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.15512", + "longitude": "71.26631" + }, + { + "country_name": "Pakistan", + "city_id": 85512, + "city_name": "Kamalia", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.72708", + "longitude": "72.64607" + }, + { + "country_name": "Pakistan", + "city_id": 85513, + "city_name": "Kamar Mushani", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.84318", + "longitude": "71.36192" + }, + { + "country_name": "Pakistan", + "city_id": 85515, + "city_name": "Kamoke", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.97526", + "longitude": "74.22304" + }, + { + "country_name": "Pakistan", + "city_id": 85516, + "city_name": "Kamra", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.74698", + "longitude": "73.51229" + }, + { + "country_name": "Pakistan", + "city_id": 85520, + "city_name": "Kanganpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.76468", + "longitude": "74.12286" + }, + { + "country_name": "Pakistan", + "city_id": 85525, + "city_name": "Karor", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.2246", + "longitude": "70.95153" + }, + { + "country_name": "Pakistan", + "city_id": 85527, + "city_name": "Kasur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.11866", + "longitude": "74.45025" + }, + { + "country_name": "Pakistan", + "city_id": 85528, + "city_name": "Keshupur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.26", + "longitude": "72.5" + }, + { + "country_name": "Pakistan", + "city_id": 85535, + "city_name": "Khairpur Tamiwali", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.58139", + "longitude": "72.23804" + }, + { + "country_name": "Pakistan", + "city_id": 85537, + "city_name": "Khandowa", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.74255", + "longitude": "72.73478" + }, + { + "country_name": "Pakistan", + "city_id": 85538, + "city_name": "Khanewal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.30173", + "longitude": "71.93212" + }, + { + "country_name": "Pakistan", + "city_id": 85539, + "city_name": "Khanga Dogran", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.83294", + "longitude": "73.62213" + }, + { + "country_name": "Pakistan", + "city_id": 85540, + "city_name": "Khangarh", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.91446", + "longitude": "71.16067" + }, + { + "country_name": "Pakistan", + "city_id": 85541, + "city_name": "Khanpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "28.64739", + "longitude": "70.65694" + }, + { + "country_name": "Pakistan", + "city_id": 85544, + "city_name": "Kharian", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.81612", + "longitude": "73.88697" + }, + { + "country_name": "Pakistan", + "city_id": 85545, + "city_name": "Khewra", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.6491", + "longitude": "73.01059" + }, + { + "country_name": "Pakistan", + "city_id": 85546, + "city_name": "Khurrianwala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.49936", + "longitude": "73.26763" + }, + { + "country_name": "Pakistan", + "city_id": 85547, + "city_name": "Khushab", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.29667", + "longitude": "72.3525" + }, + { + "country_name": "Pakistan", + "city_id": 143771, + "city_name": "Kohror Pakka", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.62382", + "longitude": "71.91673" + }, + { + "country_name": "Pakistan", + "city_id": 85553, + "city_name": "Kot Addu Tehsil", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.46907", + "longitude": "70.96699" + }, + { + "country_name": "Pakistan", + "city_id": 85555, + "city_name": "Kot Ghulam Muhammad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.33311", + "longitude": "74.54694" + }, + { + "country_name": "Pakistan", + "city_id": 85557, + "city_name": "Kot Mumin", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.18843", + "longitude": "73.02987" + }, + { + "country_name": "Pakistan", + "city_id": 85558, + "city_name": "Kot Radha Kishan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.17068", + "longitude": "74.10126" + }, + { + "country_name": "Pakistan", + "city_id": 85559, + "city_name": "Kot Rajkour", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.41208", + "longitude": "74.62855" + }, + { + "country_name": "Pakistan", + "city_id": 85560, + "city_name": "Kot Samaba", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "28.55207", + "longitude": "70.46837" + }, + { + "country_name": "Pakistan", + "city_id": 85561, + "city_name": "Kot Sultan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.7737", + "longitude": "70.93125" + }, + { + "country_name": "Pakistan", + "city_id": 85564, + "city_name": "Kotli Loharan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.58893", + "longitude": "74.49466" + }, + { + "country_name": "Pakistan", + "city_id": 85567, + "city_name": "Kundian", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.45775", + "longitude": "71.47892" + }, + { + "country_name": "Pakistan", + "city_id": 85568, + "city_name": "Kunjah", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.52982", + "longitude": "73.97486" + }, + { + "country_name": "Pakistan", + "city_id": 85571, + "city_name": "Ladhewala Waraich", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.15692", + "longitude": "74.11564" + }, + { + "country_name": "Pakistan", + "city_id": 85572, + "city_name": "Lahore", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.558", + "longitude": "74.35071" + }, + { + "country_name": "Pakistan", + "city_id": 85575, + "city_name": "Lala Musa", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.70138", + "longitude": "73.95746" + }, + { + "country_name": "Pakistan", + "city_id": 85576, + "city_name": "Lalian", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.82462", + "longitude": "72.80116" + }, + { + "country_name": "Pakistan", + "city_id": 85580, + "city_name": "Layyah", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.96128", + "longitude": "70.93904" + }, + { + "country_name": "Pakistan", + "city_id": 85581, + "city_name": "Layyah District", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.968", + "longitude": "70.943" + }, + { + "country_name": "Pakistan", + "city_id": 85582, + "city_name": "Liliani", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.20393", + "longitude": "72.9512" + }, + { + "country_name": "Pakistan", + "city_id": 85583, + "city_name": "Lodhran", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.5339", + "longitude": "71.63244" + }, + { + "country_name": "Pakistan", + "city_id": 85588, + "city_name": "Mailsi", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.80123", + "longitude": "72.17398" + }, + { + "country_name": "Pakistan", + "city_id": 85589, + "city_name": "Malakwal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.55449", + "longitude": "73.21274" + }, + { + "country_name": "Pakistan", + "city_id": 85590, + "city_name": "Malakwal City", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.55492", + "longitude": "73.2122" + }, + { + "country_name": "Pakistan", + "city_id": 85592, + "city_name": "Mamu Kanjan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.83044", + "longitude": "72.79943" + }, + { + "country_name": "Pakistan", + "city_id": 85593, + "city_name": "Mananwala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.58803", + "longitude": "73.68927" + }, + { + "country_name": "Pakistan", + "city_id": 85594, + "city_name": "Mandi Bahauddin", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.58704", + "longitude": "73.49123" + }, + { + "country_name": "Pakistan", + "city_id": 143772, + "city_name": "Mandi Bahauddin District", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.58333333", + "longitude": "73.5" + }, + { + "country_name": "Pakistan", + "city_id": 85595, + "city_name": "Mangla", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.89306", + "longitude": "72.38167" + }, + { + "country_name": "Pakistan", + "city_id": 85596, + "city_name": "Mankera", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.38771", + "longitude": "71.44047" + }, + { + "country_name": "Pakistan", + "city_id": 85604, + "city_name": "Mehmand Chak", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.78518", + "longitude": "73.82306" + }, + { + "country_name": "Pakistan", + "city_id": 85606, + "city_name": "Mian Channun", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.44067", + "longitude": "72.35679" + }, + { + "country_name": "Pakistan", + "city_id": 85607, + "city_name": "Mianke Mor", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.2024", + "longitude": "73.94857" + }, + { + "country_name": "Pakistan", + "city_id": 85608, + "city_name": "Mianwali", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.57756", + "longitude": "71.52847" + }, + { + "country_name": "Pakistan", + "city_id": 85609, + "city_name": "Minchinabad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.16356", + "longitude": "73.56858" + }, + { + "country_name": "Pakistan", + "city_id": 85619, + "city_name": "Mitha Tiwana", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.2454", + "longitude": "72.10615" + }, + { + "country_name": "Pakistan", + "city_id": 85622, + "city_name": "Moza Shahwala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.80563", + "longitude": "70.84911" + }, + { + "country_name": "Pakistan", + "city_id": 85623, + "city_name": "Multan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.19679", + "longitude": "71.47824" + }, + { + "country_name": "Pakistan", + "city_id": 143773, + "city_name": "Multan District", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.08333333", + "longitude": "71.66666667" + }, + { + "country_name": "Pakistan", + "city_id": 85624, + "city_name": "Muridke", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.80258", + "longitude": "74.25772" + }, + { + "country_name": "Pakistan", + "city_id": 85625, + "city_name": "Murree", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.90836", + "longitude": "73.3903" + }, + { + "country_name": "Pakistan", + "city_id": 85626, + "city_name": "Mustafabad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.89222", + "longitude": "73.49889" + }, + { + "country_name": "Pakistan", + "city_id": 85627, + "city_name": "Muzaffargarh", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.07258", + "longitude": "71.19379" + }, + { + "country_name": "Pakistan", + "city_id": 85631, + "city_name": "Nankana Sahib", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.4501", + "longitude": "73.70653" + }, + { + "country_name": "Pakistan", + "city_id": 85632, + "city_name": "Narang Mandi", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.90376", + "longitude": "74.51587" + }, + { + "country_name": "Pakistan", + "city_id": 85633, + "city_name": "Narowal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.10197", + "longitude": "74.87303" + }, + { + "country_name": "Pakistan", + "city_id": 85638, + "city_name": "Naushahra Virkan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.96258", + "longitude": "73.97117" + }, + { + "country_name": "Pakistan", + "city_id": 85641, + "city_name": "Nazir Town", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.30614", + "longitude": "73.4833" + }, + { + "country_name": "Pakistan", + "city_id": 85650, + "city_name": "Okara", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.81029", + "longitude": "73.45155" + }, + { + "country_name": "Pakistan", + "city_id": 143774, + "city_name": "Pakki Shagwanwali", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.79033", + "longitude": "70.87139" + }, + { + "country_name": "Pakistan", + "city_id": 85655, + "city_name": "Pakpattan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.34314", + "longitude": "73.38944" + }, + { + "country_name": "Pakistan", + "city_id": 85659, + "city_name": "Pasrur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.26286", + "longitude": "74.66327" + }, + { + "country_name": "Pakistan", + "city_id": 85660, + "city_name": "Pattoki", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.02021", + "longitude": "73.85333" + }, + { + "country_name": "Pakistan", + "city_id": 85662, + "city_name": "Phalia", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.43104", + "longitude": "73.579" + }, + { + "country_name": "Pakistan", + "city_id": 85663, + "city_name": "Pind Dadan Khan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.58662", + "longitude": "73.04456" + }, + { + "country_name": "Pakistan", + "city_id": 85664, + "city_name": "Pindi Bhattian", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.89844", + "longitude": "73.27339" + }, + { + "country_name": "Pakistan", + "city_id": 85665, + "city_name": "Pindi Gheb", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.24095", + "longitude": "72.2648" + }, + { + "country_name": "Pakistan", + "city_id": 85667, + "city_name": "Pir Mahal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.76663", + "longitude": "72.43455" + }, + { + "country_name": "Pakistan", + "city_id": 85670, + "city_name": "Qadirpur Ran", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.29184", + "longitude": "71.67164" + }, + { + "country_name": "Pakistan", + "city_id": 143775, + "city_name": "Qila Didar Singh", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.8", + "longitude": "74.1" + }, + { + "country_name": "Pakistan", + "city_id": 85389, + "city_name": "Rabwah", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.75511", + "longitude": "72.91403" + }, + { + "country_name": "Pakistan", + "city_id": 85674, + "city_name": "Rahim Yar Khan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "28.41987", + "longitude": "70.30345" + }, + { + "country_name": "Pakistan", + "city_id": 143776, + "city_name": "Rahimyar Khan District", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "28.4602", + "longitude": "70.52837" + }, + { + "country_name": "Pakistan", + "city_id": 85675, + "city_name": "Raiwind", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.24895", + "longitude": "74.21534" + }, + { + "country_name": "Pakistan", + "city_id": 85676, + "city_name": "Raja Jang", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.22078", + "longitude": "74.25483" + }, + { + "country_name": "Pakistan", + "city_id": 85677, + "city_name": "Rajanpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.10408", + "longitude": "70.32969" + }, + { + "country_name": "Pakistan", + "city_id": 85680, + "city_name": "Rasulnagar", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.32794", + "longitude": "73.7804" + }, + { + "country_name": "Pakistan", + "city_id": 85683, + "city_name": "Rawalpindi", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.59733", + "longitude": "73.0479" + }, + { + "country_name": "Pakistan", + "city_id": 85684, + "city_name": "Rawalpindi District", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.42987", + "longitude": "73.23092" + }, + { + "country_name": "Pakistan", + "city_id": 85685, + "city_name": "Renala Khurd", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.87878", + "longitude": "73.59857" + }, + { + "country_name": "Pakistan", + "city_id": 85688, + "city_name": "Rojhan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "28.68735", + "longitude": "69.9535" + }, + { + "country_name": "Pakistan", + "city_id": 85690, + "city_name": "Sadiqabad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "28.3091", + "longitude": "70.12652" + }, + { + "country_name": "Pakistan", + "city_id": 85691, + "city_name": "Sahiwal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.66595", + "longitude": "73.10186" + }, + { + "country_name": "Pakistan", + "city_id": 85694, + "city_name": "Sambrial", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.47835", + "longitude": "74.35338" + }, + { + "country_name": "Pakistan", + "city_id": 85696, + "city_name": "Sangla Hill", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.71667", + "longitude": "73.38333" + }, + { + "country_name": "Pakistan", + "city_id": 85697, + "city_name": "Sanjwal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.76105", + "longitude": "72.43315" + }, + { + "country_name": "Pakistan", + "city_id": 85699, + "city_name": "Sarai Alamgir", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.90495", + "longitude": "73.75518" + }, + { + "country_name": "Pakistan", + "city_id": 85701, + "city_name": "Sarai Sidhu", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.59476", + "longitude": "71.9699" + }, + { + "country_name": "Pakistan", + "city_id": 85702, + "city_name": "Sargodha", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.08586", + "longitude": "72.67418" + }, + { + "country_name": "Pakistan", + "city_id": 143777, + "city_name": "Shahkot Tehsil", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.56166667", + "longitude": "73.4875" + }, + { + "country_name": "Pakistan", + "city_id": 85709, + "city_name": "Shahpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.2682", + "longitude": "72.46884" + }, + { + "country_name": "Pakistan", + "city_id": 85711, + "city_name": "Shahr Sultan", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.57517", + "longitude": "71.02209" + }, + { + "country_name": "Pakistan", + "city_id": 85712, + "city_name": "Shakargarh", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.26361", + "longitude": "75.16008" + }, + { + "country_name": "Pakistan", + "city_id": 85713, + "city_name": "Sharqpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.46116", + "longitude": "74.10091" + }, + { + "country_name": "Pakistan", + "city_id": 85714, + "city_name": "Sheikhupura", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.71287", + "longitude": "73.98556" + }, + { + "country_name": "Pakistan", + "city_id": 85708, + "city_name": "Shorkot", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.5", + "longitude": "72.4" + }, + { + "country_name": "Pakistan", + "city_id": 85719, + "city_name": "Shujaabad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.88092", + "longitude": "71.29344" + }, + { + "country_name": "Pakistan", + "city_id": 85720, + "city_name": "Sialkot", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.49268", + "longitude": "74.53134" + }, + { + "country_name": "Pakistan", + "city_id": 85722, + "city_name": "Sillanwali", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.82539", + "longitude": "72.54064" + }, + { + "country_name": "Pakistan", + "city_id": 85726, + "city_name": "Sodhra", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.46211", + "longitude": "74.18207" + }, + { + "country_name": "Pakistan", + "city_id": 85729, + "city_name": "Sukheke Mandi", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.86541", + "longitude": "73.50875" + }, + { + "country_name": "Pakistan", + "city_id": 85732, + "city_name": "Surkhpur", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.71816", + "longitude": "74.44773" + }, + { + "country_name": "Pakistan", + "city_id": 85735, + "city_name": "Talagang", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.92766", + "longitude": "72.41594" + }, + { + "country_name": "Pakistan", + "city_id": 85736, + "city_name": "Talamba", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.52693", + "longitude": "72.24079" + }, + { + "country_name": "Pakistan", + "city_id": 85738, + "city_name": "Tandlianwala", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.03359", + "longitude": "73.13268" + }, + { + "country_name": "Pakistan", + "city_id": 85748, + "city_name": "Taunsa", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.70358", + "longitude": "70.65054" + }, + { + "country_name": "Pakistan", + "city_id": 85753, + "city_name": "Toba Tek Singh", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.97127", + "longitude": "72.48275" + }, + { + "country_name": "Pakistan", + "city_id": 143778, + "city_name": "Umerkot", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "25.36138889", + "longitude": "69.73611111" + }, + { + "country_name": "Pakistan", + "city_id": 85763, + "city_name": "Vihari", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "30.0445", + "longitude": "72.3556" + }, + { + "country_name": "Pakistan", + "city_id": 143779, + "city_name": "Wah", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "33.81", + "longitude": "72.70972222" + }, + { + "country_name": "Pakistan", + "city_id": 143780, + "city_name": "Warburton", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31.55", + "longitude": "73.8333" + }, + { + "country_name": "Pakistan", + "city_id": 85766, + "city_name": "Wazirabad", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.44324", + "longitude": "74.12" + }, + { + "country_name": "Pakistan", + "city_id": 143781, + "city_name": "West Punjab", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "31", + "longitude": "72" + }, + { + "country_name": "Pakistan", + "city_id": 85767, + "city_name": "Yazman", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "29.12122", + "longitude": "71.74459" + }, + { + "country_name": "Pakistan", + "city_id": 85768, + "city_name": "Zafarwal", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "32.34464", + "longitude": "74.8999" + }, + { + "country_name": "Pakistan", + "city_id": 85769, + "city_name": "Zahir Pir", + "state_id": 3176, + "state_name": "Punjab", + "latitude": "28.81284", + "longitude": "70.52341" + }, + { + "country_name": "Pakistan", + "city_id": 85330, + "city_name": "Adilpur", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.93677", + "longitude": "69.31941" + }, + { + "country_name": "Pakistan", + "city_id": 85344, + "city_name": "Badin", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.656", + "longitude": "68.837" + }, + { + "country_name": "Pakistan", + "city_id": 85346, + "city_name": "Bagarji", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.75431", + "longitude": "68.75866" + }, + { + "country_name": "Pakistan", + "city_id": 85350, + "city_name": "Bandhi", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.58761", + "longitude": "68.30215" + }, + { + "country_name": "Pakistan", + "city_id": 85361, + "city_name": "Berani", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.78497", + "longitude": "68.80754" + }, + { + "country_name": "Pakistan", + "city_id": 85365, + "city_name": "Bhan", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.55831", + "longitude": "67.72139" + }, + { + "country_name": "Pakistan", + "city_id": 85369, + "city_name": "Bhiria", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.91041", + "longitude": "68.19466" + }, + { + "country_name": "Pakistan", + "city_id": 85370, + "city_name": "Bhit Shah", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.80565", + "longitude": "68.49143" + }, + { + "country_name": "Pakistan", + "city_id": 85372, + "city_name": "Bozdar Wada", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.183", + "longitude": "68.6358" + }, + { + "country_name": "Pakistan", + "city_id": 85373, + "city_name": "Bulri", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.86667", + "longitude": "68.33333" + }, + { + "country_name": "Pakistan", + "city_id": 85377, + "city_name": "Chak", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.85838", + "longitude": "68.83378" + }, + { + "country_name": "Pakistan", + "city_id": 85386, + "city_name": "Chamber", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.29362", + "longitude": "68.81176" + }, + { + "country_name": "Pakistan", + "city_id": 85391, + "city_name": "Chhor", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.5126", + "longitude": "69.78437" + }, + { + "country_name": "Pakistan", + "city_id": 85399, + "city_name": "Chuhar Jamali", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.3944", + "longitude": "67.99298" + }, + { + "country_name": "Pakistan", + "city_id": 85403, + "city_name": "Dadu", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.73033", + "longitude": "67.7769" + }, + { + "country_name": "Pakistan", + "city_id": 85408, + "city_name": "Daromehar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.79382", + "longitude": "68.17978" + }, + { + "country_name": "Pakistan", + "city_id": 85410, + "city_name": "Darya Khan Marri", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.67765", + "longitude": "68.28666" + }, + { + "country_name": "Pakistan", + "city_id": 85413, + "city_name": "Daulatpur", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.50158", + "longitude": "67.97079" + }, + { + "country_name": "Pakistan", + "city_id": 85415, + "city_name": "Daur", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.45528", + "longitude": "68.31835" + }, + { + "country_name": "Pakistan", + "city_id": 85423, + "city_name": "Dhoro Naro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.50484", + "longitude": "69.5709" + }, + { + "country_name": "Pakistan", + "city_id": 85424, + "city_name": "Digri", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.15657", + "longitude": "69.11098" + }, + { + "country_name": "Pakistan", + "city_id": 85429, + "city_name": "Diplo", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.46688", + "longitude": "69.58114" + }, + { + "country_name": "Pakistan", + "city_id": 85431, + "city_name": "Dokri", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.37421", + "longitude": "68.09715" + }, + { + "country_name": "Pakistan", + "city_id": 85443, + "city_name": "Gambat", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.3517", + "longitude": "68.5215" + }, + { + "country_name": "Pakistan", + "city_id": 85446, + "city_name": "Garhiyasin", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.90631", + "longitude": "68.5121" + }, + { + "country_name": "Pakistan", + "city_id": 85447, + "city_name": "Gharo", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.74182", + "longitude": "67.58534" + }, + { + "country_name": "Pakistan", + "city_id": 85448, + "city_name": "Ghauspur", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "28.13882", + "longitude": "69.08245" + }, + { + "country_name": "Pakistan", + "city_id": 85449, + "city_name": "Ghotki", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "28.00437", + "longitude": "69.31569" + }, + { + "country_name": "Pakistan", + "city_id": 85452, + "city_name": "Goth Garelo", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.43521", + "longitude": "68.07572" + }, + { + "country_name": "Pakistan", + "city_id": 85453, + "city_name": "Goth Phulji", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.88099", + "longitude": "67.68239" + }, + { + "country_name": "Pakistan", + "city_id": 85454, + "city_name": "Goth Radhan", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.19846", + "longitude": "67.95348" + }, + { + "country_name": "Pakistan", + "city_id": 85462, + "city_name": "Hala", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.81459", + "longitude": "68.42198" + }, + { + "country_name": "Pakistan", + "city_id": 85472, + "city_name": "Hingorja", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.21088", + "longitude": "68.41598" + }, + { + "country_name": "Pakistan", + "city_id": 85474, + "city_name": "Hyderabad", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.39242", + "longitude": "68.37366" + }, + { + "country_name": "Pakistan", + "city_id": 85476, + "city_name": "Islamkot", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.69904", + "longitude": "70.17982" + }, + { + "country_name": "Pakistan", + "city_id": 85477, + "city_name": "Jacobabad", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "28.28187", + "longitude": "68.43761" + }, + { + "country_name": "Pakistan", + "city_id": 85498, + "city_name": "J\u0101m S\u0101hib", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.29583", + "longitude": "68.62917" + }, + { + "country_name": "Pakistan", + "city_id": 85482, + "city_name": "Jamshoro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.43608", + "longitude": "68.28017" + }, + { + "country_name": "Pakistan", + "city_id": 85486, + "city_name": "Jati", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.35492", + "longitude": "68.26732" + }, + { + "country_name": "Pakistan", + "city_id": 85494, + "city_name": "Jhol", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.95533", + "longitude": "68.88871" + }, + { + "country_name": "Pakistan", + "city_id": 85496, + "city_name": "Johi", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.69225", + "longitude": "67.61431" + }, + { + "country_name": "Pakistan", + "city_id": 85500, + "city_name": "Kadhan", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.48041", + "longitude": "68.98551" + }, + { + "country_name": "Pakistan", + "city_id": 85514, + "city_name": "Kambar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.58753", + "longitude": "68.00066" + }, + { + "country_name": "Pakistan", + "city_id": 85517, + "city_name": "Kandhkot", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "28.24574", + "longitude": "69.17974" + }, + { + "country_name": "Pakistan", + "city_id": 85518, + "city_name": "Kandiari", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.9155", + "longitude": "68.52193" + }, + { + "country_name": "Pakistan", + "city_id": 85519, + "city_name": "Kandiaro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.05918", + "longitude": "68.21022" + }, + { + "country_name": "Pakistan", + "city_id": 85521, + "city_name": "Karachi", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.8608", + "longitude": "67.0104" + }, + { + "country_name": "Pakistan", + "city_id": 85523, + "city_name": "Karaundi", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.89709", + "longitude": "68.40643" + }, + { + "country_name": "Pakistan", + "city_id": 85524, + "city_name": "Kario Ghanwar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.80817", + "longitude": "68.60483" + }, + { + "country_name": "Pakistan", + "city_id": 85526, + "city_name": "Kashmor", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "28.4326", + "longitude": "69.58364" + }, + { + "country_name": "Pakistan", + "city_id": 85529, + "city_name": "Keti Bandar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.14422", + "longitude": "67.45094" + }, + { + "country_name": "Pakistan", + "city_id": 85531, + "city_name": "Khadro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.14713", + "longitude": "68.71777" + }, + { + "country_name": "Pakistan", + "city_id": 85532, + "city_name": "Khairpur", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "28.06437", + "longitude": "69.70363" + }, + { + "country_name": "Pakistan", + "city_id": 85533, + "city_name": "Khairpur Mir\u2019s", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.52948", + "longitude": "68.75915" + }, + { + "country_name": "Pakistan", + "city_id": 85534, + "city_name": "Khairpur Nathan Shah", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.09064", + "longitude": "67.73489" + }, + { + "country_name": "Pakistan", + "city_id": 85542, + "city_name": "Khanpur Mahar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.84088", + "longitude": "69.41302" + }, + { + "country_name": "Pakistan", + "city_id": 85554, + "city_name": "Kot Diji", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.34156", + "longitude": "68.70821" + }, + { + "country_name": "Pakistan", + "city_id": 85565, + "city_name": "Kotri", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.36566", + "longitude": "68.30831" + }, + { + "country_name": "Pakistan", + "city_id": 85569, + "city_name": "Kunri", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.17874", + "longitude": "69.56572" + }, + { + "country_name": "Pakistan", + "city_id": 85573, + "city_name": "Lakhi", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.84884", + "longitude": "68.69972" + }, + { + "country_name": "Pakistan", + "city_id": 85578, + "city_name": "Larkana", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.55898", + "longitude": "68.21204" + }, + { + "country_name": "Pakistan", + "city_id": 85587, + "city_name": "Madeji", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.75314", + "longitude": "68.45166" + }, + { + "country_name": "Pakistan", + "city_id": 85591, + "city_name": "Malir Cantonment", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.94343", + "longitude": "67.20591" + }, + { + "country_name": "Pakistan", + "city_id": 85601, + "city_name": "Matiari", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.59709", + "longitude": "68.4467" + }, + { + "country_name": "Pakistan", + "city_id": 85602, + "city_name": "Matli", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.0429", + "longitude": "68.65591" + }, + { + "country_name": "Pakistan", + "city_id": 85603, + "city_name": "Mehar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.18027", + "longitude": "67.82051" + }, + { + "country_name": "Pakistan", + "city_id": 85612, + "city_name": "Miro Khan", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.75985", + "longitude": "68.09195" + }, + { + "country_name": "Pakistan", + "city_id": 85613, + "city_name": "Mirpur Bhtoro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.72852", + "longitude": "68.2601" + }, + { + "country_name": "Pakistan", + "city_id": 85615, + "city_name": "Mirpur Khas", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.5276", + "longitude": "69.01255" + }, + { + "country_name": "Pakistan", + "city_id": 85616, + "city_name": "Mirpur Mathelo", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "28.02136", + "longitude": "69.54914" + }, + { + "country_name": "Pakistan", + "city_id": 85617, + "city_name": "Mirpur Sakro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.54692", + "longitude": "67.62797" + }, + { + "country_name": "Pakistan", + "city_id": 85618, + "city_name": "Mirwah Gorchani", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.30981", + "longitude": "69.05019" + }, + { + "country_name": "Pakistan", + "city_id": 85620, + "city_name": "Mithi", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.73701", + "longitude": "69.79707" + }, + { + "country_name": "Pakistan", + "city_id": 85621, + "city_name": "Moro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.66317", + "longitude": "68.00016" + }, + { + "country_name": "Pakistan", + "city_id": 85630, + "city_name": "Nabisar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.06717", + "longitude": "69.6434" + }, + { + "country_name": "Pakistan", + "city_id": 85634, + "city_name": "Nasirabad", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.38137", + "longitude": "67.91644" + }, + { + "country_name": "Pakistan", + "city_id": 85636, + "city_name": "Naudero", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.66684", + "longitude": "68.3609" + }, + { + "country_name": "Pakistan", + "city_id": 85637, + "city_name": "Naukot", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.85822", + "longitude": "69.40153" + }, + { + "country_name": "Pakistan", + "city_id": 85639, + "city_name": "Naushahro Firoz", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.8401", + "longitude": "68.12265" + }, + { + "country_name": "Pakistan", + "city_id": 85640, + "city_name": "Nawabshah", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.23939", + "longitude": "68.40369" + }, + { + "country_name": "Pakistan", + "city_id": 85642, + "city_name": "New B\u0101d\u0101h", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.34167", + "longitude": "68.03194" + }, + { + "country_name": "Pakistan", + "city_id": 85653, + "city_name": "Pad Idan", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.77455", + "longitude": "68.30094" + }, + { + "country_name": "Pakistan", + "city_id": 85657, + "city_name": "Pano Aqil", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.85619", + "longitude": "69.11111" + }, + { + "country_name": "Pakistan", + "city_id": 85666, + "city_name": "Pir Jo Goth", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.59178", + "longitude": "68.61848" + }, + { + "country_name": "Pakistan", + "city_id": 85669, + "city_name": "Pithoro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.51122", + "longitude": "69.37803" + }, + { + "country_name": "Pakistan", + "city_id": 85678, + "city_name": "Rajo Khanani", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.98391", + "longitude": "68.8537" + }, + { + "country_name": "Pakistan", + "city_id": 85679, + "city_name": "Ranipur", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.2872", + "longitude": "68.50623" + }, + { + "country_name": "Pakistan", + "city_id": 85681, + "city_name": "Ratodero", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.80227", + "longitude": "68.28902" + }, + { + "country_name": "Pakistan", + "city_id": 85687, + "city_name": "Rohri", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.69203", + "longitude": "68.89503" + }, + { + "country_name": "Pakistan", + "city_id": 85689, + "city_name": "Rustam", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.96705", + "longitude": "68.80386" + }, + { + "country_name": "Pakistan", + "city_id": 85692, + "city_name": "Sakrand", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.13845", + "longitude": "68.27444" + }, + { + "country_name": "Pakistan", + "city_id": 85693, + "city_name": "Samaro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.28143", + "longitude": "69.39623" + }, + { + "country_name": "Pakistan", + "city_id": 85695, + "city_name": "Sanghar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.04694", + "longitude": "68.94917" + }, + { + "country_name": "Pakistan", + "city_id": 85698, + "city_name": "Sann", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.0403", + "longitude": "68.13763" + }, + { + "country_name": "Pakistan", + "city_id": 85703, + "city_name": "Sehwan", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.42495", + "longitude": "67.86126" + }, + { + "country_name": "Pakistan", + "city_id": 85704, + "city_name": "Setharja Old", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.2127", + "longitude": "68.46883" + }, + { + "country_name": "Pakistan", + "city_id": 85706, + "city_name": "Shahdad Kot", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.84726", + "longitude": "67.90679" + }, + { + "country_name": "Pakistan", + "city_id": 85707, + "city_name": "Shahdadpur", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.92539", + "longitude": "68.6228" + }, + { + "country_name": "Pakistan", + "city_id": 85710, + "city_name": "Shahpur Chakar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.15411", + "longitude": "68.65013" + }, + { + "country_name": "Pakistan", + "city_id": 85715, + "city_name": "Shikarpur", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.95558", + "longitude": "68.63823" + }, + { + "country_name": "Pakistan", + "city_id": 85723, + "city_name": "Sinjhoro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.03008", + "longitude": "68.80867" + }, + { + "country_name": "Pakistan", + "city_id": 85734, + "city_name": "S\u012bta Road", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.03333", + "longitude": "67.85" + }, + { + "country_name": "Pakistan", + "city_id": 85725, + "city_name": "Sobhodero", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.30475", + "longitude": "68.39715" + }, + { + "country_name": "Pakistan", + "city_id": 85730, + "city_name": "Sukkur", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.70323", + "longitude": "68.85889" + }, + { + "country_name": "Pakistan", + "city_id": 85737, + "city_name": "Talhar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.88454", + "longitude": "68.81437" + }, + { + "country_name": "Pakistan", + "city_id": 85739, + "city_name": "Tando Adam", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.76818", + "longitude": "68.66196" + }, + { + "country_name": "Pakistan", + "city_id": 85740, + "city_name": "Tando Allahyar", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.4605", + "longitude": "68.71745" + }, + { + "country_name": "Pakistan", + "city_id": 85741, + "city_name": "Tando Bago", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.78914", + "longitude": "68.96535" + }, + { + "country_name": "Pakistan", + "city_id": 85742, + "city_name": "Tando Jam", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.42813", + "longitude": "68.52923" + }, + { + "country_name": "Pakistan", + "city_id": 85743, + "city_name": "Tando Mitha Khan", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.99625", + "longitude": "69.20251" + }, + { + "country_name": "Pakistan", + "city_id": 85744, + "city_name": "Tando Muhammad Khan", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.12384", + "longitude": "68.53677" + }, + { + "country_name": "Pakistan", + "city_id": 85746, + "city_name": "Tangwani", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "28.27886", + "longitude": "68.9976" + }, + { + "country_name": "Pakistan", + "city_id": 85750, + "city_name": "Tharu Shah", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "26.9423", + "longitude": "68.11759" + }, + { + "country_name": "Pakistan", + "city_id": 85751, + "city_name": "Thatta", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "24.74745", + "longitude": "67.92353" + }, + { + "country_name": "Pakistan", + "city_id": 85752, + "city_name": "Thul", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "28.2403", + "longitude": "68.7755" + }, + { + "country_name": "Pakistan", + "city_id": 85756, + "city_name": "Ubauro", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "28.16429", + "longitude": "69.73114" + }, + { + "country_name": "Pakistan", + "city_id": 85757, + "city_name": "Umarkot", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.36329", + "longitude": "69.74184" + }, + { + "country_name": "Pakistan", + "city_id": 85758, + "city_name": "Umerkot District", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "25.37", + "longitude": "69.73" + }, + { + "country_name": "Pakistan", + "city_id": 85765, + "city_name": "Warah", + "state_id": 3175, + "state_name": "Sindh", + "latitude": "27.44805", + "longitude": "67.79654" + } +] diff --git a/hawqal/states.py b/hawqal/states.py index 0ed0e9b..3f67bde 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -84,10 +84,11 @@ def getState(country_name="", state_name="", filter=StateFilter()): """ if state_name == "": raise ValueError("state_name must be set") - query = "SELECT " + str(filter) + " FROM states" cursor = databaseConnection() + query = "SELECT " + str(filter) + " FROM states " + if len(country_name) > 0 and len(state_name) > 0: - query = f'where country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' + query = query + f'where country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' elif len(country_name) > 0: query = query + \ f'where country_name= "{string.capwords(country_name)}"' diff --git a/test_hawqal.py b/test_hawqal.py index 00629e1..83ea233 100644 --- a/test_hawqal.py +++ b/test_hawqal.py @@ -1,24 +1,25 @@ +import json import unittest from hawqal.country import Country from hawqal.states import States from hawqal.cities import City - +from hawqal.filters.country_filter import CountryFilter +from hawqal.filters.city_filter import CityFilter +from hawqal.filters.state_filter import StateFilter class TestFunc(unittest.TestCase): def test_getCountries(self): - self.assertEqual(len(Country.getCountries()), 250) - self.assertEqual(len(Country.getCountries( - country="pakistan", meta={"coordinates": True})), 3) + self.assertEqual(len(json.loads(Country.getCountries())), 250) + self.assertEqual(len(json.loads(Country.getCountry(country_name="pakistan"))),1) def test_getStates(self): - self.assertEqual(len(States.getStates()), 4989) - self.assertEqual(len(States.getStates(country="pakistan")), 8) + self.assertEqual(len(json.loads(States.getStates())), 4989) + self.assertEqual(len(json.loads(States.getState(country_name="pakistan",state_name="Punjab"))), 1) def test_getCities(self): - self.assertEqual(len(City.getCities()), 150710) - self.assertEqual(len(City.getCities(country="pakistan")), 458) - self.assertEqual(len(City.getCities(state="punjab")), 329) + self.assertEqual(len(json.loads(City.getCities())), 150710) + self.assertEqual(len(json.loads(City.getCity(country_name="pakistan",state_name='punjab',city_name='wah'))), 1) if __name__ == '__main__': From a222d80ca975a6c70932e6d598c9af5b1b8b7d03 Mon Sep 17 00:00:00 2001 From: Husnain_Khurshid Date: Fri, 6 Jan 2023 12:55:44 +0500 Subject: [PATCH 13/18] fix: (added missong query in cities and fixed the json encoding issue) --- Json/Query.py | 3 +- check.json | 4124 ---------------------------------------------- hawqal/cities.py | 15 +- undefined | 0 4 files changed, 11 insertions(+), 4131 deletions(-) delete mode 100644 check.json delete mode 100644 undefined diff --git a/Json/Query.py b/Json/Query.py index b9e090a..e29aa0d 100644 --- a/Json/Query.py +++ b/Json/Query.py @@ -10,4 +10,5 @@ def convertJson(cursor): for index, value in zip(cols, row): data[index] = value jsonData.append(data) - return json.dumps(jsonData) + encodedData = json.dumps(jsonData, ensure_ascii=False) + return encodedData diff --git a/check.json b/check.json deleted file mode 100644 index cddd9e8..0000000 --- a/check.json +++ /dev/null @@ -1,4124 +0,0 @@ -[ - { - "country_name": "Pakistan", - "city_id": 85368, - "city_name": "Bhimbar", - "state_id": 3172, - "state_name": "Azad Kashmir", - "latitude": "32.97465", - "longitude": "74.07846" - }, - { - "country_name": "Pakistan", - "city_id": 85562, - "city_name": "Kotli", - "state_id": 3172, - "state_name": "Azad Kashmir", - "latitude": "33.51836", - "longitude": "73.9022" - }, - { - "country_name": "Pakistan", - "city_id": 85563, - "city_name": "Kotli District", - "state_id": 3172, - "state_name": "Azad Kashmir", - "latitude": "33.44559", - "longitude": "73.91557" - }, - { - "country_name": "Pakistan", - "city_id": 85614, - "city_name": "Mirpur District", - "state_id": 3172, - "state_name": "Azad Kashmir", - "latitude": "33.21556", - "longitude": "73.75144" - }, - { - "country_name": "Pakistan", - "city_id": 85628, - "city_name": "Muzaffar\u0101b\u0101d", - "state_id": 3172, - "state_name": "Azad Kashmir", - "latitude": "34.37002", - "longitude": "73.47082" - }, - { - "country_name": "Pakistan", - "city_id": 85643, - "city_name": "New Mirpur", - "state_id": 3172, - "state_name": "Azad Kashmir", - "latitude": "33.14782", - "longitude": "73.75187" - }, - { - "country_name": "Pakistan", - "city_id": 85682, - "city_name": "Rawala Kot", - "state_id": 3172, - "state_name": "Azad Kashmir", - "latitude": "33.85782", - "longitude": "73.76043" - }, - { - "country_name": "Pakistan", - "city_id": 85334, - "city_name": "Alik Ghund", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.48976", - "longitude": "67.52177" - }, - { - "country_name": "Pakistan", - "city_id": 85342, - "city_name": "Aw\u0101r\u0101n District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "26.21157", - "longitude": "65.42944" - }, - { - "country_name": "Pakistan", - "city_id": 85353, - "city_name": "Barkhan", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.89773", - "longitude": "69.52558" - }, - { - "country_name": "Pakistan", - "city_id": 85375, - "city_name": "B\u0101rkh\u0101n District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.98482", - "longitude": "69.69944" - }, - { - "country_name": "Pakistan", - "city_id": 85360, - "city_name": "Bela", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "26.22718", - "longitude": "66.31178" - }, - { - "country_name": "Pakistan", - "city_id": 85362, - "city_name": "Bhag", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.04174", - "longitude": "67.82394" - }, - { - "country_name": "Pakistan", - "city_id": 85401, - "city_name": "Ch\u0101gai District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.98765", - "longitude": "63.59087" - }, - { - "country_name": "Pakistan", - "city_id": 85385, - "city_name": "Chaman", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.91769", - "longitude": "66.45259" - }, - { - "country_name": "Pakistan", - "city_id": 85397, - "city_name": "Chowki Jamali", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.01944", - "longitude": "67.92083" - }, - { - "country_name": "Pakistan", - "city_id": 85402, - "city_name": "Dadhar", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.47489", - "longitude": "67.65167" - }, - { - "country_name": "Pakistan", - "city_id": 85406, - "city_name": "Dalbandin", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.88846", - "longitude": "64.40616" - }, - { - "country_name": "Pakistan", - "city_id": 85416, - "city_name": "Dera Bugti", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.03619", - "longitude": "69.15849" - }, - { - "country_name": "Pakistan", - "city_id": 85417, - "city_name": "Dera Bugti District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.9425", - "longitude": "69.06883" - }, - { - "country_name": "Pakistan", - "city_id": 85432, - "city_name": "Duki", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.15307", - "longitude": "68.57323" - }, - { - "country_name": "Pakistan", - "city_id": 85442, - "city_name": "Gadani", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "25.11879", - "longitude": "66.73219" - }, - { - "country_name": "Pakistan", - "city_id": 85445, - "city_name": "Garhi Khairo", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.06029", - "longitude": "67.98033" - }, - { - "country_name": "Pakistan", - "city_id": 85459, - "city_name": "Gwadar", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "25.12163", - "longitude": "62.32541" - }, - { - "country_name": "Pakistan", - "city_id": 85465, - "city_name": "Harnai", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.10077", - "longitude": "67.93824" - }, - { - "country_name": "Pakistan", - "city_id": 85497, - "city_name": "J\u0101far\u0101b\u0101d District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.30104", - "longitude": "68.19783" - }, - { - "country_name": "Pakistan", - "city_id": 85489, - "city_name": "Jhal Magsi District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.36881", - "longitude": "67.543" - }, - { - "country_name": "Pakistan", - "city_id": 85495, - "city_name": "Jiwani", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "25.04852", - "longitude": "61.74573" - }, - { - "country_name": "Pakistan", - "city_id": 85507, - "city_name": "Kalat", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.02663", - "longitude": "66.59361" - }, - { - "country_name": "Pakistan", - "city_id": 85511, - "city_name": "Kal\u0101t District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.88242", - "longitude": "66.53165" - }, - { - "country_name": "Pakistan", - "city_id": 85530, - "city_name": "Khadan Khak", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.75236", - "longitude": "67.71133" - }, - { - "country_name": "Pakistan", - "city_id": 85543, - "city_name": "Kharan", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.58459", - "longitude": "65.41501" - }, - { - "country_name": "Pakistan", - "city_id": 85550, - "city_name": "Kh\u0101r\u0101n District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "27.96308", - "longitude": "64.57113" - }, - { - "country_name": "Pakistan", - "city_id": 85548, - "city_name": "Khuzdar", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "27.81193", - "longitude": "66.61096" - }, - { - "country_name": "Pakistan", - "city_id": 85549, - "city_name": "Khuzd\u0101r District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "27.4868", - "longitude": "66.58703" - }, - { - "country_name": "Pakistan", - "city_id": 85552, - "city_name": "Kohlu", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.89651", - "longitude": "69.25324" - }, - { - "country_name": "Pakistan", - "city_id": 85556, - "city_name": "Kot Malik Barkhurdar", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.20379", - "longitude": "66.98723" - }, - { - "country_name": "Pakistan", - "city_id": 85579, - "city_name": "Lasbela District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "25.78634", - "longitude": "66.6033" - }, - { - "country_name": "Pakistan", - "city_id": 85584, - "city_name": "Loralai", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.37051", - "longitude": "68.59795" - }, - { - "country_name": "Pakistan", - "city_id": 85585, - "city_name": "Loralai District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.30253", - "longitude": "68.84636" - }, - { - "country_name": "Pakistan", - "city_id": 85586, - "city_name": "Mach", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.86371", - "longitude": "67.33018" - }, - { - "country_name": "Pakistan", - "city_id": 85599, - "city_name": "Mastung", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.79966", - "longitude": "66.84553" - }, - { - "country_name": "Pakistan", - "city_id": 85600, - "city_name": "Mastung District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.79455", - "longitude": "66.72068" - }, - { - "country_name": "Pakistan", - "city_id": 85605, - "city_name": "Mehrabpur", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.10773", - "longitude": "68.02554" - }, - { - "country_name": "Pakistan", - "city_id": 85629, - "city_name": "M\u016bsa Khel District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.84937", - "longitude": "69.90069" - }, - { - "country_name": "Pakistan", - "city_id": 85635, - "city_name": "Nas\u012br\u0101b\u0101d District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.62643", - "longitude": "68.12925" - }, - { - "country_name": "Pakistan", - "city_id": 85648, - "city_name": "Nushki", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.55218", - "longitude": "66.02288" - }, - { - "country_name": "Pakistan", - "city_id": 85651, - "city_name": "Ormara", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "25.21018", - "longitude": "64.63626" - }, - { - "country_name": "Pakistan", - "city_id": 85656, - "city_name": "Panjg\u016br District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "26.7375", - "longitude": "64.2038" - }, - { - "country_name": "Pakistan", - "city_id": 85658, - "city_name": "Pasni", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "25.26302", - "longitude": "63.46921" - }, - { - "country_name": "Pakistan", - "city_id": 85668, - "city_name": "Pishin", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.58176", - "longitude": "66.99406" - }, - { - "country_name": "Pakistan", - "city_id": 85671, - "city_name": "Qila Saifull\u0101h District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.95392", - "longitude": "68.33996" - }, - { - "country_name": "Pakistan", - "city_id": 85672, - "city_name": "Quetta", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.18414", - "longitude": "67.00141" - }, - { - "country_name": "Pakistan", - "city_id": 85673, - "city_name": "Quetta District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.17458", - "longitude": "66.76203" - }, - { - "country_name": "Pakistan", - "city_id": 85721, - "city_name": "Sibi", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "29.54299", - "longitude": "67.87726" - }, - { - "country_name": "Pakistan", - "city_id": 85727, - "city_name": "Sohbatpur", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.52038", - "longitude": "68.54298" - }, - { - "country_name": "Pakistan", - "city_id": 85731, - "city_name": "Surab", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.49276", - "longitude": "66.25999" - }, - { - "country_name": "Pakistan", - "city_id": 85755, - "city_name": "Turbat", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "26.00122", - "longitude": "63.04849" - }, - { - "country_name": "Pakistan", - "city_id": 85760, - "city_name": "Usta Muhammad", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "28.17723", - "longitude": "68.04367" - }, - { - "country_name": "Pakistan", - "city_id": 85761, - "city_name": "Uthal", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "25.80722", - "longitude": "66.62194" - }, - { - "country_name": "Pakistan", - "city_id": 85771, - "city_name": "Zhob", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "31.34082", - "longitude": "69.4493" - }, - { - "country_name": "Pakistan", - "city_id": 85772, - "city_name": "Zhob District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "31.36444", - "longitude": "69.20749" - }, - { - "country_name": "Pakistan", - "city_id": 85773, - "city_name": "Ziarat", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.38244", - "longitude": "67.72562" - }, - { - "country_name": "Pakistan", - "city_id": 85774, - "city_name": "Zi\u0101rat District", - "state_id": 3174, - "state_name": "Balochistan", - "latitude": "30.43591", - "longitude": "67.50962" - }, - { - "country_name": "Pakistan", - "city_id": 85336, - "city_name": "Alizai", - "state_id": 3173, - "state_name": "Federally Administered Tribal Areas", - "latitude": "33.53613", - "longitude": "70.34607" - }, - { - "country_name": "Pakistan", - "city_id": 85458, - "city_name": "Gulishah Kach", - "state_id": 3173, - "state_name": "Federally Administered Tribal Areas", - "latitude": "32.67087", - "longitude": "70.33917" - }, - { - "country_name": "Pakistan", - "city_id": 85577, - "city_name": "Landi Kotal", - "state_id": 3173, - "state_name": "Federally Administered Tribal Areas", - "latitude": "34.0988", - "longitude": "71.14108" - }, - { - "country_name": "Pakistan", - "city_id": 85611, - "city_name": "Miran Shah", - "state_id": 3173, - "state_name": "Federally Administered Tribal Areas", - "latitude": "33.00059", - "longitude": "70.07117" - }, - { - "country_name": "Pakistan", - "city_id": 85645, - "city_name": "North Waz\u012brist\u0101n Agency", - "state_id": 3173, - "state_name": "Federally Administered Tribal Areas", - "latitude": "32.95087", - "longitude": "69.95764" - }, - { - "country_name": "Pakistan", - "city_id": 85717, - "city_name": "Shinpokh", - "state_id": 3173, - "state_name": "Federally Administered Tribal Areas", - "latitude": "34.32959", - "longitude": "71.17852" - }, - { - "country_name": "Pakistan", - "city_id": 85728, - "city_name": "South Waz\u012brist\u0101n Agency", - "state_id": 3173, - "state_name": "Federally Administered Tribal Areas", - "latitude": "32.30397", - "longitude": "69.68207" - }, - { - "country_name": "Pakistan", - "city_id": 85764, - "city_name": "Wana", - "state_id": 3173, - "state_name": "Federally Administered Tribal Areas", - "latitude": "32.29889", - "longitude": "69.5725" - }, - { - "country_name": "Pakistan", - "city_id": 85352, - "city_name": "Barishal", - "state_id": 3170, - "state_name": "Gilgit-Baltistan", - "latitude": "36.32162", - "longitude": "74.69502" - }, - { - "country_name": "Pakistan", - "city_id": 85450, - "city_name": "Gilgit", - "state_id": 3170, - "state_name": "Gilgit-Baltistan", - "latitude": "35.91869", - "longitude": "74.31245" - }, - { - "country_name": "Pakistan", - "city_id": 85724, - "city_name": "Skardu", - "state_id": 3170, - "state_name": "Gilgit-Baltistan", - "latitude": "35.29787", - "longitude": "75.63372" - }, - { - "country_name": "Pakistan", - "city_id": 85475, - "city_name": "Islamabad", - "state_id": 3169, - "state_name": "Islamabad Capital Territory", - "latitude": "33.72148", - "longitude": "73.04329" - }, - { - "country_name": "Pakistan", - "city_id": 85329, - "city_name": "Abbottabad", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.1463", - "longitude": "73.21168" - }, - { - "country_name": "Pakistan", - "city_id": 85333, - "city_name": "Akora", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.00337", - "longitude": "72.12561" - }, - { - "country_name": "Pakistan", - "city_id": 85337, - "city_name": "Aman Garh", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.00584", - "longitude": "71.92971" - }, - { - "country_name": "Pakistan", - "city_id": 85338, - "city_name": "Amirabad", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.18729", - "longitude": "73.09078" - }, - { - "country_name": "Pakistan", - "city_id": 85340, - "city_name": "Ashanagro Koto", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.10773", - "longitude": "72.24517" - }, - { - "country_name": "Pakistan", - "city_id": 85345, - "city_name": "Baffa", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.4377", - "longitude": "73.22368" - }, - { - "country_name": "Pakistan", - "city_id": 85351, - "city_name": "Bannu", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "32.98527", - "longitude": "70.60403" - }, - { - "country_name": "Pakistan", - "city_id": 85356, - "city_name": "Bat Khela", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.6178", - "longitude": "71.97247" - }, - { - "country_name": "Pakistan", - "city_id": 85357, - "city_name": "Battagram", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.67719", - "longitude": "73.02329" - }, - { - "country_name": "Pakistan", - "city_id": 85358, - "city_name": "Battagram District", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.68051", - "longitude": "73.00535" - }, - { - "country_name": "Pakistan", - "city_id": 85374, - "city_name": "Buner District", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.44301", - "longitude": "72.49933" - }, - { - "country_name": "Pakistan", - "city_id": 85387, - "city_name": "Charsadda", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.14822", - "longitude": "71.7406" - }, - { - "country_name": "Pakistan", - "city_id": 85390, - "city_name": "Cherat Cantonement", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "33.82342", - "longitude": "71.89292" - }, - { - "country_name": "Pakistan", - "city_id": 85395, - "city_name": "Chitral", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "35.8518", - "longitude": "71.78636" - }, - { - "country_name": "Pakistan", - "city_id": 85419, - "city_name": "Dera Ismail Khan", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "31.83129", - "longitude": "70.9017" - }, - { - "country_name": "Pakistan", - "city_id": 85420, - "city_name": "Dera Ism\u0101\u012bl Kh\u0101n District", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "31.85963", - "longitude": "70.64879" - }, - { - "country_name": "Pakistan", - "city_id": 85430, - "city_name": "Doaba", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "33.4245", - "longitude": "70.73676" - }, - { - "country_name": "Pakistan", - "city_id": 85463, - "city_name": "Hangu", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "33.53198", - "longitude": "71.0595" - }, - { - "country_name": "Pakistan", - "city_id": 85464, - "city_name": "Haripur", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "33.99783", - "longitude": "72.93493" - }, - { - "country_name": "Pakistan", - "city_id": 85470, - "city_name": "Havelian", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.05348", - "longitude": "73.15993" - }, - { - "country_name": "Pakistan", - "city_id": 85504, - "city_name": "Kakad Wari Dir Upper", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.99798", - "longitude": "72.07295" - }, - { - "country_name": "Pakistan", - "city_id": 85522, - "city_name": "Karak", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "33.11633", - "longitude": "71.09354" - }, - { - "country_name": "Pakistan", - "city_id": 85536, - "city_name": "Khalabat", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.05997", - "longitude": "72.88963" - }, - { - "country_name": "Pakistan", - "city_id": 85551, - "city_name": "Kohat", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "33.58196", - "longitude": "71.44929" - }, - { - "country_name": "Pakistan", - "city_id": 85566, - "city_name": "Kulachi", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "31.93058", - "longitude": "70.45959" - }, - { - "country_name": "Pakistan", - "city_id": 85570, - "city_name": "Lachi", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "33.38291", - "longitude": "71.33733" - }, - { - "country_name": "Pakistan", - "city_id": 85574, - "city_name": "Lakki", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "32.60724", - "longitude": "70.91234" - }, - { - "country_name": "Pakistan", - "city_id": 85597, - "city_name": "Mansehra", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.33023", - "longitude": "73.19679" - }, - { - "country_name": "Pakistan", - "city_id": 85598, - "city_name": "Mardan", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.19794", - "longitude": "72.04965" - }, - { - "country_name": "Pakistan", - "city_id": 85610, - "city_name": "Mingora", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.7795", - "longitude": "72.36265" - }, - { - "country_name": "Pakistan", - "city_id": 85644, - "city_name": "Noorabad", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.25195", - "longitude": "71.96656" - }, - { - "country_name": "Pakistan", - "city_id": 85646, - "city_name": "Nowshera", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.01583", - "longitude": "71.98123" - }, - { - "country_name": "Pakistan", - "city_id": 85647, - "city_name": "Nowshera Cantonment", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "33.99829", - "longitude": "71.99834" - }, - { - "country_name": "Pakistan", - "city_id": 85652, - "city_name": "Pabbi", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.00968", - "longitude": "71.79445" - }, - { - "country_name": "Pakistan", - "city_id": 85654, - "city_name": "Paharpur", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "32.10502", - "longitude": "70.97055" - }, - { - "country_name": "Pakistan", - "city_id": 85661, - "city_name": "Peshawar", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.008", - "longitude": "71.57849" - }, - { - "country_name": "Pakistan", - "city_id": 85686, - "city_name": "Risalpur Cantonment", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.06048", - "longitude": "71.99276" - }, - { - "country_name": "Pakistan", - "city_id": 85700, - "city_name": "Sarai Naurang", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "32.82581", - "longitude": "70.78107" - }, - { - "country_name": "Pakistan", - "city_id": 85705, - "city_name": "Shabqadar", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.21599", - "longitude": "71.5548" - }, - { - "country_name": "Pakistan", - "city_id": 85716, - "city_name": "Shingli Bala", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.67872", - "longitude": "72.98491" - }, - { - "country_name": "Pakistan", - "city_id": 85718, - "city_name": "Shorkot", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "31.91023", - "longitude": "70.87757" - }, - { - "country_name": "Pakistan", - "city_id": 85733, - "city_name": "Swabi", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.12018", - "longitude": "72.46982" - }, - { - "country_name": "Pakistan", - "city_id": 85745, - "city_name": "Tangi", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.3009", - "longitude": "71.65238" - }, - { - "country_name": "Pakistan", - "city_id": 85747, - "city_name": "Tank", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "32.21707", - "longitude": "70.38315" - }, - { - "country_name": "Pakistan", - "city_id": 85749, - "city_name": "Thal", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "35.47836", - "longitude": "72.24383" - }, - { - "country_name": "Pakistan", - "city_id": 85754, - "city_name": "Topi", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.07034", - "longitude": "72.62147" - }, - { - "country_name": "Pakistan", - "city_id": 85759, - "city_name": "Upper Dir", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "35.2074", - "longitude": "71.8768" - }, - { - "country_name": "Pakistan", - "city_id": 85762, - "city_name": "Utmanzai", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.18775", - "longitude": "71.76274" - }, - { - "country_name": "Pakistan", - "city_id": 85770, - "city_name": "Zaida", - "state_id": 3171, - "state_name": "Khyber Pakhtunkhwa", - "latitude": "34.0595", - "longitude": "72.4669" - }, - { - "country_name": "Pakistan", - "city_id": 85332, - "city_name": "Ahmadpur Sial", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.67791", - "longitude": "71.74344" - }, - { - "country_name": "Pakistan", - "city_id": 85331, - "city_name": "Ahmedpur East", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.14269", - "longitude": "71.25771" - }, - { - "country_name": "Pakistan", - "city_id": 85335, - "city_name": "Alipur Chatha", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.38242", - "longitude": "70.91106" - }, - { - "country_name": "Pakistan", - "city_id": 85339, - "city_name": "Arifwala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.29058", - "longitude": "73.06574" - }, - { - "country_name": "Pakistan", - "city_id": 85341, - "city_name": "Attock Tehsil", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.76671", - "longitude": "72.35977" - }, - { - "country_name": "Pakistan", - "city_id": 85343, - "city_name": "Baddomalhi", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.99042", - "longitude": "74.6641" - }, - { - "country_name": "Pakistan", - "city_id": 85347, - "city_name": "Bahawalnagar", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.99835", - "longitude": "73.25272" - }, - { - "country_name": "Pakistan", - "city_id": 85348, - "city_name": "Bahawalpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.39779", - "longitude": "71.6752" - }, - { - "country_name": "Pakistan", - "city_id": 85349, - "city_name": "Bakhri Ahmad Khan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.73586", - "longitude": "70.83796" - }, - { - "country_name": "Pakistan", - "city_id": 85354, - "city_name": "Basirpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.57759", - "longitude": "73.83912" - }, - { - "country_name": "Pakistan", - "city_id": 85355, - "city_name": "Basti Dosa", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.78769", - "longitude": "70.86853" - }, - { - "country_name": "Pakistan", - "city_id": 85359, - "city_name": "Begowala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.43816", - "longitude": "74.26794" - }, - { - "country_name": "Pakistan", - "city_id": 85363, - "city_name": "Bhakkar", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.62685", - "longitude": "71.06471" - }, - { - "country_name": "Pakistan", - "city_id": 85364, - "city_name": "Bhalwal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.26576", - "longitude": "72.89809" - }, - { - "country_name": "Pakistan", - "city_id": 85366, - "city_name": "Bhawana", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.56884", - "longitude": "72.64917" - }, - { - "country_name": "Pakistan", - "city_id": 85367, - "city_name": "Bhera", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.48206", - "longitude": "72.90865" - }, - { - "country_name": "Pakistan", - "city_id": 85371, - "city_name": "Bhopalwala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.42968", - "longitude": "74.3635" - }, - { - "country_name": "Pakistan", - "city_id": 85376, - "city_name": "Burewala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.16667", - "longitude": "72.65" - }, - { - "country_name": "Pakistan", - "city_id": 85378, - "city_name": "Chak Azam Saffo", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.75202", - "longitude": "73.02834" - }, - { - "country_name": "Pakistan", - "city_id": 85380, - "city_name": "Chak Jhumra", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.56808", - "longitude": "73.18317" - }, - { - "country_name": "Pakistan", - "city_id": 85381, - "city_name": "Chak One Hundred Twenty Nine Left", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.42919", - "longitude": "73.04522" - }, - { - "country_name": "Pakistan", - "city_id": 85382, - "city_name": "Chak Thirty-one -Eleven Left", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.42388", - "longitude": "72.69737" - }, - { - "country_name": "Pakistan", - "city_id": 85383, - "city_name": "Chak Two Hundred Forty-Nine TDA", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.17772", - "longitude": "71.2048" - }, - { - "country_name": "Pakistan", - "city_id": 85384, - "city_name": "Chakwal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.93286", - "longitude": "72.85394" - }, - { - "country_name": "Pakistan", - "city_id": 85388, - "city_name": "Chawinda", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.34434", - "longitude": "74.70507" - }, - { - "country_name": "Pakistan", - "city_id": 85392, - "city_name": "Chichawatni", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.5301", - "longitude": "72.69155" - }, - { - "country_name": "Pakistan", - "city_id": 85393, - "city_name": "Chiniot", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.72091", - "longitude": "72.97836" - }, - { - "country_name": "Pakistan", - "city_id": 85394, - "city_name": "Chishtian", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.79713", - "longitude": "72.85772" - }, - { - "country_name": "Pakistan", - "city_id": 85396, - "city_name": "Choa Saidanshah", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.71962", - "longitude": "72.98625" - }, - { - "country_name": "Pakistan", - "city_id": 143765, - "city_name": "Chuhar Kana", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.75", - "longitude": "73.8" - }, - { - "country_name": "Pakistan", - "city_id": 85400, - "city_name": "Chunian", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.96621", - "longitude": "73.97908" - }, - { - "country_name": "Pakistan", - "city_id": 85404, - "city_name": "Daira Din Panah", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.57053", - "longitude": "70.93722" - }, - { - "country_name": "Pakistan", - "city_id": 85405, - "city_name": "Dajal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.55769", - "longitude": "70.37614" - }, - { - "country_name": "Pakistan", - "city_id": 85407, - "city_name": "Dandot RS", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.64167", - "longitude": "72.975" - }, - { - "country_name": "Pakistan", - "city_id": 85409, - "city_name": "Darya Khan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.78447", - "longitude": "71.10197" - }, - { - "country_name": "Pakistan", - "city_id": 85411, - "city_name": "Daska", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.32422", - "longitude": "74.35039" - }, - { - "country_name": "Pakistan", - "city_id": 143767, - "city_name": "Daud Khel", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.87498", - "longitude": "71.57013" - }, - { - "country_name": "Pakistan", - "city_id": 85414, - "city_name": "Daultala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.19282", - "longitude": "73.14099" - }, - { - "country_name": "Pakistan", - "city_id": 85418, - "city_name": "Dera Ghazi Khan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.04587", - "longitude": "70.64029" - }, - { - "country_name": "Pakistan", - "city_id": 85421, - "city_name": "Dhanot", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.57991", - "longitude": "71.75213" - }, - { - "country_name": "Pakistan", - "city_id": 85422, - "city_name": "Dhaunkal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.40613", - "longitude": "74.13706" - }, - { - "country_name": "Pakistan", - "city_id": 143766, - "city_name": "Dhok Awan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.84452", - "longitude": "72.52357" - }, - { - "country_name": "Pakistan", - "city_id": 85425, - "city_name": "Dijkot", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.21735", - "longitude": "72.99621" - }, - { - "country_name": "Pakistan", - "city_id": 85426, - "city_name": "Dinan Bashnoian Wala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.76584", - "longitude": "73.26557" - }, - { - "country_name": "Pakistan", - "city_id": 85427, - "city_name": "Dinga", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.64101", - "longitude": "73.72039" - }, - { - "country_name": "Pakistan", - "city_id": 85428, - "city_name": "Dipalpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.66984", - "longitude": "73.65306" - }, - { - "country_name": "Pakistan", - "city_id": 85433, - "city_name": "Dullewala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.83439", - "longitude": "71.43639" - }, - { - "country_name": "Pakistan", - "city_id": 85434, - "city_name": "Dunga Bunga", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.74975", - "longitude": "73.24294" - }, - { - "country_name": "Pakistan", - "city_id": 85435, - "city_name": "Dunyapur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.80275", - "longitude": "71.74344" - }, - { - "country_name": "Pakistan", - "city_id": 85436, - "city_name": "Eminabad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.04237", - "longitude": "74.25996" - }, - { - "country_name": "Pakistan", - "city_id": 85437, - "city_name": "Faisalabad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.41554", - "longitude": "73.08969" - }, - { - "country_name": "Pakistan", - "city_id": 85438, - "city_name": "Faqirwali", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.46799", - "longitude": "73.03489" - }, - { - "country_name": "Pakistan", - "city_id": 85439, - "city_name": "Faruka", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.88642", - "longitude": "72.41362" - }, - { - "country_name": "Pakistan", - "city_id": 85440, - "city_name": "Fazilpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.17629", - "longitude": "75.06583" - }, - { - "country_name": "Pakistan", - "city_id": 143768, - "city_name": "Ferozewala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.3", - "longitude": "70.43333333" - }, - { - "country_name": "Pakistan", - "city_id": 85441, - "city_name": "Fort Abbas", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.19344", - "longitude": "72.85525" - }, - { - "country_name": "Pakistan", - "city_id": 85444, - "city_name": "Garh Maharaja", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.83383", - "longitude": "71.90491" - }, - { - "country_name": "Pakistan", - "city_id": 85451, - "city_name": "Gojra", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.14926", - "longitude": "72.68323" - }, - { - "country_name": "Pakistan", - "city_id": 85455, - "city_name": "Gujar Khan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.25411", - "longitude": "73.30433" - }, - { - "country_name": "Pakistan", - "city_id": 85456, - "city_name": "Gujranwala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.15567", - "longitude": "74.18705" - }, - { - "country_name": "Pakistan", - "city_id": 143769, - "city_name": "Gujranwala Division", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.45", - "longitude": "74.13333" - }, - { - "country_name": "Pakistan", - "city_id": 85457, - "city_name": "Gujrat", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.5742", - "longitude": "74.07542" - }, - { - "country_name": "Pakistan", - "city_id": 85460, - "city_name": "Hadali", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.64043", - "longitude": "74.56898" - }, - { - "country_name": "Pakistan", - "city_id": 85461, - "city_name": "Hafizabad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.07095", - "longitude": "73.68802" - }, - { - "country_name": "Pakistan", - "city_id": 85466, - "city_name": "Harnoli", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.27871", - "longitude": "71.55429" - }, - { - "country_name": "Pakistan", - "city_id": 85467, - "city_name": "Harunabad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.61206", - "longitude": "73.13802" - }, - { - "country_name": "Pakistan", - "city_id": 143770, - "city_name": "Hasan Abdal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.81948611", - "longitude": "72.68902778" - }, - { - "country_name": "Pakistan", - "city_id": 85468, - "city_name": "Hasilpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.69221", - "longitude": "72.54566" - }, - { - "country_name": "Pakistan", - "city_id": 85469, - "city_name": "Haveli Lakha", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.45097", - "longitude": "73.69371" - }, - { - "country_name": "Pakistan", - "city_id": 85471, - "city_name": "Hazro", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.9099", - "longitude": "72.49179" - }, - { - "country_name": "Pakistan", - "city_id": 85473, - "city_name": "Hujra Shah Muqeem", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.74168", - "longitude": "73.82327" - }, - { - "country_name": "Pakistan", - "city_id": 85478, - "city_name": "Jahanian Shah", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.80541", - "longitude": "72.2774" - }, - { - "country_name": "Pakistan", - "city_id": 85479, - "city_name": "Jalalpur Jattan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.64118", - "longitude": "74.20561" - }, - { - "country_name": "Pakistan", - "city_id": 85480, - "city_name": "Jalalpur Pirwala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.5051", - "longitude": "71.22202" - }, - { - "country_name": "Pakistan", - "city_id": 85481, - "city_name": "Jampur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.64235", - "longitude": "70.59518" - }, - { - "country_name": "Pakistan", - "city_id": 85483, - "city_name": "Jand", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.43304", - "longitude": "72.01877" - }, - { - "country_name": "Pakistan", - "city_id": 85484, - "city_name": "Jandiala Sher Khan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.82098", - "longitude": "73.91815" - }, - { - "country_name": "Pakistan", - "city_id": 85485, - "city_name": "Jaranwala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.3332", - "longitude": "73.41868" - }, - { - "country_name": "Pakistan", - "city_id": 85487, - "city_name": "Jatoi Shimali", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.51827", - "longitude": "70.84474" - }, - { - "country_name": "Pakistan", - "city_id": 85488, - "city_name": "Jauharabad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.29016", - "longitude": "72.28182" - }, - { - "country_name": "Pakistan", - "city_id": 85490, - "city_name": "Jhang", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.30568", - "longitude": "72.32594" - }, - { - "country_name": "Pakistan", - "city_id": 85491, - "city_name": "Jhang Sadar", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.26981", - "longitude": "72.31687" - }, - { - "country_name": "Pakistan", - "city_id": 85492, - "city_name": "Jhawarian", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.36192", - "longitude": "72.62275" - }, - { - "country_name": "Pakistan", - "city_id": 85493, - "city_name": "Jhelum", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.93448", - "longitude": "73.73102" - }, - { - "country_name": "Pakistan", - "city_id": 85499, - "city_name": "Kabirwala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.40472", - "longitude": "71.86269" - }, - { - "country_name": "Pakistan", - "city_id": 85501, - "city_name": "Kahna Nau", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.36709", - "longitude": "74.36899" - }, - { - "country_name": "Pakistan", - "city_id": 85503, - "city_name": "Kahuta", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.59183", - "longitude": "73.38736" - }, - { - "country_name": "Pakistan", - "city_id": 85505, - "city_name": "Kalabagh", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.96164", - "longitude": "71.54638" - }, - { - "country_name": "Pakistan", - "city_id": 85506, - "city_name": "Kalaswala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.20081", - "longitude": "74.64858" - }, - { - "country_name": "Pakistan", - "city_id": 85508, - "city_name": "Kaleke Mandi", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.97597", - "longitude": "73.59999" - }, - { - "country_name": "Pakistan", - "city_id": 85509, - "city_name": "Kallar Kahar", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.77998", - "longitude": "72.69793" - }, - { - "country_name": "Pakistan", - "city_id": 85510, - "city_name": "Kalur Kot", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.15512", - "longitude": "71.26631" - }, - { - "country_name": "Pakistan", - "city_id": 85512, - "city_name": "Kamalia", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.72708", - "longitude": "72.64607" - }, - { - "country_name": "Pakistan", - "city_id": 85513, - "city_name": "Kamar Mushani", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.84318", - "longitude": "71.36192" - }, - { - "country_name": "Pakistan", - "city_id": 85515, - "city_name": "Kamoke", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.97526", - "longitude": "74.22304" - }, - { - "country_name": "Pakistan", - "city_id": 85516, - "city_name": "Kamra", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.74698", - "longitude": "73.51229" - }, - { - "country_name": "Pakistan", - "city_id": 85520, - "city_name": "Kanganpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.76468", - "longitude": "74.12286" - }, - { - "country_name": "Pakistan", - "city_id": 85525, - "city_name": "Karor", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.2246", - "longitude": "70.95153" - }, - { - "country_name": "Pakistan", - "city_id": 85527, - "city_name": "Kasur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.11866", - "longitude": "74.45025" - }, - { - "country_name": "Pakistan", - "city_id": 85528, - "city_name": "Keshupur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.26", - "longitude": "72.5" - }, - { - "country_name": "Pakistan", - "city_id": 85535, - "city_name": "Khairpur Tamiwali", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.58139", - "longitude": "72.23804" - }, - { - "country_name": "Pakistan", - "city_id": 85537, - "city_name": "Khandowa", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.74255", - "longitude": "72.73478" - }, - { - "country_name": "Pakistan", - "city_id": 85538, - "city_name": "Khanewal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.30173", - "longitude": "71.93212" - }, - { - "country_name": "Pakistan", - "city_id": 85539, - "city_name": "Khanga Dogran", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.83294", - "longitude": "73.62213" - }, - { - "country_name": "Pakistan", - "city_id": 85540, - "city_name": "Khangarh", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.91446", - "longitude": "71.16067" - }, - { - "country_name": "Pakistan", - "city_id": 85541, - "city_name": "Khanpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "28.64739", - "longitude": "70.65694" - }, - { - "country_name": "Pakistan", - "city_id": 85544, - "city_name": "Kharian", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.81612", - "longitude": "73.88697" - }, - { - "country_name": "Pakistan", - "city_id": 85545, - "city_name": "Khewra", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.6491", - "longitude": "73.01059" - }, - { - "country_name": "Pakistan", - "city_id": 85546, - "city_name": "Khurrianwala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.49936", - "longitude": "73.26763" - }, - { - "country_name": "Pakistan", - "city_id": 85547, - "city_name": "Khushab", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.29667", - "longitude": "72.3525" - }, - { - "country_name": "Pakistan", - "city_id": 143771, - "city_name": "Kohror Pakka", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.62382", - "longitude": "71.91673" - }, - { - "country_name": "Pakistan", - "city_id": 85553, - "city_name": "Kot Addu Tehsil", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.46907", - "longitude": "70.96699" - }, - { - "country_name": "Pakistan", - "city_id": 85555, - "city_name": "Kot Ghulam Muhammad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.33311", - "longitude": "74.54694" - }, - { - "country_name": "Pakistan", - "city_id": 85557, - "city_name": "Kot Mumin", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.18843", - "longitude": "73.02987" - }, - { - "country_name": "Pakistan", - "city_id": 85558, - "city_name": "Kot Radha Kishan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.17068", - "longitude": "74.10126" - }, - { - "country_name": "Pakistan", - "city_id": 85559, - "city_name": "Kot Rajkour", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.41208", - "longitude": "74.62855" - }, - { - "country_name": "Pakistan", - "city_id": 85560, - "city_name": "Kot Samaba", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "28.55207", - "longitude": "70.46837" - }, - { - "country_name": "Pakistan", - "city_id": 85561, - "city_name": "Kot Sultan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.7737", - "longitude": "70.93125" - }, - { - "country_name": "Pakistan", - "city_id": 85564, - "city_name": "Kotli Loharan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.58893", - "longitude": "74.49466" - }, - { - "country_name": "Pakistan", - "city_id": 85567, - "city_name": "Kundian", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.45775", - "longitude": "71.47892" - }, - { - "country_name": "Pakistan", - "city_id": 85568, - "city_name": "Kunjah", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.52982", - "longitude": "73.97486" - }, - { - "country_name": "Pakistan", - "city_id": 85571, - "city_name": "Ladhewala Waraich", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.15692", - "longitude": "74.11564" - }, - { - "country_name": "Pakistan", - "city_id": 85572, - "city_name": "Lahore", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.558", - "longitude": "74.35071" - }, - { - "country_name": "Pakistan", - "city_id": 85575, - "city_name": "Lala Musa", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.70138", - "longitude": "73.95746" - }, - { - "country_name": "Pakistan", - "city_id": 85576, - "city_name": "Lalian", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.82462", - "longitude": "72.80116" - }, - { - "country_name": "Pakistan", - "city_id": 85580, - "city_name": "Layyah", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.96128", - "longitude": "70.93904" - }, - { - "country_name": "Pakistan", - "city_id": 85581, - "city_name": "Layyah District", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.968", - "longitude": "70.943" - }, - { - "country_name": "Pakistan", - "city_id": 85582, - "city_name": "Liliani", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.20393", - "longitude": "72.9512" - }, - { - "country_name": "Pakistan", - "city_id": 85583, - "city_name": "Lodhran", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.5339", - "longitude": "71.63244" - }, - { - "country_name": "Pakistan", - "city_id": 85588, - "city_name": "Mailsi", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.80123", - "longitude": "72.17398" - }, - { - "country_name": "Pakistan", - "city_id": 85589, - "city_name": "Malakwal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.55449", - "longitude": "73.21274" - }, - { - "country_name": "Pakistan", - "city_id": 85590, - "city_name": "Malakwal City", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.55492", - "longitude": "73.2122" - }, - { - "country_name": "Pakistan", - "city_id": 85592, - "city_name": "Mamu Kanjan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.83044", - "longitude": "72.79943" - }, - { - "country_name": "Pakistan", - "city_id": 85593, - "city_name": "Mananwala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.58803", - "longitude": "73.68927" - }, - { - "country_name": "Pakistan", - "city_id": 85594, - "city_name": "Mandi Bahauddin", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.58704", - "longitude": "73.49123" - }, - { - "country_name": "Pakistan", - "city_id": 143772, - "city_name": "Mandi Bahauddin District", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.58333333", - "longitude": "73.5" - }, - { - "country_name": "Pakistan", - "city_id": 85595, - "city_name": "Mangla", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.89306", - "longitude": "72.38167" - }, - { - "country_name": "Pakistan", - "city_id": 85596, - "city_name": "Mankera", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.38771", - "longitude": "71.44047" - }, - { - "country_name": "Pakistan", - "city_id": 85604, - "city_name": "Mehmand Chak", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.78518", - "longitude": "73.82306" - }, - { - "country_name": "Pakistan", - "city_id": 85606, - "city_name": "Mian Channun", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.44067", - "longitude": "72.35679" - }, - { - "country_name": "Pakistan", - "city_id": 85607, - "city_name": "Mianke Mor", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.2024", - "longitude": "73.94857" - }, - { - "country_name": "Pakistan", - "city_id": 85608, - "city_name": "Mianwali", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.57756", - "longitude": "71.52847" - }, - { - "country_name": "Pakistan", - "city_id": 85609, - "city_name": "Minchinabad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.16356", - "longitude": "73.56858" - }, - { - "country_name": "Pakistan", - "city_id": 85619, - "city_name": "Mitha Tiwana", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.2454", - "longitude": "72.10615" - }, - { - "country_name": "Pakistan", - "city_id": 85622, - "city_name": "Moza Shahwala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.80563", - "longitude": "70.84911" - }, - { - "country_name": "Pakistan", - "city_id": 85623, - "city_name": "Multan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.19679", - "longitude": "71.47824" - }, - { - "country_name": "Pakistan", - "city_id": 143773, - "city_name": "Multan District", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.08333333", - "longitude": "71.66666667" - }, - { - "country_name": "Pakistan", - "city_id": 85624, - "city_name": "Muridke", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.80258", - "longitude": "74.25772" - }, - { - "country_name": "Pakistan", - "city_id": 85625, - "city_name": "Murree", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.90836", - "longitude": "73.3903" - }, - { - "country_name": "Pakistan", - "city_id": 85626, - "city_name": "Mustafabad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.89222", - "longitude": "73.49889" - }, - { - "country_name": "Pakistan", - "city_id": 85627, - "city_name": "Muzaffargarh", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.07258", - "longitude": "71.19379" - }, - { - "country_name": "Pakistan", - "city_id": 85631, - "city_name": "Nankana Sahib", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.4501", - "longitude": "73.70653" - }, - { - "country_name": "Pakistan", - "city_id": 85632, - "city_name": "Narang Mandi", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.90376", - "longitude": "74.51587" - }, - { - "country_name": "Pakistan", - "city_id": 85633, - "city_name": "Narowal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.10197", - "longitude": "74.87303" - }, - { - "country_name": "Pakistan", - "city_id": 85638, - "city_name": "Naushahra Virkan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.96258", - "longitude": "73.97117" - }, - { - "country_name": "Pakistan", - "city_id": 85641, - "city_name": "Nazir Town", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.30614", - "longitude": "73.4833" - }, - { - "country_name": "Pakistan", - "city_id": 85650, - "city_name": "Okara", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.81029", - "longitude": "73.45155" - }, - { - "country_name": "Pakistan", - "city_id": 143774, - "city_name": "Pakki Shagwanwali", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.79033", - "longitude": "70.87139" - }, - { - "country_name": "Pakistan", - "city_id": 85655, - "city_name": "Pakpattan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.34314", - "longitude": "73.38944" - }, - { - "country_name": "Pakistan", - "city_id": 85659, - "city_name": "Pasrur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.26286", - "longitude": "74.66327" - }, - { - "country_name": "Pakistan", - "city_id": 85660, - "city_name": "Pattoki", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.02021", - "longitude": "73.85333" - }, - { - "country_name": "Pakistan", - "city_id": 85662, - "city_name": "Phalia", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.43104", - "longitude": "73.579" - }, - { - "country_name": "Pakistan", - "city_id": 85663, - "city_name": "Pind Dadan Khan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.58662", - "longitude": "73.04456" - }, - { - "country_name": "Pakistan", - "city_id": 85664, - "city_name": "Pindi Bhattian", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.89844", - "longitude": "73.27339" - }, - { - "country_name": "Pakistan", - "city_id": 85665, - "city_name": "Pindi Gheb", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.24095", - "longitude": "72.2648" - }, - { - "country_name": "Pakistan", - "city_id": 85667, - "city_name": "Pir Mahal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.76663", - "longitude": "72.43455" - }, - { - "country_name": "Pakistan", - "city_id": 85670, - "city_name": "Qadirpur Ran", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.29184", - "longitude": "71.67164" - }, - { - "country_name": "Pakistan", - "city_id": 143775, - "city_name": "Qila Didar Singh", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.8", - "longitude": "74.1" - }, - { - "country_name": "Pakistan", - "city_id": 85389, - "city_name": "Rabwah", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.75511", - "longitude": "72.91403" - }, - { - "country_name": "Pakistan", - "city_id": 85674, - "city_name": "Rahim Yar Khan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "28.41987", - "longitude": "70.30345" - }, - { - "country_name": "Pakistan", - "city_id": 143776, - "city_name": "Rahimyar Khan District", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "28.4602", - "longitude": "70.52837" - }, - { - "country_name": "Pakistan", - "city_id": 85675, - "city_name": "Raiwind", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.24895", - "longitude": "74.21534" - }, - { - "country_name": "Pakistan", - "city_id": 85676, - "city_name": "Raja Jang", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.22078", - "longitude": "74.25483" - }, - { - "country_name": "Pakistan", - "city_id": 85677, - "city_name": "Rajanpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.10408", - "longitude": "70.32969" - }, - { - "country_name": "Pakistan", - "city_id": 85680, - "city_name": "Rasulnagar", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.32794", - "longitude": "73.7804" - }, - { - "country_name": "Pakistan", - "city_id": 85683, - "city_name": "Rawalpindi", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.59733", - "longitude": "73.0479" - }, - { - "country_name": "Pakistan", - "city_id": 85684, - "city_name": "Rawalpindi District", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.42987", - "longitude": "73.23092" - }, - { - "country_name": "Pakistan", - "city_id": 85685, - "city_name": "Renala Khurd", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.87878", - "longitude": "73.59857" - }, - { - "country_name": "Pakistan", - "city_id": 85688, - "city_name": "Rojhan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "28.68735", - "longitude": "69.9535" - }, - { - "country_name": "Pakistan", - "city_id": 85690, - "city_name": "Sadiqabad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "28.3091", - "longitude": "70.12652" - }, - { - "country_name": "Pakistan", - "city_id": 85691, - "city_name": "Sahiwal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.66595", - "longitude": "73.10186" - }, - { - "country_name": "Pakistan", - "city_id": 85694, - "city_name": "Sambrial", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.47835", - "longitude": "74.35338" - }, - { - "country_name": "Pakistan", - "city_id": 85696, - "city_name": "Sangla Hill", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.71667", - "longitude": "73.38333" - }, - { - "country_name": "Pakistan", - "city_id": 85697, - "city_name": "Sanjwal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.76105", - "longitude": "72.43315" - }, - { - "country_name": "Pakistan", - "city_id": 85699, - "city_name": "Sarai Alamgir", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.90495", - "longitude": "73.75518" - }, - { - "country_name": "Pakistan", - "city_id": 85701, - "city_name": "Sarai Sidhu", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.59476", - "longitude": "71.9699" - }, - { - "country_name": "Pakistan", - "city_id": 85702, - "city_name": "Sargodha", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.08586", - "longitude": "72.67418" - }, - { - "country_name": "Pakistan", - "city_id": 143777, - "city_name": "Shahkot Tehsil", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.56166667", - "longitude": "73.4875" - }, - { - "country_name": "Pakistan", - "city_id": 85709, - "city_name": "Shahpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.2682", - "longitude": "72.46884" - }, - { - "country_name": "Pakistan", - "city_id": 85711, - "city_name": "Shahr Sultan", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.57517", - "longitude": "71.02209" - }, - { - "country_name": "Pakistan", - "city_id": 85712, - "city_name": "Shakargarh", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.26361", - "longitude": "75.16008" - }, - { - "country_name": "Pakistan", - "city_id": 85713, - "city_name": "Sharqpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.46116", - "longitude": "74.10091" - }, - { - "country_name": "Pakistan", - "city_id": 85714, - "city_name": "Sheikhupura", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.71287", - "longitude": "73.98556" - }, - { - "country_name": "Pakistan", - "city_id": 85708, - "city_name": "Shorkot", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.5", - "longitude": "72.4" - }, - { - "country_name": "Pakistan", - "city_id": 85719, - "city_name": "Shujaabad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.88092", - "longitude": "71.29344" - }, - { - "country_name": "Pakistan", - "city_id": 85720, - "city_name": "Sialkot", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.49268", - "longitude": "74.53134" - }, - { - "country_name": "Pakistan", - "city_id": 85722, - "city_name": "Sillanwali", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.82539", - "longitude": "72.54064" - }, - { - "country_name": "Pakistan", - "city_id": 85726, - "city_name": "Sodhra", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.46211", - "longitude": "74.18207" - }, - { - "country_name": "Pakistan", - "city_id": 85729, - "city_name": "Sukheke Mandi", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.86541", - "longitude": "73.50875" - }, - { - "country_name": "Pakistan", - "city_id": 85732, - "city_name": "Surkhpur", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.71816", - "longitude": "74.44773" - }, - { - "country_name": "Pakistan", - "city_id": 85735, - "city_name": "Talagang", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.92766", - "longitude": "72.41594" - }, - { - "country_name": "Pakistan", - "city_id": 85736, - "city_name": "Talamba", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.52693", - "longitude": "72.24079" - }, - { - "country_name": "Pakistan", - "city_id": 85738, - "city_name": "Tandlianwala", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.03359", - "longitude": "73.13268" - }, - { - "country_name": "Pakistan", - "city_id": 85748, - "city_name": "Taunsa", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.70358", - "longitude": "70.65054" - }, - { - "country_name": "Pakistan", - "city_id": 85753, - "city_name": "Toba Tek Singh", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.97127", - "longitude": "72.48275" - }, - { - "country_name": "Pakistan", - "city_id": 143778, - "city_name": "Umerkot", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "25.36138889", - "longitude": "69.73611111" - }, - { - "country_name": "Pakistan", - "city_id": 85763, - "city_name": "Vihari", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "30.0445", - "longitude": "72.3556" - }, - { - "country_name": "Pakistan", - "city_id": 143779, - "city_name": "Wah", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "33.81", - "longitude": "72.70972222" - }, - { - "country_name": "Pakistan", - "city_id": 143780, - "city_name": "Warburton", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31.55", - "longitude": "73.8333" - }, - { - "country_name": "Pakistan", - "city_id": 85766, - "city_name": "Wazirabad", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.44324", - "longitude": "74.12" - }, - { - "country_name": "Pakistan", - "city_id": 143781, - "city_name": "West Punjab", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "31", - "longitude": "72" - }, - { - "country_name": "Pakistan", - "city_id": 85767, - "city_name": "Yazman", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "29.12122", - "longitude": "71.74459" - }, - { - "country_name": "Pakistan", - "city_id": 85768, - "city_name": "Zafarwal", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "32.34464", - "longitude": "74.8999" - }, - { - "country_name": "Pakistan", - "city_id": 85769, - "city_name": "Zahir Pir", - "state_id": 3176, - "state_name": "Punjab", - "latitude": "28.81284", - "longitude": "70.52341" - }, - { - "country_name": "Pakistan", - "city_id": 85330, - "city_name": "Adilpur", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.93677", - "longitude": "69.31941" - }, - { - "country_name": "Pakistan", - "city_id": 85344, - "city_name": "Badin", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.656", - "longitude": "68.837" - }, - { - "country_name": "Pakistan", - "city_id": 85346, - "city_name": "Bagarji", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.75431", - "longitude": "68.75866" - }, - { - "country_name": "Pakistan", - "city_id": 85350, - "city_name": "Bandhi", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.58761", - "longitude": "68.30215" - }, - { - "country_name": "Pakistan", - "city_id": 85361, - "city_name": "Berani", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.78497", - "longitude": "68.80754" - }, - { - "country_name": "Pakistan", - "city_id": 85365, - "city_name": "Bhan", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.55831", - "longitude": "67.72139" - }, - { - "country_name": "Pakistan", - "city_id": 85369, - "city_name": "Bhiria", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.91041", - "longitude": "68.19466" - }, - { - "country_name": "Pakistan", - "city_id": 85370, - "city_name": "Bhit Shah", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.80565", - "longitude": "68.49143" - }, - { - "country_name": "Pakistan", - "city_id": 85372, - "city_name": "Bozdar Wada", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.183", - "longitude": "68.6358" - }, - { - "country_name": "Pakistan", - "city_id": 85373, - "city_name": "Bulri", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.86667", - "longitude": "68.33333" - }, - { - "country_name": "Pakistan", - "city_id": 85377, - "city_name": "Chak", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.85838", - "longitude": "68.83378" - }, - { - "country_name": "Pakistan", - "city_id": 85386, - "city_name": "Chamber", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.29362", - "longitude": "68.81176" - }, - { - "country_name": "Pakistan", - "city_id": 85391, - "city_name": "Chhor", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.5126", - "longitude": "69.78437" - }, - { - "country_name": "Pakistan", - "city_id": 85399, - "city_name": "Chuhar Jamali", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.3944", - "longitude": "67.99298" - }, - { - "country_name": "Pakistan", - "city_id": 85403, - "city_name": "Dadu", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.73033", - "longitude": "67.7769" - }, - { - "country_name": "Pakistan", - "city_id": 85408, - "city_name": "Daromehar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.79382", - "longitude": "68.17978" - }, - { - "country_name": "Pakistan", - "city_id": 85410, - "city_name": "Darya Khan Marri", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.67765", - "longitude": "68.28666" - }, - { - "country_name": "Pakistan", - "city_id": 85413, - "city_name": "Daulatpur", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.50158", - "longitude": "67.97079" - }, - { - "country_name": "Pakistan", - "city_id": 85415, - "city_name": "Daur", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.45528", - "longitude": "68.31835" - }, - { - "country_name": "Pakistan", - "city_id": 85423, - "city_name": "Dhoro Naro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.50484", - "longitude": "69.5709" - }, - { - "country_name": "Pakistan", - "city_id": 85424, - "city_name": "Digri", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.15657", - "longitude": "69.11098" - }, - { - "country_name": "Pakistan", - "city_id": 85429, - "city_name": "Diplo", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.46688", - "longitude": "69.58114" - }, - { - "country_name": "Pakistan", - "city_id": 85431, - "city_name": "Dokri", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.37421", - "longitude": "68.09715" - }, - { - "country_name": "Pakistan", - "city_id": 85443, - "city_name": "Gambat", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.3517", - "longitude": "68.5215" - }, - { - "country_name": "Pakistan", - "city_id": 85446, - "city_name": "Garhiyasin", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.90631", - "longitude": "68.5121" - }, - { - "country_name": "Pakistan", - "city_id": 85447, - "city_name": "Gharo", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.74182", - "longitude": "67.58534" - }, - { - "country_name": "Pakistan", - "city_id": 85448, - "city_name": "Ghauspur", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "28.13882", - "longitude": "69.08245" - }, - { - "country_name": "Pakistan", - "city_id": 85449, - "city_name": "Ghotki", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "28.00437", - "longitude": "69.31569" - }, - { - "country_name": "Pakistan", - "city_id": 85452, - "city_name": "Goth Garelo", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.43521", - "longitude": "68.07572" - }, - { - "country_name": "Pakistan", - "city_id": 85453, - "city_name": "Goth Phulji", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.88099", - "longitude": "67.68239" - }, - { - "country_name": "Pakistan", - "city_id": 85454, - "city_name": "Goth Radhan", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.19846", - "longitude": "67.95348" - }, - { - "country_name": "Pakistan", - "city_id": 85462, - "city_name": "Hala", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.81459", - "longitude": "68.42198" - }, - { - "country_name": "Pakistan", - "city_id": 85472, - "city_name": "Hingorja", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.21088", - "longitude": "68.41598" - }, - { - "country_name": "Pakistan", - "city_id": 85474, - "city_name": "Hyderabad", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.39242", - "longitude": "68.37366" - }, - { - "country_name": "Pakistan", - "city_id": 85476, - "city_name": "Islamkot", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.69904", - "longitude": "70.17982" - }, - { - "country_name": "Pakistan", - "city_id": 85477, - "city_name": "Jacobabad", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "28.28187", - "longitude": "68.43761" - }, - { - "country_name": "Pakistan", - "city_id": 85498, - "city_name": "J\u0101m S\u0101hib", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.29583", - "longitude": "68.62917" - }, - { - "country_name": "Pakistan", - "city_id": 85482, - "city_name": "Jamshoro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.43608", - "longitude": "68.28017" - }, - { - "country_name": "Pakistan", - "city_id": 85486, - "city_name": "Jati", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.35492", - "longitude": "68.26732" - }, - { - "country_name": "Pakistan", - "city_id": 85494, - "city_name": "Jhol", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.95533", - "longitude": "68.88871" - }, - { - "country_name": "Pakistan", - "city_id": 85496, - "city_name": "Johi", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.69225", - "longitude": "67.61431" - }, - { - "country_name": "Pakistan", - "city_id": 85500, - "city_name": "Kadhan", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.48041", - "longitude": "68.98551" - }, - { - "country_name": "Pakistan", - "city_id": 85514, - "city_name": "Kambar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.58753", - "longitude": "68.00066" - }, - { - "country_name": "Pakistan", - "city_id": 85517, - "city_name": "Kandhkot", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "28.24574", - "longitude": "69.17974" - }, - { - "country_name": "Pakistan", - "city_id": 85518, - "city_name": "Kandiari", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.9155", - "longitude": "68.52193" - }, - { - "country_name": "Pakistan", - "city_id": 85519, - "city_name": "Kandiaro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.05918", - "longitude": "68.21022" - }, - { - "country_name": "Pakistan", - "city_id": 85521, - "city_name": "Karachi", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.8608", - "longitude": "67.0104" - }, - { - "country_name": "Pakistan", - "city_id": 85523, - "city_name": "Karaundi", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.89709", - "longitude": "68.40643" - }, - { - "country_name": "Pakistan", - "city_id": 85524, - "city_name": "Kario Ghanwar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.80817", - "longitude": "68.60483" - }, - { - "country_name": "Pakistan", - "city_id": 85526, - "city_name": "Kashmor", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "28.4326", - "longitude": "69.58364" - }, - { - "country_name": "Pakistan", - "city_id": 85529, - "city_name": "Keti Bandar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.14422", - "longitude": "67.45094" - }, - { - "country_name": "Pakistan", - "city_id": 85531, - "city_name": "Khadro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.14713", - "longitude": "68.71777" - }, - { - "country_name": "Pakistan", - "city_id": 85532, - "city_name": "Khairpur", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "28.06437", - "longitude": "69.70363" - }, - { - "country_name": "Pakistan", - "city_id": 85533, - "city_name": "Khairpur Mir\u2019s", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.52948", - "longitude": "68.75915" - }, - { - "country_name": "Pakistan", - "city_id": 85534, - "city_name": "Khairpur Nathan Shah", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.09064", - "longitude": "67.73489" - }, - { - "country_name": "Pakistan", - "city_id": 85542, - "city_name": "Khanpur Mahar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.84088", - "longitude": "69.41302" - }, - { - "country_name": "Pakistan", - "city_id": 85554, - "city_name": "Kot Diji", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.34156", - "longitude": "68.70821" - }, - { - "country_name": "Pakistan", - "city_id": 85565, - "city_name": "Kotri", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.36566", - "longitude": "68.30831" - }, - { - "country_name": "Pakistan", - "city_id": 85569, - "city_name": "Kunri", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.17874", - "longitude": "69.56572" - }, - { - "country_name": "Pakistan", - "city_id": 85573, - "city_name": "Lakhi", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.84884", - "longitude": "68.69972" - }, - { - "country_name": "Pakistan", - "city_id": 85578, - "city_name": "Larkana", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.55898", - "longitude": "68.21204" - }, - { - "country_name": "Pakistan", - "city_id": 85587, - "city_name": "Madeji", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.75314", - "longitude": "68.45166" - }, - { - "country_name": "Pakistan", - "city_id": 85591, - "city_name": "Malir Cantonment", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.94343", - "longitude": "67.20591" - }, - { - "country_name": "Pakistan", - "city_id": 85601, - "city_name": "Matiari", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.59709", - "longitude": "68.4467" - }, - { - "country_name": "Pakistan", - "city_id": 85602, - "city_name": "Matli", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.0429", - "longitude": "68.65591" - }, - { - "country_name": "Pakistan", - "city_id": 85603, - "city_name": "Mehar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.18027", - "longitude": "67.82051" - }, - { - "country_name": "Pakistan", - "city_id": 85612, - "city_name": "Miro Khan", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.75985", - "longitude": "68.09195" - }, - { - "country_name": "Pakistan", - "city_id": 85613, - "city_name": "Mirpur Bhtoro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.72852", - "longitude": "68.2601" - }, - { - "country_name": "Pakistan", - "city_id": 85615, - "city_name": "Mirpur Khas", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.5276", - "longitude": "69.01255" - }, - { - "country_name": "Pakistan", - "city_id": 85616, - "city_name": "Mirpur Mathelo", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "28.02136", - "longitude": "69.54914" - }, - { - "country_name": "Pakistan", - "city_id": 85617, - "city_name": "Mirpur Sakro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.54692", - "longitude": "67.62797" - }, - { - "country_name": "Pakistan", - "city_id": 85618, - "city_name": "Mirwah Gorchani", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.30981", - "longitude": "69.05019" - }, - { - "country_name": "Pakistan", - "city_id": 85620, - "city_name": "Mithi", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.73701", - "longitude": "69.79707" - }, - { - "country_name": "Pakistan", - "city_id": 85621, - "city_name": "Moro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.66317", - "longitude": "68.00016" - }, - { - "country_name": "Pakistan", - "city_id": 85630, - "city_name": "Nabisar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.06717", - "longitude": "69.6434" - }, - { - "country_name": "Pakistan", - "city_id": 85634, - "city_name": "Nasirabad", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.38137", - "longitude": "67.91644" - }, - { - "country_name": "Pakistan", - "city_id": 85636, - "city_name": "Naudero", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.66684", - "longitude": "68.3609" - }, - { - "country_name": "Pakistan", - "city_id": 85637, - "city_name": "Naukot", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.85822", - "longitude": "69.40153" - }, - { - "country_name": "Pakistan", - "city_id": 85639, - "city_name": "Naushahro Firoz", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.8401", - "longitude": "68.12265" - }, - { - "country_name": "Pakistan", - "city_id": 85640, - "city_name": "Nawabshah", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.23939", - "longitude": "68.40369" - }, - { - "country_name": "Pakistan", - "city_id": 85642, - "city_name": "New B\u0101d\u0101h", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.34167", - "longitude": "68.03194" - }, - { - "country_name": "Pakistan", - "city_id": 85653, - "city_name": "Pad Idan", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.77455", - "longitude": "68.30094" - }, - { - "country_name": "Pakistan", - "city_id": 85657, - "city_name": "Pano Aqil", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.85619", - "longitude": "69.11111" - }, - { - "country_name": "Pakistan", - "city_id": 85666, - "city_name": "Pir Jo Goth", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.59178", - "longitude": "68.61848" - }, - { - "country_name": "Pakistan", - "city_id": 85669, - "city_name": "Pithoro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.51122", - "longitude": "69.37803" - }, - { - "country_name": "Pakistan", - "city_id": 85678, - "city_name": "Rajo Khanani", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.98391", - "longitude": "68.8537" - }, - { - "country_name": "Pakistan", - "city_id": 85679, - "city_name": "Ranipur", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.2872", - "longitude": "68.50623" - }, - { - "country_name": "Pakistan", - "city_id": 85681, - "city_name": "Ratodero", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.80227", - "longitude": "68.28902" - }, - { - "country_name": "Pakistan", - "city_id": 85687, - "city_name": "Rohri", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.69203", - "longitude": "68.89503" - }, - { - "country_name": "Pakistan", - "city_id": 85689, - "city_name": "Rustam", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.96705", - "longitude": "68.80386" - }, - { - "country_name": "Pakistan", - "city_id": 85692, - "city_name": "Sakrand", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.13845", - "longitude": "68.27444" - }, - { - "country_name": "Pakistan", - "city_id": 85693, - "city_name": "Samaro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.28143", - "longitude": "69.39623" - }, - { - "country_name": "Pakistan", - "city_id": 85695, - "city_name": "Sanghar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.04694", - "longitude": "68.94917" - }, - { - "country_name": "Pakistan", - "city_id": 85698, - "city_name": "Sann", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.0403", - "longitude": "68.13763" - }, - { - "country_name": "Pakistan", - "city_id": 85703, - "city_name": "Sehwan", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.42495", - "longitude": "67.86126" - }, - { - "country_name": "Pakistan", - "city_id": 85704, - "city_name": "Setharja Old", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.2127", - "longitude": "68.46883" - }, - { - "country_name": "Pakistan", - "city_id": 85706, - "city_name": "Shahdad Kot", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.84726", - "longitude": "67.90679" - }, - { - "country_name": "Pakistan", - "city_id": 85707, - "city_name": "Shahdadpur", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.92539", - "longitude": "68.6228" - }, - { - "country_name": "Pakistan", - "city_id": 85710, - "city_name": "Shahpur Chakar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.15411", - "longitude": "68.65013" - }, - { - "country_name": "Pakistan", - "city_id": 85715, - "city_name": "Shikarpur", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.95558", - "longitude": "68.63823" - }, - { - "country_name": "Pakistan", - "city_id": 85723, - "city_name": "Sinjhoro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.03008", - "longitude": "68.80867" - }, - { - "country_name": "Pakistan", - "city_id": 85734, - "city_name": "S\u012bta Road", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.03333", - "longitude": "67.85" - }, - { - "country_name": "Pakistan", - "city_id": 85725, - "city_name": "Sobhodero", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.30475", - "longitude": "68.39715" - }, - { - "country_name": "Pakistan", - "city_id": 85730, - "city_name": "Sukkur", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.70323", - "longitude": "68.85889" - }, - { - "country_name": "Pakistan", - "city_id": 85737, - "city_name": "Talhar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.88454", - "longitude": "68.81437" - }, - { - "country_name": "Pakistan", - "city_id": 85739, - "city_name": "Tando Adam", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.76818", - "longitude": "68.66196" - }, - { - "country_name": "Pakistan", - "city_id": 85740, - "city_name": "Tando Allahyar", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.4605", - "longitude": "68.71745" - }, - { - "country_name": "Pakistan", - "city_id": 85741, - "city_name": "Tando Bago", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.78914", - "longitude": "68.96535" - }, - { - "country_name": "Pakistan", - "city_id": 85742, - "city_name": "Tando Jam", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.42813", - "longitude": "68.52923" - }, - { - "country_name": "Pakistan", - "city_id": 85743, - "city_name": "Tando Mitha Khan", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.99625", - "longitude": "69.20251" - }, - { - "country_name": "Pakistan", - "city_id": 85744, - "city_name": "Tando Muhammad Khan", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.12384", - "longitude": "68.53677" - }, - { - "country_name": "Pakistan", - "city_id": 85746, - "city_name": "Tangwani", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "28.27886", - "longitude": "68.9976" - }, - { - "country_name": "Pakistan", - "city_id": 85750, - "city_name": "Tharu Shah", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "26.9423", - "longitude": "68.11759" - }, - { - "country_name": "Pakistan", - "city_id": 85751, - "city_name": "Thatta", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "24.74745", - "longitude": "67.92353" - }, - { - "country_name": "Pakistan", - "city_id": 85752, - "city_name": "Thul", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "28.2403", - "longitude": "68.7755" - }, - { - "country_name": "Pakistan", - "city_id": 85756, - "city_name": "Ubauro", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "28.16429", - "longitude": "69.73114" - }, - { - "country_name": "Pakistan", - "city_id": 85757, - "city_name": "Umarkot", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.36329", - "longitude": "69.74184" - }, - { - "country_name": "Pakistan", - "city_id": 85758, - "city_name": "Umerkot District", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "25.37", - "longitude": "69.73" - }, - { - "country_name": "Pakistan", - "city_id": 85765, - "city_name": "Warah", - "state_id": 3175, - "state_name": "Sindh", - "latitude": "27.44805", - "longitude": "67.79654" - } -] diff --git a/hawqal/cities.py b/hawqal/cities.py index 5ea79a9..54220bd 100644 --- a/hawqal/cities.py +++ b/hawqal/cities.py @@ -49,12 +49,15 @@ def getCities(country_name="", state_name="", filter=CityFilter()): cursor = databaseConnection() query = "SELECT " + str(filter) + " FROM cities" - if country_name != "": + if country_name != "" and state_name != "": + query = query + \ + f" WHERE country_name = '{string.capwords(country_name)}' AND state_name = '{string.capwords(state_name)}'" + elif country_name != "": query = query + \ - f" WHERE country_name = '{string.capwords(country_name)}'" + f" WHERE country_name = '{string.capwords(country_name)}'" elif state_name != "": query = query + \ - f" WHERE state_name = '{string.capwords(state_name)}'" + f" WHERE state_name = '{string.capwords(state_name)}'" cursor.execute(query) @@ -110,13 +113,13 @@ def getCity(country_name="", state_name="", city_name="", filters=CityFilter()): query = "SELECT " + str(filters) + " FROM CITIES " if country_name != "": query = query + \ - f"WHERE country_name='{string.capwords(country_name)}' AND city_name='{string.capwords(city_name)}' " + f"WHERE country_name='{string.capwords(country_name)}' AND city_name='{string.capwords(city_name)}' " elif state_name != "": query = query + \ - f"Where state_name='{string.capwords(state_name)}' and city_name='{string.capwords(city_name)}'" + f"Where state_name='{string.capwords(state_name)}' and city_name='{string.capwords(city_name)}'" elif country_name != "" and state_name != "": query = query + \ - f"Where state_name='{string.capwords(state_name)}' and country_name='{string.capwords(country_name)} and city_name='{string.capwords(city_name)}' '" + f"Where state_name='{string.capwords(state_name)}' and country_name='{string.capwords(country_name)} and city_name='{string.capwords(city_name)}' '" else: query = query + f"where city_name='{string.capwords(city_name)}'" diff --git a/undefined b/undefined deleted file mode 100644 index e69de29..0000000 From 5f27012f0e35b1058275141aa2919a88dc584447 Mon Sep 17 00:00:00 2001 From: Husnain_Khurshid Date: Fri, 6 Jan 2023 16:57:21 +0500 Subject: [PATCH 14/18] fix: (json code correction and functions updated) --- hawqal/country.py | 3 +-- hawqal/filters/country_filter.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/hawqal/country.py b/hawqal/country.py index 098bc59..df1e637 100644 --- a/hawqal/country.py +++ b/hawqal/country.py @@ -47,7 +47,6 @@ def getCountries(filter=CountryFilter()): query = "SELECT " + str(filter) query = query + " FROM countries ORDER BY country_name ASC" - print(query) cursor.execute(query) return convertJson(cursor) @@ -97,7 +96,7 @@ def getCountry(country_name="", filter=CountryFilter()): if country_name != "": query = query + \ - f" WHERE country_name = '{string.capwords(country_name)}' ORDER BY country_name ASC" + f" WHERE country_name = '{string.capwords(country_name)}' ORDER BY country_name ASC" cursor.execute(query) diff --git a/hawqal/filters/country_filter.py b/hawqal/filters/country_filter.py index 2aee2c7..f072591 100644 --- a/hawqal/filters/country_filter.py +++ b/hawqal/filters/country_filter.py @@ -1,5 +1,5 @@ class CountryFilter: - def __init__(self, country_name=True, iso_code=True, phone_code=True, capital=True, currency=True, currency_name=True, currency_symbol=True, country_domain=True, region=True, subregion=-True, timezone=True, zone_city=True, UTC=True, latitude=True, longitude=True): + def __init__(self, country_name=True, iso_code=True, phone_code=True, capital=True, currency=True, currency_name=True, currency_symbol=True, country_domain=True, region=True, subregion=True, timezone=True, zone_city=True, UTC=True, latitude=True, longitude=True): self.country_name = country_name self.longitude = longitude self.latitude = latitude diff --git a/setup.py b/setup.py index 82695cc..6abf437 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ def read(fname): setup( name="hawqal", - version="0.1.5.9", + version="0.0.1", description="Python package that contains the data of world's countries,states and their cities name", long_description_content_type="text/markdown", long_description=read('README.md'), From 8dd43b70d9ab2af8d60033769f3755a77438d21e Mon Sep 17 00:00:00 2001 From: Usama Altaf <62393328+usamadevops@users.noreply.github.com> Date: Fri, 6 Jan 2023 17:08:26 +0500 Subject: [PATCH 15/18] Update setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6abf437..1e95f03 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ def read(fname): setup( name="hawqal", - version="0.0.1", + version="0.1.6", description="Python package that contains the data of world's countries,states and their cities name", long_description_content_type="text/markdown", long_description=read('README.md'), From b9fd1938f600b63e47b9854ee90a3cbd86a64e65 Mon Sep 17 00:00:00 2001 From: Husnain_Khurshid Date: Mon, 9 Jan 2023 16:29:56 +0500 Subject: [PATCH 16/18] docs: (output screenshots added) --- screenshots/11.PNG | Bin 0 -> 20805 bytes screenshots/22.PNG | Bin 0 -> 10102 bytes screenshots/33.PNG | Bin 0 -> 8466 bytes screenshots/44.PNG | Bin 0 -> 8890 bytes screenshots/55.PNG | Bin 0 -> 13966 bytes screenshots/66.PNG | Bin 0 -> 4530 bytes screenshots/77.PNG | Bin 0 -> 2279 bytes screenshots/88.PNG | Bin 0 -> 5397 bytes setup.py | 2 +- 9 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 screenshots/11.PNG create mode 100644 screenshots/22.PNG create mode 100644 screenshots/33.PNG create mode 100644 screenshots/44.PNG create mode 100644 screenshots/55.PNG create mode 100644 screenshots/66.PNG create mode 100644 screenshots/77.PNG create mode 100644 screenshots/88.PNG diff --git a/screenshots/11.PNG b/screenshots/11.PNG new file mode 100644 index 0000000000000000000000000000000000000000..443f2ad1cf39acd6245bd3de19f9afbc45c143e6 GIT binary patch literal 20805 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 literal 0 HcmV?d00001 diff --git a/screenshots/22.PNG b/screenshots/22.PNG new file mode 100644 index 0000000000000000000000000000000000000000..385a9e2eeaaafa4c9c5eaad27297a0cdd2d1bdd9 GIT binary patch literal 10102 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 F`#)Mf*}nh) literal 0 HcmV?d00001 diff --git a/screenshots/33.PNG b/screenshots/33.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2f03dd4f71d3b7601e3406733d4e60c607ef0a43 GIT binary patch literal 8466 zcmZvB30P8F|L)pgXwGG&=75%EqJo(@AmRil2;6Pocfb3;_a2^SKd@n~#aes4>-YZN_jm2cVOJH! zwTb`$l>__t9t8km!xyB0g1;$hOQ?k3ptz&1dq8=+?ihR{7rOh4Ckwk0<$a`?(h$+mWseo}}&S|Chy>(T#s?7#kYf%)IS& z>VRn~K*>?k@|&{E9E=7>UEbZ4iCHqKPziwceExbfMb1gsao8r`&I*3o%v70H3%HZ;X>JN+i-Afz}}ay5Rez zdHzdoDg&TE{xwjTVG$513t9<4>GU+D8$uCFZ)?EAY(*AkXj|qLL15%6WXD2=)8&M@ zIoT`-3EKAp_oc`3fGlUfw3yI!_|=6O%YdyCRJynzmWYQe9?zPd0koHJD`4)lw2c2f zTjWia{cF}P*@8$YMyttbw|r?D8RZJGb(Rh*CP&0VUI1yu%xwD8b$I!hOz7tws$p6% zpywRy?CKB4xd8OSf&qT|xZD(I02-*(5?pu>{H&Vv2)%+0S|{h5XC}Q$mk(NH_fJDu zKN-@~5FfoRe}P_QVBc*PdSI3vp~6n{{ray^^E~4RJ7$4UD0YqXToA4%jpUx=e`!4^ zDTU%b8T7s&DEw)3Tzt}3mf9qJK)MsP-W%6wYN>z82Gg)ThwuegEO7I-(?9B7lNOuR zd2aRWPOInc^pVER`h@l&CA$?67Fp98wGBV!B)If_UBF0u8Sqzb{s3MG|9rpOtM+-Q zX|YHfSzr7#ZIXZL%BJ`ShyDC6C_towYWGEPSjqxN|7D@3Tuhl{rk9T^4f->(c&H=p z&1tlUH-G-TE{6SFfvxjQB`VPJaH!p2UEf)-5lP;GtZf~x?*b)x46%@?BQ6;$BjirF zOE9Q}o)CrN>hiSI$L_>aH5mE({vJOh8rl7MtixvA2j7mcqUT(>v$w)i^?jN&lN1q2 zF=ez$lu7;Ja6Cs3Jc9hRyYFZqG^0#Vj6%_6+WD$Y`+A?|Zbx?eFx;FMwj5_Sa1qalknXFIw#s`aC%#d> zRg-j?mwQ~Fv+|JnI?A(<7pl!x$9o45?OcU=U!Kn730G4bIS%MD(Z`X)Ekh$mS~@E| z!0Y()vWN{#Q~nnZ5AoNTWO0AWPTj`PkE(-(L!(};3&N~gn;iF%5#olZylHuxJ%F`W z%l4!U^)YLmKw_lxro#VhCzbHX>!XBE@L_e7m^mn?F+DV}8Pb3we^)L)U_ z;^cRcrzN#{ol?ItNx2=Npe6KUx=XlsGVrQ^#+ zz-Jj~E`<#;fb77+%4<}!cdW{nZ|B&=^z&2TI=E+0Twkxn9by~b9 zYU;bxgFe5fr~1a5lM7tWu5(8CbUM6C2FkR+&z&+-ZtBIzr4#h6mLUI3Lx29}l?rif z;`}A~v;8ytGUm(dC^UZS3Yv{2t7Z07-@~9!9p?i~TNx}1?U0aJ>ki{{H6-*Nw~u=^ zZN{u@*?t6Pzl}~{zX=}c@dOR(xjO#1z zFbvLB`|VgYqMKmw>}F@vhG=)Ytx2CI+)@?TR`67hDzd#c=EZbwTgYmohGrZ*5Z==z z_=N9*CR(2+8;ji4v!5V;>yU)cDe zWo5T0CmDIrHVzkSTiAx_YdZc8SLRX`+x}F=Zq-CGYFEvz@zGZwiXC{s}<0Kjmg_ua3HN zVI60H`Osd%92(`4{OWOlsZK*0;29Tu09}Y;V$xcvrX(`&K0rlX1Nu%{PK`y+WzlAj z*5kRs)l1#c7r^{+Bf9b-W{gYWfqG!{4;&JVop3|~Q` zL{|dqJv(v_4z|qCw+`hsqF(^j;?~oBym)EVHr^6x{0^EAz5G-7UVv_&&?cliO0OA_^1#R ztJI6;_`5SyZ6PzU9tt(Th$2Q|7%QK<~Q7Hp9Uqpne3UtU9 z+9sItZA}c)&B8p_f&3hxuM1_>|3a7LN*K56xNh0U`TD6ZT*qW_nLuysDo?>Q%2|g!yBuavJNz!W7`n5O5B7+P7VTpy`IPg` z+}=bZgcjKXkpu$qN|zo=sWlTPveno_y{y-g`bca7Kqq4H?)%`#eg8t6Rkhuw4(~oJ zb;Qnz<9nq8s!mwGee>7K;e%p^K<;?>6{%`5$QFBWNeE&W<@@xxCO#{%Pm0a&2>Rwg zd6nIYkI*AjFAmevQ0nS5o6oN%Mo?*b3Tc)Fs3Us%m04#bWJtUbl zP&^zaS#Ru7-bdx-RAq#DJ$*$vhi$YTxmi|*#*`$B`DzoPa1x9~M&bS9&K_4QnpHll z|F1^mZ@KCIN)NZkZ&G2`aC3^jxnOt=rT&~qOf2@BEI4&XNU?Mv85?w=QX1RSF^!z^ zhjCj9S!C9Ek_zLs`_fr(85z{jCT@M(IYK0RF3; zMr|_@+HpJTZ`6nrE4ie1+*0K$`VJL}d@Bxd{PR~znCv$MxsFmJD~%54h+|W)_0|)| zpOC(;6iwGi8hC}!6SABnW}6d7du2>U%(7_%rv=zjv7e;S@K zvI^CAnl+BuH-6SFO4}1%U;2%{_9jWW!(8sRqy&`LvTEX+Sj_m_4$XvZougF$mnxc{ zCc^m)$WF)?StIttV;^~4YK;6#^)y=R4}1Zm2H_RWA`+Gzid?e_c@R!8_ZEwSnZ)VA zXSt+tOaztp`mTaf(^?*( z19X-W*eRvJy!P&fxVo<(Vp+^{zk!lYLv#gSD&c&PhRsAS2iBN(dj^Se2y!T+yJ#A z(yAh~2F;t$@^Y5DE+d_E4bnxKCFVX-4dHERN=Rc{2*lf*7PIy(!{h9ix#n{Z;NwwO zRqZcWYz~);>E@YWab2knGlI+NUR~60Y5i+<;TuOhdeM$eF1|U+0X^-#{N#IS4rL+^ z{f{@fQWe5`zG2%uFkRYGlmmmBu9{!RGww0acV?vMp@qplf7>{na$3p>`&ZK{(}H%m z9mRPPOVeruB!sQG1_O7w^*S}QkBKuo=V-#~@OuSd(qu8Dt?G9M6%QrYWw z@x$iQq6U7uow*@-$8LGKUrC^_s7J4M*LwVjiB^V1(F&UFUBB{b6zhHQP~Vl-POnT8 z4O;v^2HNLjR^w&gQ|;6f>j$!9X`02^Q7ml<=_$^|mI9Wj01pP9hKeiOx&$j|VBp3Q zix)K(mBK8Z;_6BwhKeVd-Gge1`7Dwv2~D$y*RI~sC{202&Mx@O?N1%wCl0k3N4flL z;U|>&;&M53(y9YJ%{aBh@}Q)(9s`LUvi&UEGU>V7(vdVzpa%<CT?eG<4aZokMX%25wgtgr^^5^N zx@ax!Lzejn(krv^I=)VUC;lmTrSED4(PV){t8%PbCY1N%3gzx+7LDmHt<5!U6rtu52`y@hmobCVhY zh6sS(&^sYrrohMLhftpv+)tnA+kh`tBkAK1T1zU=Kv_NT$Y)qToaC4z=k#3#gkwy~ z9Pc&KCQ%3ySno!7TalX)^QiAV)Q5o|@!={osVVN^=Cf5}r=T2K#6XUrawRallD&ttUP)cXKsG9xgGJ4LP>KyU&a~d!#=AmbnQ`M*# zd-BI^gWLM-_P>V?cYO?5o)&XVOsvn93|}e@s%i8Yupm8?`4N0@ci(YO56-G?o96@> zBr`pCrp**GGdrKg$=aCB;-~S8i!+ypWZ6-gYp7K%3;ocFJuQ?p%ccgewP%fxJ zkgXQ+L+9yCOQrz>Qcw2Sv|5Yk%#X=0`L7cmj^u`+C`A( zI()PXs@iVqImn0op}}QBEy1psF?ZP@s7HJ;-dQDBm&mpU`Ww6_IoI42Y!6GpchR1Xbm4E3-x9P zpl>|lQJEPsLbuyp>wfC4Dp6jqCPp)xQ2Lm(nYS>!OY}5hF~4`3#guhbisbfLm>lH4 zbaV{tyCr&m?pamZ#c3r^1H8QErA8t5o$lu+i=DDbesxw|n)TIARKU|3mH%-z2nE-| zSOY-)rM?Lxd~0aZ!u0d%=(-zo^PiZ_qOBa3kL-Svfn(ZuO)W`wa(=`rvFGm;R;h2v zWVUpXEP7YzSurcTe@+7qw&qKPWW zT^K|f-f*Tt6ZrgNj7=v;tN3EV##cl$x?{xeM+d$*Zg-7l?UEoQ5Q7R;)=+@u(?#fShEI^YJO+xOZ+VV{>2#8r#sHiCYSf% zKK=mTmU*#y4+me~8p}E^f4I_& z8X=<8ln(qo;U=F|{`H{*vrkxZ0)rX&9mARTD!nN`WhXavNOuj*VWLlYd)}3-q4A{ z5$6kV`FV6&GbNZ8m;jYwP_yHC|AMkI2Z)T^SkDVXGEAeZ2?+=L_eLwJTaoqbo7d{@0 zOnrJD`%^SVKhjI88Ilj!g_sXnbb5gfvQ;VigZAj+MpVw)NpJEa9hF6mC4ykN zsT&!g=1;41!aY{!Dj_Fz!HYhX=B-5|!9f>-{|?!FIkemwlCMbbUJz5`->bw?V z_SZ38=oFVf#Vlb;7sEp~40&-#U81s~#~e*otH1)@r211JGrhaOo|&gF%njOQaysb2 zR@$qI7I}6r;N-EkR*2H;hR6(53?@Wbv~KP#oRrq4Ql6m0#I}0|WEU_W={N2+5!Roe z`%vSFtog+(eOi`9(z+#g$QE{o!VL1oX@8;Ug-};tQ%kzF^31F#cF*TyxVXBb3m?E$ zj?UXyqaL2_&5rhkk$32vZX2R@tU!qOearA+oz)|Bj0BZOhYX$TZX|4)B>NzYnr~wA(Sp21!kV zM*E^WAMDEyk9~CCP{S48<()e(TT0yQ@Roq%R3OiudZkO7DID660gw$XPF^F)rPZrX`MdI=zBca>iyN3Y-td!7EpJu`BV9vIQ%{P!t4a`eOS2u zQG3Ym1uk4{FP6ufDX`yiRRe+~X68x(xC060xHI$;{qZNKJb_Ius|p9YFT%#vBxpzc zh{8%vp83Fz5ix36$I{lI7u(*XH?dd#7Nap}bX~)by;&h3AZ8{7 z=C`CZ|0yQ@zhO$g2rW?8Uw4aDRT5?RYIM#0-bg#%PjSHeG#?3x(N9tffGbHLSv~;$ z?h-17tN){Baux098uy!fJ!COz#FH)nN%&6q)36~pe$S6a;fWm0eq-RE20PNQ*$3ID?zvqUUxWC( z#bOzE1r*V)?mO)A$n{91o3g(rWkLfGG67|U75;?Rd*Sg>xLtjh)j@A*sdmK$#LG=; zRv(V9J->cRatE!%$StLK5WqaVPdDyEZ{koB{$kKI=%LV4h47Mpu)Re0_h%#9jt|SN zJ4?kyFIq#k9xxi54ys{Uu!-CTtV2p2js)SiBR-=^lpqhK0KJD7ytg&xYDap&ayWnM zi^wrP>9*wVIN7sGvWwaHZ%D9D#mrMqd;<6s~IoM)~5VsA;?&QjHivpQj~d8a=+rhZ9MbzgVIQNOr@nT;FP)B zTjq$FYz9$v4tS=ds`DY&SGZq1RnV*9e)`+Fov)-|@*1Gr@&Qk)su$9}44b)V)D-k? znCud*wB32L6n}^#JZb_LB)+$~jfzei$;GaHmSKw5hj->KqPrgR@Ya~n$Ev$SP|zW= zhbB0WYnfZ<7@@5R-kIEPY&&?nGMU?o;U|4bMSvYJtAs(%?}Ze3%2n)ej<^?UXoJ8V zwOm#*nc1DI^`_jc)d9lm!f-0af2%4#a~D`QocAv5?AH;lELR(PPQdzBihTYvP$~ZI z+kyOhDr;$Jjz^=~@UEc+PDWfIufOCFXxBt~QTn};+2VoNiBS2N(ZuEWB;88T^`|j! zI1KXhb$qa*CCeHWk$h1-G%L(ESyFb|vCMjMweaycha>wb07(vTXgWs|rj|T|(kRN~ zZ$kVrMD@0dXI?Jhfy?L;27e6x!I(}Yc1rKW3e&8eZ8#O%Xs`*Kzzgm)qpm!{(E*zV zSN`^YN=?6X)Qj@f#spnDXrvAAAi zc>tg-hrgkoLM~N}^EXSj8v-zJ4R|yt-}k)*K+_*k8(}@RCVi1Pbh=vJ>Kff?+7mdzYgp>ytjN$z{URs9PLrx literal 0 HcmV?d00001 diff --git a/screenshots/44.PNG b/screenshots/44.PNG new file mode 100644 index 0000000000000000000000000000000000000000..1e4d6a8b31f6d729ea6f2685e936781040731552 GIT binary patch literal 8890 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 literal 0 HcmV?d00001 diff --git a/screenshots/55.PNG b/screenshots/55.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7b9987f5e3e6e5de24cae59200d533a012bf0e13 GIT binary patch literal 13966 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 literal 0 HcmV?d00001 diff --git a/screenshots/66.PNG b/screenshots/66.PNG new file mode 100644 index 0000000000000000000000000000000000000000..47f454e8f813e2a7f39dadcd91d48771da17acf3 GIT binary patch literal 4530 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 Ud^1ga&jOq~bMZ6=dhPaq0Q8V1bpQYW literal 0 HcmV?d00001 diff --git a/screenshots/77.PNG b/screenshots/77.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a304ad5ebee724fb6de3952794c54a6d16b932ab GIT binary patch literal 2279 zcmY+Gc{E%57RQgNVyGxlZXXqumR3=8LW!h?1eaEIwHnu0Q#HnWwT6VNRMo8^?KPAd zYN%R8X$^Tr)X->MJX4E=yp)J3M1mkR?`ZFOZ@oXxZ#a9O{oCJl_FkV~>Ln+;{j!H- z0RY&K#aO!lfEWo}`$G1CW1abZ9yp0by4azCntt_pa3dLj`WXe9GURr=rNF&R7{)CU z02Dg+9x-ZYK#~!_36Cm z_zS_0c;1k(vv6Y(kw~-!fb=660J!>8hO|gfD;juVLZ>dWo~KI#fettnulXf-3a1_w zLAIz55NqgkP(%R#dJ$$D5u4jO-A3;q zHjGF4rj{WwY9k8HS{R_%c@a*YqH0C5T{&D>q9m~0RjvIfj92vt)gf2N? z=c;6?7tz&}Ub}D#NJxk0xf^_0wN#I70Zo3AACur>3BC}L4EQBg5uq%w5w4~d2#tK)k)C&R@6S5Px>6++s#x#Itqz&MBI8^`PHX)=2k z&oB~klaiU19(tigP59i|X?DJ_KZ65p0G(TW?P^-5m(DTjHaKt@t<^)+G~rV?Y5+7f zYm9SRc%gVYED^!c*v)^OPcfV+TB7-)B0NO@7HDJ4iZuqeJHlF_X@YxHyb)9x#^-L$ zOQcjV!bdKs8jEHme1EBQ;k>a~4Ttt32LenpN;!PACWZNj70)@YM}^mI_F#MWx~TP4 zqIJkcNvWwc_C3;T=AlVu3ulIV(f(;puBRf0X{+6AYHj4KVnN!qmJ8$!vV(q& zB2B=FiwpmCc;xMXxgJLT%W_<<+C+@OJmqe5gNf4C)&v_k10gAlX~a+e6FH0!wj!URz`h5Ri9m#PYjD+ZleW@7mClZgC=maHs`ut?}2^UHlClPuvMZF zmZv;}A!_%K#Ok=`mdRZf9jbCUisw7TQ72^u8^grRZUn;+}sy ziV3SwL@+VO!?DFt=cnxS&ez}V5$wjSCL>Nrew@i#84LNS=c4|bjL9oS5Ryp~G_i~ziIt$I ze~nVuYC5|NHYdBfh`!UH348imosOer-Eu#a#NXCjhmf3_wd=MjU6Sq*6PRAa2&pS_<9#F-;c8`%F|tRo~MlP zgx=nS&8Ua-s*BgjezArAv$QMq1htRrSDJ}~XA{dL$ivYT?N45H=7JNtvq24THJeMDqCSQM<5Lo^LbY^Hw1`zuEXjOD+&~n@`T9q00)h<~qUun2b(0 zL^9f@Hd_jYHn3>}%3ztY*z*q;>#L(;%AF}TIHKDFR-@ZJ6AK}Iz^i!RUpyYZ&8aLm=lN&elpQ%T=9o2g8DT%cmZg|hsqFAl!$;wR z6%E-;o_+zxom$y z*3HB&?r?ti75?CpM$i68Bln%^eW?+)LrVCq2IfoFxmp5)CNSx}QGa-s-9262n9;Xh zdeW0ld}}C~N-OzmFp(&WGgqgQOW(UvYVWwdxk63uTG?dIg|X9b(=x}%X|kES^lJ~~ zg^d~28(W-yD3n&BY4Bk*vCC0g$ks&;xN2&Y>x&}p61Vzd>wDhevCzk)^}xXCalsQm zhC4Eura57o`D=#?Fih$H3Nc*UMNG)#c5=&YRj! zUhBh|(CzqRpLo=W-q8Eh068MgnD3f1nVapYQFC(o)`h|N@jVeO#6e2~JX70V_DF)| z0mSBmk#Z=o3wA}-7Ky%1VlR-~Z}0U61CaZNgk6Zz?;tq9>Aj`>9zuQrSIFzHM|IwdTctrrn9YVW0mpz#N$>;opJbW< ziT1-R4|CeOnHQJ@CI& zK&}m0XMRUl?uu>!lX#UX0la-dHc{duQG2|V{(-*#7x0~i;HxBf5X*=Midy>)A?DD* zzgY>!P+SGzp~q(6jl`9g~DZr{{bp}J-hi_5jJ^SLo%`Yt}0E$ZJG z7nLCUr~~JwrhKXe(Ed^Wwjud_C5N*Tumk;bn{rrTJUa`#oB&uGC+ixtSK@yFTAxt@ literal 0 HcmV?d00001 diff --git a/screenshots/88.PNG b/screenshots/88.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ee59944c24c757f4613fe751b2cefc658b0c6e2a GIT binary patch literal 5397 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 literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py index 6abf437..7fd5963 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ def read(fname): setup( name="hawqal", - version="0.0.1", + version="0.0.6", description="Python package that contains the data of world's countries,states and their cities name", long_description_content_type="text/markdown", long_description=read('README.md'), From bac308149d5d41023ca761b1b5ca2f17a4de6e35 Mon Sep 17 00:00:00 2001 From: Husnain_Khurshid Date: Mon, 9 Jan 2023 16:50:37 +0500 Subject: [PATCH 17/18] docs: (output screenshots added) --- screenshots/100.PNG | Bin 0 -> 11294 bytes screenshots/101.PNG | Bin 0 -> 9466 bytes screenshots/102.PNG | Bin 0 -> 5490 bytes screenshots/99.PNG | Bin 0 -> 10994 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 screenshots/100.PNG create mode 100644 screenshots/101.PNG create mode 100644 screenshots/102.PNG create mode 100644 screenshots/99.PNG diff --git a/screenshots/100.PNG b/screenshots/100.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b059d027fe195f26da33d034bb3a0c00cec966ab GIT binary patch literal 11294 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

p^Ta}KvhA&UK1LeV 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 P0hs@8bFs?g#@+t{<1yh( literal 0 HcmV?d00001 diff --git a/screenshots/101.PNG b/screenshots/101.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2edf868bb1ebe4810dd1fcfd070faee2c7dcf9e2 GIT binary patch literal 9466 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 literal 0 HcmV?d00001 diff --git a/screenshots/102.PNG b/screenshots/102.PNG new file mode 100644 index 0000000000000000000000000000000000000000..1f50a3dc0ce826b210f7032f2cc6489d41e3c1be GIT binary patch literal 5490 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 literal 0 HcmV?d00001 diff --git a/screenshots/99.PNG b/screenshots/99.PNG new file mode 100644 index 0000000000000000000000000000000000000000..83c4b48cfb69285081ade17eea689730f4cafbb4 GIT binary patch literal 10994 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 literal 0 HcmV?d00001 From 187741f400664fb2b3ed919aabd19a46f7375f91 Mon Sep 17 00:00:00 2001 From: Husnain_Khurshid Date: Fri, 13 Jan 2023 17:13:33 +0500 Subject: [PATCH 18/18] fix: (Set default filtering) --- hawqal/cities.py | 16 ++++++++++++---- hawqal/country.py | 15 ++++++++++++--- hawqal/filters/city_filter.py | 4 ++-- hawqal/filters/country_filter.py | 2 +- hawqal/filters/state_filter.py | 2 +- hawqal/states.py | 24 ++++++++++++++++-------- 6 files changed, 44 insertions(+), 19 deletions(-) diff --git a/hawqal/cities.py b/hawqal/cities.py index 54220bd..46a65ef 100644 --- a/hawqal/cities.py +++ b/hawqal/cities.py @@ -47,7 +47,11 @@ def getCities(country_name="", state_name="", filter=CityFilter()): ``` """ cursor = databaseConnection() - query = "SELECT " + str(filter) + " FROM cities" + query = "SELECT " + if len(str(filter)) != 0: + query = query + str(filter) + " FROM cities" + else: + query = query + " * FROM cities" if country_name != "" and state_name != "": query = query + \ @@ -64,7 +68,7 @@ def getCities(country_name="", state_name="", filter=CityFilter()): return convertJson(cursor) @staticmethod - def getCity(country_name="", state_name="", city_name="", filters=CityFilter()): + def getCity(country_name="", state_name="", city_name="", filter=CityFilter()): """ Description:\n getCity function returns data of a single city JSON format @@ -110,10 +114,14 @@ def getCity(country_name="", state_name="", city_name="", filters=CityFilter()): cursor = databaseConnection() if city_name == "": raise ValueError("City name must be set") - query = "SELECT " + str(filters) + " FROM CITIES " + query = "SELECT " + if len(str(filter)) != 0: + query = "SELECT " + str(filter) + " FROM cities " + else: + query = query + " * FROM cities " if country_name != "": query = query + \ - f"WHERE country_name='{string.capwords(country_name)}' AND city_name='{string.capwords(city_name)}' " + f" WHERE country_name='{string.capwords(country_name)}' AND city_name='{string.capwords(city_name)}' " elif state_name != "": query = query + \ f"Where state_name='{string.capwords(state_name)}' and city_name='{string.capwords(city_name)}'" diff --git a/hawqal/country.py b/hawqal/country.py index df1e637..0d4619d 100644 --- a/hawqal/country.py +++ b/hawqal/country.py @@ -44,9 +44,13 @@ def getCountries(filter=CountryFilter()): ``` """ cursor = databaseConnection() - query = "SELECT " + str(filter) + query = "SELECT " + if len(str(filter)) != 0: + query = query + str(filter) - query = query + " FROM countries ORDER BY country_name ASC" + query = query + " FROM countries ORDER BY country_name ASC" + else: + query = query + " * FROM countries ORDER BY country_name ASC" cursor.execute(query) return convertJson(cursor) @@ -92,7 +96,12 @@ def getCountry(country_name="", filter=CountryFilter()): if country_name == "": raise ValueError("country_name must be set") - query = "SELECT " + str(filter) + " FROM countries" + query = "SELECT " + + if len(str(filter)) != 0: + query = query + str(filter) + " FROM countries " + else: + query = query + " * FROM countries " if country_name != "": query = query + \ diff --git a/hawqal/filters/city_filter.py b/hawqal/filters/city_filter.py index 8ffa2cb..fa3669d 100644 --- a/hawqal/filters/city_filter.py +++ b/hawqal/filters/city_filter.py @@ -1,6 +1,6 @@ class CityFilter: - def __init__(self, city_id=True, city_name=True, state_name=True, state_id=True, country_name=True, latitude=True, - longitude=True): + def __init__(self, city_id=False, city_name=False, state_name=False, state_id=False, country_name=False, latitude=False, + longitude=False): self.country_name = country_name self.longitude = longitude self.latitude = latitude diff --git a/hawqal/filters/country_filter.py b/hawqal/filters/country_filter.py index f072591..4af8891 100644 --- a/hawqal/filters/country_filter.py +++ b/hawqal/filters/country_filter.py @@ -1,5 +1,5 @@ class CountryFilter: - def __init__(self, country_name=True, iso_code=True, phone_code=True, capital=True, currency=True, currency_name=True, currency_symbol=True, country_domain=True, region=True, subregion=True, timezone=True, zone_city=True, UTC=True, latitude=True, longitude=True): + def __init__(self, country_name=False, iso_code=False, phone_code=False, capital=False, currency=False, currency_name=False, currency_symbol=False, country_domain=False, region=False, subregion=False, timezone=False, zone_city=False, UTC=False, latitude=False, longitude=False): self.country_name = country_name self.longitude = longitude self.latitude = latitude diff --git a/hawqal/filters/state_filter.py b/hawqal/filters/state_filter.py index e923928..49d7d00 100644 --- a/hawqal/filters/state_filter.py +++ b/hawqal/filters/state_filter.py @@ -1,5 +1,5 @@ class StateFilter: - def __init__(self, state_id=True, state_name=True, country_name=True, longitude=True, latitude=True): + def __init__(self, state_id=False, state_name=False, country_name=False, longitude=False, latitude=False): self.state_id = state_id self.state_name = state_name self.country_name = country_name diff --git a/hawqal/states.py b/hawqal/states.py index 3f67bde..c28650e 100644 --- a/hawqal/states.py +++ b/hawqal/states.py @@ -39,12 +39,15 @@ def getStates(country_name="", filter=StateFilter()): ```\n """ cursor = databaseConnection() - - query = "SELECT " + str(filter) + " FROM states" + query = "SELECT " + if len(str(filter)) != 0: + query = query + str(filter) + " FROM states" + else: + query = query + " * FROM states" if len(country_name) > 0: query = query + \ - f' where country_name= "{string.capwords(country_name)}"' + f' where country_name= "{string.capwords(country_name)}"' cursor.execute(query) @@ -85,16 +88,21 @@ def getState(country_name="", state_name="", filter=StateFilter()): if state_name == "": raise ValueError("state_name must be set") cursor = databaseConnection() - query = "SELECT " + str(filter) + " FROM states " + query = "SELECT " + if len(str(filter)) != 0: + query = query + str(filter) + " FROM states " + else: + query = query + " * FROM states " if len(country_name) > 0 and len(state_name) > 0: - query = query + f'where country_name= "{string.capwords(country_name)}" and state_name= "{string.capwords(state_name)}"' + query = query + \ + f'where country_name = "{string.capwords(country_name)}" and state_name = "{string.capwords(state_name)}"' elif len(country_name) > 0: query = query + \ - f'where country_name= "{string.capwords(country_name)}"' + f'where country_name = "{string.capwords(country_name)}"' elif len(state_name) > 0: query = query + \ - f'where state_name= "{string.capwords(state_name)}"' - query = query + " ORDER BY country_name" + f'where state_name = "{string.capwords(state_name)}"' + query = query + " ORDER BY country_name ASC" cursor.execute(query) return convertJson(cursor)