geoformat是一个gdal/ogr库覆盖层
geoformat的Python项目详细描述
欢迎使用GeoFormat
简介
GeoFormat是具有MIT许可证的GDAL/OGR覆盖层。 库的目标是简化加载和ogr的“数据源”和“层”操作。 到目前为止,这个库处于alpha模式。这意味着目前这个图书馆的结构 完全面向对象兼容。
安装
$ pip install geoformat
基本操作
地理格式结构
打开地理容器
容器相当于包含一个或多个地理层的文件夹或数据库。
importgeoformatcommune_path='data/FRANCE_IGN/COMMUNE_2016_MPO_L93.shp'gare_path='data/FRANCE_IGN/GARES_PT_L93.shp'layer_list=[commune_path,gare_path]geocontainer=geoformat.ogr_layers_to_geocontainer(layer_list)print(geocontainer['layers'].keys())# >>>dict_keys(['COMMUNE_2016_MPO_L93', 'GARES_PT_L93'])
打开地质层
地理图层相当于数据库中包含一个或多个具有属性和/或特性的文件或表。 几何学。
importgeoformatdepartement_path='data/FRANCE_IGN/DEPARTEMENT_2016_L93.shp'geolayer=geoformat.ogr_layer_to_geolayer(departement_path)print(len(geolayer['features']))# >>>96
打印数据地理层
有时打印终端地理层的属性是有用的。
importgeoformatregion_path='data/FRANCE_IGN/REGION_2016_L93.shp'geolayer=geoformat.ogr_layer_to_geolayer(region_path)forlineingeoformat.print_features_data_table(geolayer):print(line)### >>>+--------+----------+-------------------------------------+------------+------------+|i_feat|CODE_REG|NOM_REG|POPULATION|SUPERFICIE|+========+==========+=====================================+============+============+|0|76|LANGUEDOC-ROUSSILLON-MIDI-PYRENEES|5683878|7243041||1|75|AQUITAINE-LIMOUSIN-POITOU-CHARENTES|5844177|8466821||2|84|AUVERGNE-RHONE-ALPES|7757595|7014795||3|32|NORD-PAS-DE-CALAIS-PICARDIE|5987883|3187435||4|44|ALSACE-CHAMPAGNE-ARDENNE-LORRAINE|5552388|5732928||5|93|PROVENCE-ALPES-COTED'AZUR | 4953675 | 3155736 ||6|27|BOURGOGNE-FRANCHE-COMTE|2819783|4746283||7|52|PAYSDELALOIRE|3660852|2997777||8|28|NORMANDIE|3328364|2728511||9|11|ILE-DE-FRANCE|11959807|1205191||10|24|CENTRE-VALDELOIRE|2570548|3905914||11|53|BRETAGNE|3258707|2702269||12|94|CORSE|320208|875982|+--------+----------+-------------------------------------+------------+------------+
更改地层坐标参考系[CRS]
它可以用来更改层的投影。在本例中,我们将把投影lambert93中的一个地理层[epsg:2154]转换为坐标系wgs84[epsg:4326]。
importgeoformatregion_path='data/FRANCE_IGN/REGION_2016_L93.shp'geolayer=geoformat.ogr_layer_to_geolayer(region_path)geolayer=geoformat.reproject_geolayer(geolayer,out_crs=4326)print(geolayer['metadata']['geometry_ref']['crs'])# >>>4326
在与ogr兼容的gis文件中写入geolayer
显然,您可以将地理层转换为兼容的ogr文件格式。 在本例中,您以“esri shapefile”格式放置了一个地理层,然后我们以“geojson”格式创建了一个新文件(我们添加了一个重新投影,因为geojson应该在wgs84坐标系中)。
importgeoformatgares_shp_path='data/FRANCE_IGN/GARES_L93.shp'gares_geojson_path='data/FRANCE_IGN/GARES_L93.geojson'geolayer=geoformat.ogr_layer_to_geolayer(gares_shp_path)geolayer=geoformat.reproject_geolayer(geolayer,out_crs=4326)geoformat.geolayer_to_ogr_layer(geolayer,gares_geojson_path,'GEOJSON')
在ogr兼容的数据源中编写容器
像geolayer一样,您可以在文件夹或与grg兼容的数据源中编写geoformat容器。 这里我们有一个带有很多层的geocontainer,我们希望将所有这些保存在另一个文件夹中(但它也可以是一个“postgresql”数据库)。
importgeoformat# INPUTcommune_path='data/FRANCE_IGN/COMMUNE_2016_MPO_L93.shp'gare_path='data/FRANCE_IGN/GARES_PT_L93.shp'# OUTPUToutput_folder='data/'layer_list=[commune_path,gare_path]geocontainer=geoformat.ogr_layers_to_geocontainer(layer_list)geoformat.geocontainer_to_ogr_format(geocontainer,output_folder,'kml')