- Geospatial Development By Example with Python
- Pablo Carreira
- 324字
- 2021-07-16 09:30:57
Sort the countries by area size
You programmed three functions so far; now, let's add another one to our list by converting the code that generated a list of country names to a function and add this function to world_areas.py
, as follows:
def get_country_names(datasource): """Returns a list of country names.""" layer = datasource.GetLayerByIndex(0) country_names = [] layer.ResetReading() for feature in layer: country_names.append(feature.GetFieldAsString(4)) return country_names
Now, we have four functions, which are:
open_shapefile
transform_geometries
calculate_areas
get_country_names
All these functions return iterables, with each item sharing the same index on all of them, thus making it easy to combine the information.
So, let's take advantage of this feature to sort the countries by area size and return a list of the five biggest countries and their areas. For this, add another function, as follows:
def get_biggest_countries(countries, areas, elements=5): """Returns a list of n countries sorted by area size.""" countries_list = [list(country) for country in zip(areas, countries)] sorted_countries = sorted(countries_list, key=itemgetter(0), reverse=True) return sorted_countries[:5]
In the first line, the two lists are zipped together, producing a list of country-area pairs. Then, we used the Python list's sorted
method, but as we don't want the lists to be sorted by both values, we will define the key for sorting. Finally, the list is sliced, returning only the desired number of values.
- In order to run this code, you need to import the
itemgetter
function and put it at the beginning of the code but afterfrom __future__ imports
, as follows:from operator import itemgetter
- Now, edit the testing part of your code to look similar to the following:
datasource = open_shapefile("../data/world_borders_simple.shp") transformed_geoms = transform_geometries(datasource, 4326, 3395) country_names = get_country_names(datasource) country_areas = calculate_areas(transformed_geoms) biggest_countries = get_biggest_countries(country_names, country_areas) for item in biggest_countries: print("{}\t{}".format(item[0], item[1]))
- Now, run the code and take a look at the results, as follows:
Opening ../data/world_borders_simple.shp Number of features: 246 82820725.1423 Russia 51163710.3726 Canada 35224817.514 Greenland 21674429.8403 United States 14851905.8596 China Process finished with exit code 0
- OpenStack Cloud Computing Cookbook(Third Edition)
- Monkey Game Development:Beginner's Guide
- ThinkPHP 5實戰
- 零起步玩轉掌控板與Mind+
- Instant Zepto.js
- React Native Cookbook
- Building Mobile Applications Using Kendo UI Mobile and ASP.NET Web API
- Python應用輕松入門
- TypeScript圖形渲染實戰:基于WebGL的3D架構與實現
- Hands-On RESTful Web Services with Go
- Python機器學習經典實例
- Python數據結構與算法(視頻教學版)
- Kotlin編程實戰:創建優雅、富于表現力和高性能的JVM與Android應用程序
- jQuery炫酷應用實例集錦
- 軟件供應鏈安全:源代碼缺陷實例剖析