pycoast 1.6.1__tar.gz → 1.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. pycoast-1.7.0/AUTHORS.md +20 -0
  2. {pycoast-1.6.1 → pycoast-1.7.0}/MANIFEST.in +1 -1
  3. pycoast-1.7.0/PKG-INFO +69 -0
  4. {pycoast-1.6.1 → pycoast-1.7.0}/docs/Makefile +1 -0
  5. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/installation.rst +1 -1
  6. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/__init__.py +1 -0
  7. pycoast-1.7.0/pycoast/conftest.py +14 -0
  8. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/cw_agg.py +5 -1
  9. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/cw_base.py +49 -42
  10. pycoast-1.7.0/pycoast/tests/coasts_and_grid.ini +13 -0
  11. pycoast-1.7.0/pycoast/tests/coasts_and_grid_agg.ini +17 -0
  12. pycoast-1.7.0/pycoast/tests/eastern_shapes_agg.png +0 -0
  13. pycoast-1.7.0/pycoast/tests/eastern_shapes_pil.png +0 -0
  14. pycoast-1.7.0/pycoast/tests/grid_europe_agg_txt.png +0 -0
  15. pycoast-1.7.0/pycoast/tests/grid_from_dict_agg.png +0 -0
  16. pycoast-1.7.0/pycoast/tests/grid_from_dict_pil.png +0 -0
  17. pycoast-1.7.0/pycoast/tests/grid_germ.png +0 -0
  18. pycoast-1.7.0/pycoast/tests/grid_nh_agg.png +0 -0
  19. pycoast-1.7.0/pycoast/tests/grid_nh_cfg_agg.png +0 -0
  20. pycoast-1.7.0/pycoast/tests/lonlat_boundary_cross.png +0 -0
  21. pycoast-1.7.0/pycoast/tests/nh_cities_agg.ini +26 -0
  22. pycoast-1.7.0/pycoast/tests/nh_cities_pil.ini +20 -0
  23. pycoast-1.7.0/pycoast/tests/nh_one_shapefile.ini +11 -0
  24. pycoast-1.7.0/pycoast/tests/nh_points_agg.ini +24 -0
  25. pycoast-1.7.0/pycoast/tests/nh_points_pil.ini +19 -0
  26. pycoast-1.7.0/pycoast/tests/no_h_scratch_agg.png +0 -0
  27. pycoast-1.7.0/pycoast/tests/no_h_scratch_pil.png +0 -0
  28. pycoast-1.7.0/pycoast/tests/no_v_scratch_agg.png +0 -0
  29. pycoast-1.7.0/pycoast/tests/no_v_scratch_pil.png +0 -0
  30. pycoast-1.7.0/pycoast/tests/test_data/DejaVuSerif.ttf +0 -0
  31. pycoast-1.7.0/pycoast/tests/test_data/gshhs/CITIES/cities.txt +20 -0
  32. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L1.dbf +0 -0
  33. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L1.prj +1 -0
  34. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L1.shp +0 -0
  35. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L1.shx +0 -0
  36. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L2.dbf +0 -0
  37. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L2.prj +1 -0
  38. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L2.shp +0 -0
  39. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L2.shx +0 -0
  40. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L3.dbf +0 -0
  41. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L3.prj +1 -0
  42. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L3.shp +0 -0
  43. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L3.shx +0 -0
  44. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L4.dbf +0 -0
  45. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L4.prj +1 -0
  46. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L4.shp +0 -0
  47. pycoast-1.7.0/pycoast/tests/test_data/gshhs/GSHHS_shp/l/GSHHS_l_L4.shx +0 -0
  48. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L1.dbf +0 -0
  49. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L1.prj +1 -0
  50. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L1.shp +0 -0
  51. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L1.shx +0 -0
  52. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L2.dbf +0 -0
  53. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L2.prj +1 -0
  54. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L2.shp +0 -0
  55. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L2.shx +0 -0
  56. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L3.dbf +0 -0
  57. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L3.prj +1 -0
  58. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L3.shp +0 -0
  59. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_border_c_L3.shx +0 -0
  60. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L01.dbf +0 -0
  61. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L01.prj +1 -0
  62. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L01.shp +0 -0
  63. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L01.shx +0 -0
  64. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L02.dbf +0 -0
  65. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L02.prj +1 -0
  66. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L02.shp +0 -0
  67. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L02.shx +0 -0
  68. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L03.dbf +0 -0
  69. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L03.prj +1 -0
  70. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L03.shp +0 -0
  71. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L03.shx +0 -0
  72. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L04.dbf +0 -0
  73. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L04.prj +1 -0
  74. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L04.shp +0 -0
  75. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L04.shx +0 -0
  76. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L05.dbf +0 -0
  77. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L05.prj +1 -0
  78. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L05.shp +0 -0
  79. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L05.shx +0 -0
  80. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L06.dbf +0 -0
  81. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L06.prj +1 -0
  82. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L06.shp +0 -0
  83. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L06.shx +0 -0
  84. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L07.dbf +0 -0
  85. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L07.prj +1 -0
  86. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L07.shp +0 -0
  87. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L07.shx +0 -0
  88. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L08.dbf +0 -0
  89. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L08.prj +1 -0
  90. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L08.shp +0 -0
  91. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L08.shx +0 -0
  92. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L09.dbf +0 -0
  93. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L09.prj +1 -0
  94. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L09.shp +0 -0
  95. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L09.shx +0 -0
  96. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L1.dbf +0 -0
  97. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L1.shp +0 -0
  98. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L1.shx +0 -0
  99. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L10.dbf +0 -0
  100. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L10.prj +1 -0
  101. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L10.shp +0 -0
  102. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L10.shx +0 -0
  103. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L11.dbf +0 -0
  104. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L11.prj +1 -0
  105. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L11.shp +0 -0
  106. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L11.shx +0 -0
  107. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L2.dbf +0 -0
  108. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L2.shp +0 -0
  109. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L2.shx +0 -0
  110. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L3.dbf +0 -0
  111. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L3.shp +0 -0
  112. pycoast-1.7.0/pycoast/tests/test_data/gshhs/WDBII_shp/c/WDBII_river_c_L3.shx +0 -0
  113. pycoast-1.7.0/pycoast/tests/test_data/shapes/Metareas.dbf +0 -0
  114. pycoast-1.7.0/pycoast/tests/test_data/shapes/Metareas.mxd +0 -0
  115. pycoast-1.7.0/pycoast/tests/test_data/shapes/Metareas.prj +1 -0
  116. pycoast-1.7.0/pycoast/tests/test_data/shapes/Metareas.sbn +0 -0
  117. pycoast-1.7.0/pycoast/tests/test_data/shapes/Metareas.sbx +0 -0
  118. pycoast-1.7.0/pycoast/tests/test_data/shapes/Metareas.shp +0 -0
  119. pycoast-1.7.0/pycoast/tests/test_data/shapes/Metareas.shx +0 -0
  120. pycoast-1.7.0/pycoast/tests/test_data/shapes/README +3 -0
  121. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BRASIL.dbf +0 -0
  122. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BRASIL.shp +0 -0
  123. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BRASIL.shx +0 -0
  124. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BR_Capitais.dbf +0 -0
  125. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BR_Capitais.shp +0 -0
  126. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BR_Capitais.shx +0 -0
  127. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BR_Contorno.dbf +0 -0
  128. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BR_Contorno.shp +0 -0
  129. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BR_Contorno.shx +0 -0
  130. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BR_Regioes.dbf +0 -0
  131. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BR_Regioes.shp +0 -0
  132. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/BR_Regioes.shx +0 -0
  133. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/divisao_politica.txt +40 -0
  134. pycoast-1.7.0/pycoast/tests/test_data/shapes/divisao_politica/leia.txt +9 -0
  135. pycoast-1.7.0/pycoast/tests/test_data/shapes/metarea5.gsf +0 -0
  136. pycoast-1.7.0/pycoast/tests/test_data/shapes/metarea5.tbl +21 -0
  137. pycoast-1.7.0/pycoast/tests/test_data/shapes/metarea5.tbl.info +25 -0
  138. pycoast-1.7.0/pycoast/tests/test_data/test_config.ini +12 -0
  139. pycoast-1.7.0/pycoast/tests/test_pycoast.py +2114 -0
  140. pycoast-1.7.0/pycoast/tests/western_shapes_agg.png +0 -0
  141. pycoast-1.7.0/pycoast/tests/western_shapes_pil.png +0 -0
  142. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/version.py +4 -4
  143. pycoast-1.7.0/pycoast.egg-info/PKG-INFO +69 -0
  144. pycoast-1.7.0/pycoast.egg-info/SOURCES.txt +207 -0
  145. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast.egg-info/requires.txt +2 -0
  146. {pycoast-1.6.1 → pycoast-1.7.0}/setup.cfg +1 -1
  147. {pycoast-1.6.1 → pycoast-1.7.0}/setup.py +4 -2
  148. {pycoast-1.6.1 → pycoast-1.7.0}/versioneer.py +173 -108
  149. pycoast-1.6.1/PKG-INFO +0 -65
  150. pycoast-1.6.1/pycoast/tests/eastern_shapes_agg.png +0 -0
  151. pycoast-1.6.1/pycoast/tests/eastern_shapes_pil.png +0 -0
  152. pycoast-1.6.1/pycoast/tests/grid_europe_agg_txt.png +0 -0
  153. pycoast-1.6.1/pycoast/tests/grid_from_dict_agg.png +0 -0
  154. pycoast-1.6.1/pycoast/tests/grid_from_dict_pil.png +0 -0
  155. pycoast-1.6.1/pycoast/tests/grid_germ.png +0 -0
  156. pycoast-1.6.1/pycoast/tests/grid_nh_agg.png +0 -0
  157. pycoast-1.6.1/pycoast/tests/grid_nh_cfg_agg.png +0 -0
  158. pycoast-1.6.1/pycoast/tests/no_h_scratch_agg.png +0 -0
  159. pycoast-1.6.1/pycoast/tests/no_h_scratch_pil.png +0 -0
  160. pycoast-1.6.1/pycoast/tests/no_v_scratch_agg.png +0 -0
  161. pycoast-1.6.1/pycoast/tests/no_v_scratch_pil.png +0 -0
  162. pycoast-1.6.1/pycoast/tests/test_pycoast.py +0 -2154
  163. pycoast-1.6.1/pycoast/tests/utils.py +0 -42
  164. pycoast-1.6.1/pycoast/tests/western_shapes_agg.png +0 -0
  165. pycoast-1.6.1/pycoast/tests/western_shapes_pil.png +0 -0
  166. pycoast-1.6.1/pycoast.egg-info/PKG-INFO +0 -65
  167. pycoast-1.6.1/pycoast.egg-info/SOURCES.txt +0 -89
  168. {pycoast-1.6.1 → pycoast-1.7.0}/LICENSE.txt +0 -0
  169. {pycoast-1.6.1 → pycoast-1.7.0}/README +0 -0
  170. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/api/.gitkeep +0 -0
  171. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/conf.py +0 -0
  172. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/config.rst +0 -0
  173. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/graticule.rst +0 -0
  174. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/high_quality_contours.rst +0 -0
  175. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/BMNG_clouds_201109181715_areaT2.png +0 -0
  176. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/brazil_shapefiles_agg.png +0 -0
  177. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/euro_coast.png +0 -0
  178. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/euro_coast_agg.png +0 -0
  179. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/euro_coast_grid_agg.png +0 -0
  180. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/euro_grid.png +0 -0
  181. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/euro_grid_agg.png +0 -0
  182. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/geos_coast.png +0 -0
  183. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/geos_coast_agg.png +0 -0
  184. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/grid_geos_agg.png +0 -0
  185. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/nh_grid_coarse_agg.png +0 -0
  186. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/nh_points_agg.png +0 -0
  187. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/nh_polygons_agg.png +0 -0
  188. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/images/nh_polygons_lines_agg.png +0 -0
  189. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/index.rst +0 -0
  190. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/points.rst +0 -0
  191. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/polygons_and_lines.rst +0 -0
  192. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/shapefiles.rst +0 -0
  193. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/test.rst +0 -0
  194. {pycoast-1.6.1 → pycoast-1.7.0}/docs/source/usage.rst +0 -0
  195. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/cw_pil.py +0 -0
  196. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/__init__.py +0 -0
  197. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/brazil_shapefiles.png +0 -0
  198. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/brazil_shapefiles_agg.png +0 -0
  199. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/contours_europe.png +0 -0
  200. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/contours_europe_agg.png +0 -0
  201. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/contours_europe_alpha.png +0 -0
  202. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/contours_geos.png +0 -0
  203. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/contours_geos_agg.png +0 -0
  204. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/dateline_boundary_cross.png +0 -0
  205. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/dateline_cross.png +0 -0
  206. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/grid_europe.png +0 -0
  207. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/grid_europe_agg.png +0 -0
  208. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/grid_geos.png +0 -0
  209. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/grid_geos_agg.png +0 -0
  210. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/grid_nh.png +0 -0
  211. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/nh_cities_agg.png +0 -0
  212. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/nh_cities_from_dict_agg.png +0 -0
  213. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/nh_cities_from_dict_pil.png +0 -0
  214. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/nh_cities_pil.png +0 -0
  215. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/nh_points_agg.png +0 -0
  216. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/nh_points_cfg_pil.png +0 -0
  217. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/nh_points_pil.png +0 -0
  218. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/nh_polygons.png +0 -0
  219. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/nh_polygons_agg.png +0 -0
  220. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/one_shapefile_from_cfg_agg.png +0 -0
  221. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/one_shapefile_from_cfg_pil.png +0 -0
  222. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/two_shapefiles_agg.png +0 -0
  223. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast/tests/two_shapefiles_pil.png +0 -0
  224. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast.egg-info/dependency_links.txt +0 -0
  225. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast.egg-info/not-zip-safe +0 -0
  226. {pycoast-1.6.1 → pycoast-1.7.0}/pycoast.egg-info/top_level.txt +0 -0
  227. {pycoast-1.6.1 → pycoast-1.7.0}/pyproject.toml +0 -0
@@ -0,0 +1,20 @@
1
+ # Project Contributors
2
+
3
+ The following people have made contributions to this project:
4
+
5
+ <!--- Use your GitHub account or any other personal reference URL --->
6
+ <!--- See https://gist.github.com/djhoese/52220272ec73b12eb8f4a29709be110d for auto-generating parts of this list --->
7
+
8
+ - Stefano Cerino
9
+ - [Andrew Brooks (howff)](https://github.com/howff)
10
+ - [Adam Dybbroe (adybbroe)](https://github.com/adybbroe)
11
+ - [David Hoese (djhoese)](https://github.com/djhoese)
12
+ - [Katja Hungershofer (khunger)](https://github.com/khunger)
13
+ - [Mikhail Itkin (mitkin)](https://github.com/mitkin)
14
+ - [Panu Lahtinen (pnuu)](https://github.com/pnuu)
15
+ - [Ernst Lobsiger (lobsiger)](https://github.com/lobsiger)
16
+ - [Esben S. Nielsen (storpipfugl)](https://github.com/storpipfugl)
17
+ - [Martin Raspaud (mraspaud)](https://github.com/mraspaud)
18
+ - [Hrobjartur Thorsteinsson (thorsteinssonh)](https://github.com/thorsteinssonh)
19
+ - [Antonio Valentino (avalentino)](https://github.com/avalentino)
20
+ - [Yufei Zhu (yufeizhu600)](https://github.com/yufeizhu600)
@@ -1,7 +1,7 @@
1
1
  include docs/Makefile
2
2
  recursive-include docs/source *
3
3
  include pycoast/tests/*.png
4
- include pycoast/tests/*.ttf
4
+ recursive-include pycoast/tests/ *
5
5
  include LICENSE.txt
6
6
  include MANIFEST.in
7
7
 
pycoast-1.7.0/PKG-INFO ADDED
@@ -0,0 +1,69 @@
1
+ Metadata-Version: 2.1
2
+ Name: pycoast
3
+ Version: 1.7.0
4
+ Summary: Writing of coastlines, borders and rivers to images in Python
5
+ Home-page: UNKNOWN
6
+ Author: Esben S. Nielsen
7
+ Author-email: esn@dmi.dk
8
+ License: UNKNOWN
9
+ Platform: UNKNOWN
10
+ Classifier: Development Status :: 5 - Production/Stable
11
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Topic :: Scientific/Engineering
16
+ Requires-Python: >3.9
17
+ Provides-Extra: docs
18
+ Provides-Extra: tests
19
+ License-File: LICENSE.txt
20
+ License-File: AUTHORS.md
21
+
22
+ PyCoast
23
+ =======
24
+
25
+ .. image:: https://github.com/pytroll/pycoast/workflows/CI/badge.svg?branch=main
26
+ :target: https://github.com/pytroll/pycoast/actions?query=workflow%3A%22CI%22
27
+
28
+ .. image:: https://coveralls.io/repos/github/pytroll/pycoast/badge.svg?branch=main
29
+ :target: https://coveralls.io/github/pytroll/pycoast?branch=main
30
+
31
+ .. image:: https://img.shields.io/pypi/v/pycoast.svg
32
+ :target: https://pypi.python.org/pypi/pycoast
33
+
34
+ .. image:: https://results.pre-commit.ci/badge/github/pytroll/pycoast/main.svg
35
+ :target: https://results.pre-commit.ci/latest/github/pytroll/pycoast/main
36
+ :alt: pre-commit.ci status
37
+
38
+ Python package for adding coastlines, borders, rivers, lakes, cities, and other
39
+ overlays to raster images.
40
+
41
+ Installation
42
+ ------------
43
+
44
+ PyCoast can be installed from PyPI using pip::
45
+
46
+ pip install pycoast
47
+
48
+ Or with conda using the conda-forge channel::
49
+
50
+ conda install -c conda-forge pycoast
51
+
52
+ Example
53
+ -------
54
+
55
+ ::
56
+
57
+ >>> from PIL import Image
58
+ >>> from pycoast import ContourWriterAGG
59
+ >>> img = Image.open('BMNG_clouds_201109181715_areaT2.png')
60
+ >>> proj4_string = '+proj=stere +lon_0=8.00 +lat_0=50.00 +lat_ts=50.00 +ellps=WGS84'
61
+ >>> area_extent = (-3363403.31,-2291879.85,2630596.69,2203620.1)
62
+ >>> area_def = (proj4_string, area_extent)
63
+ >>> cw = ContourWriterAGG('/home/esn/data/gshhs')
64
+ >>> cw.add_coastlines(img, area_def, resolution='l', level=4)
65
+ >>> cw.add_rivers(img, area_def, level=5, outline='blue')
66
+ >>> cw.add_borders(img, area_def, outline=(255, 0, 0))
67
+ >>> img.show()
68
+
69
+
@@ -35,6 +35,7 @@ help:
35
35
 
36
36
  clean:
37
37
  -rm -rf $(BUILDDIR)/*
38
+ -rm -rf source/api/*.rst
38
39
 
39
40
  html:
40
41
  $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@@ -34,7 +34,7 @@ rivers, and lakes, shapefiles from the
34
34
  installed. Download the zipped GSHHS and WDBII shapefiles. At the time of
35
35
  writing the current zip file can be found at:
36
36
 
37
- http://www.soest.hawaii.edu/pwessel/gshhg/gshhg-shp-2.3.7.zip
37
+ https://www.soest.hawaii.edu/pwessel/gshhg/gshhg-shp-2.3.7.zip
38
38
 
39
39
  Unzip the files to a data directory (hereafter *DB_DATA_ROOT*).
40
40
  The absolute path/name of this directory is called *db_root_path*
@@ -26,5 +26,6 @@ class ContourWriter(ContourWriterPIL):
26
26
  warnings.warn(
27
27
  "'ContourWriter' has been deprecated please use " "'ContourWriterPIL' or 'ContourWriterAGG' instead",
28
28
  DeprecationWarning,
29
+ stacklevel=2,
29
30
  )
30
31
  super(ContourWriter, self).__init__(*args, **kwargs)
@@ -0,0 +1,14 @@
1
+ """The conftest file."""
2
+
3
+ from pytest import hookimpl
4
+
5
+
6
+ @hookimpl(tryfirst=True, hookwrapper=True)
7
+ def pytest_runtest_makereport(item, call):
8
+ """Add test status in the report for fixtures to use."""
9
+ # execute all other hooks to obtain the report object
10
+ outcome = yield
11
+ rep = outcome.get_result()
12
+ # store test results for each phase of a call, which can
13
+ # be "setup", "call", "teardown"
14
+ setattr(item, "rep_" + rep.when, rep)
@@ -91,7 +91,11 @@ class ContourWriterAGG(ContourWriterBase):
91
91
  ):
92
92
  """Add a text box at position (x,y)."""
93
93
  if box_outline is not None:
94
- text_size = draw.textsize(text, font)
94
+ if hasattr(draw, "textsize"):
95
+ text_size = draw.textsize(text, font)
96
+ else:
97
+ left, top, right, bottom = draw.textbbox(text_position, text, font)
98
+ text_size = right - left, top - bottom
95
99
  margin = 2
96
100
  xUL = text_position[0] - margin
97
101
  yUL = text_position[1]
@@ -29,9 +29,9 @@ import os
29
29
  from typing import Generator
30
30
 
31
31
  import numpy as np
32
- import pyproj
33
32
  import shapefile
34
33
  from PIL import Image
34
+ from pyproj import CRS, Proj
35
35
 
36
36
  try:
37
37
  from pyresample import AreaDefinition
@@ -45,16 +45,11 @@ def get_resolution_from_area(area_def):
45
45
  """Get the best resolution for an area definition."""
46
46
  x_size = area_def.width
47
47
  y_size = area_def.height
48
- prj = Proj(area_def.crs if hasattr(area_def, "crs") else area_def.proj_str)
49
- if prj.is_latlong():
50
- x_ll, y_ll = prj(area_def.area_extent[0], area_def.area_extent[1])
51
- x_ur, y_ur = prj(area_def.area_extent[2], area_def.area_extent[3])
52
- x_resolution = (x_ur - x_ll) / x_size
53
- y_resolution = (y_ur - y_ll) / y_size
54
- else:
55
- x_resolution = (area_def.area_extent[2] - area_def.area_extent[0]) / x_size
56
- y_resolution = (area_def.area_extent[3] - area_def.area_extent[1]) / y_size
48
+ x_resolution = abs(area_def.area_extent[2] - area_def.area_extent[0]) / x_size
49
+ y_resolution = abs(area_def.area_extent[3] - area_def.area_extent[1]) / y_size
57
50
  res = min(x_resolution, y_resolution)
51
+ if "degree" in area_def.crs.axis_info[0].unit_name:
52
+ res = _estimate_metered_resolution_from_degrees(area_def.crs, res)
58
53
 
59
54
  if res > 25000:
60
55
  return "c"
@@ -68,6 +63,12 @@ def get_resolution_from_area(area_def):
68
63
  return "f"
69
64
 
70
65
 
66
+ def _estimate_metered_resolution_from_degrees(crs: CRS, resolution_degrees: float) -> float:
67
+ major_radius = crs.datum.ellipsoid.semi_major_metre
68
+ # estimate by taking the arc length using the radius
69
+ return major_radius * math.radians(resolution_degrees)
70
+
71
+
71
72
  class _CoordConverter:
72
73
  """Convert coordinates from one space to in-bound image pixel column and row.
73
74
 
@@ -91,7 +92,8 @@ class _CoordConverter:
91
92
  raise ValueError(f"'coord_ref' must be one of {pretty_coord_refs}.")
92
93
  self._convert_method = convert_methods[coord_ref]
93
94
 
94
- def _check_area_def(self, area_def):
95
+ @staticmethod
96
+ def _check_area_def(area_def):
95
97
  if AreaDefinition is None:
96
98
  raise ImportError(
97
99
  "Missing required 'pyresample' module, please "
@@ -130,16 +132,6 @@ def hash_dict(dict_to_hash: dict) -> str:
130
132
  return dhash.hexdigest()
131
133
 
132
134
 
133
- class Proj(pyproj.Proj):
134
- """Wrapper around pyproj to add in 'is_latlong'."""
135
-
136
- def is_latlong(self):
137
- if hasattr(self, "crs"):
138
- return self.crs.is_geographic
139
- # pyproj<2.0
140
- return super(Proj, self).is_latlong()
141
-
142
-
143
135
  class ContourWriterBase(object):
144
136
  """Base class for contourwriters. Do not instantiate.
145
137
 
@@ -167,7 +159,16 @@ class ContourWriterBase(object):
167
159
 
168
160
  def _draw_text(self, draw, position, txt, font, align="cc", **kwargs):
169
161
  """Draw text with agg module."""
170
- txt_width, txt_height = draw.textsize(txt, font)
162
+ if hasattr(draw, "textsize"):
163
+ txt_width, txt_height = draw.textsize(txt, font)
164
+ else:
165
+ left, top, right, bottom = draw.textbbox(position, txt, font)
166
+ # bbox is based on "left ascender" anchor for horizontal text
167
+ # but does not include the ascender to top distance.
168
+ # In order to include that additional distance we take height from
169
+ # anchor (`position`) to the bottom of the text. See:
170
+ # https://pillow.readthedocs.io/en/stable/handbook/text-anchors.html#text-anchors
171
+ txt_width, txt_height = right - left, bottom - position[1]
171
172
  x_pos, y_pos = position
172
173
  ax, ay = align.lower()
173
174
  if ax == "r":
@@ -178,7 +179,7 @@ class ContourWriterBase(object):
178
179
  if ay == "b":
179
180
  y_pos = y_pos - txt_height
180
181
  elif ay == "c":
181
- y_pos = y_pos - txt_width / 2
182
+ y_pos = y_pos - txt_height / 2
182
183
 
183
184
  self._engine_text_draw(draw, x_pos, y_pos, txt, font, **kwargs)
184
185
 
@@ -506,10 +507,15 @@ class ContourWriterBase(object):
506
507
  the same provided AreaDefinition and parameters. Cached results are
507
508
  identified by hashing the AreaDefinition and the overlays dictionary.
508
509
 
510
+ Note that if ``background`` is provided and caching is not used, the
511
+ result will be the final result of applying the overlays onto the
512
+ background. This is due to an optimization step avoiding creating a
513
+ separate overlay image in memory when it isn't needed.
514
+
509
515
  .. warning::
510
516
 
511
517
  Font objects are ignored in parameter hashing as they can't be easily hashed.
512
- Therefore font changes will not trigger a new rendering for the cache.
518
+ Therefore, font changes will not trigger a new rendering for the cache.
513
519
 
514
520
  :Parameters:
515
521
  overlays : dict
@@ -1053,16 +1059,10 @@ def _get_bounding_box_lonlat_sides(area_extent, x_size, y_size, prj):
1053
1059
  x_range = np.linspace(x_ll, x_ur, num=x_size)
1054
1060
  y_range = np.linspace(y_ll, y_ur, num=y_size)
1055
1061
 
1056
- if prj.is_latlong():
1057
- lons_s1, lats_s1 = x_ll * np.ones(y_range.size), y_range
1058
- lons_s2, lats_s2 = x_range, y_ur * np.ones(x_range.size)
1059
- lons_s3, lats_s3 = x_ur * np.ones(y_range.size), y_range
1060
- lons_s4, lats_s4 = x_range, y_ll * np.ones(x_range.size)
1061
- else:
1062
- lons_s1, lats_s1 = prj(np.ones(y_range.size) * x_ll, y_range, inverse=True)
1063
- lons_s2, lats_s2 = prj(x_range, np.ones(x_range.size) * y_ur, inverse=True)
1064
- lons_s3, lats_s3 = prj(np.ones(y_range.size) * x_ur, y_range, inverse=True)
1065
- lons_s4, lats_s4 = prj(x_range, np.ones(x_range.size) * y_ll, inverse=True)
1062
+ lons_s1, lats_s1 = prj(np.ones(y_range.size) * x_ll, y_range, inverse=True)
1063
+ lons_s2, lats_s2 = prj(x_range, np.ones(x_range.size) * y_ur, inverse=True)
1064
+ lons_s3, lats_s3 = prj(np.ones(y_range.size) * x_ur, y_range, inverse=True)
1065
+ lons_s4, lats_s4 = prj(x_range, np.ones(x_range.size) * y_ll, inverse=True)
1066
1066
  return (lons_s1, lons_s2, lons_s3, lons_s4), (lats_s1, lats_s2, lats_s3, lats_s4)
1067
1067
 
1068
1068
 
@@ -1087,12 +1087,7 @@ def _get_pixel_index(shape, area_extent, x_size, y_size, prj, x_offset=0, y_offs
1087
1087
  shape_data = np.array(shape.points if hasattr(shape, "points") else shape)
1088
1088
  lons = shape_data[:, 0]
1089
1089
  lats = shape_data[:, 1]
1090
-
1091
- if prj.is_latlong():
1092
- x_ll, y_ll = prj(area_extent[0], area_extent[1])
1093
- x_ur, y_ur = prj(area_extent[2], area_extent[3])
1094
- else:
1095
- x_ll, y_ll, x_ur, y_ur = area_extent
1090
+ x_ll, y_ll, x_ur, y_ur = area_extent
1096
1091
 
1097
1092
  x, y = prj(lons, lats)
1098
1093
 
@@ -1199,7 +1194,7 @@ class _OverlaysFromDict:
1199
1194
  foreground = Image.open(cache_file)
1200
1195
  logger.info("Using image in cache %s", cache_file)
1201
1196
  if background is not None:
1202
- background.paste(foreground, mask=foreground.split()[-1])
1197
+ _apply_cached_foreground_on_background(background, foreground)
1203
1198
  return foreground
1204
1199
  logger.info("Regenerating cache file.")
1205
1200
  except OSError:
@@ -1212,7 +1207,7 @@ class _OverlaysFromDict:
1212
1207
  except IOError as e:
1213
1208
  logger.error("Can't save cache: %s", str(e))
1214
1209
  if self._background is not None:
1215
- self._background.paste(self._foreground, mask=self._foreground.split()[-1])
1210
+ _apply_cached_foreground_on_background(self._background, self._foreground)
1216
1211
 
1217
1212
  def _generate_cache_filename(self, cache_prefix, area_def, overlays_dict):
1218
1213
  area_hash = hash(area_def)
@@ -1443,6 +1438,18 @@ class _OverlaysFromDict:
1443
1438
  )
1444
1439
 
1445
1440
 
1441
+ def _apply_cached_foreground_on_background(background, foreground):
1442
+ premult_foreground = foreground.convert("RGBa")
1443
+ if background.mode == "RGBA":
1444
+ # Cached foreground and background are both RGBA, not extra conversions needed
1445
+ background.paste(premult_foreground, mask=premult_foreground)
1446
+ return
1447
+ background_rgba = background.convert("RGBA")
1448
+ background_rgba.paste(premult_foreground, mask=premult_foreground)
1449
+ # overwrite background image in place
1450
+ background.paste(background_rgba)
1451
+
1452
+
1446
1453
  class _GridDrawer:
1447
1454
  """Helper for drawing graticule/grid lines."""
1448
1455
 
@@ -0,0 +1,13 @@
1
+ [coasts]
2
+ level = 4
3
+ resolution = l
4
+ outline = white
5
+
6
+ [grid]
7
+ write_text = False
8
+ lon_major = 10.0
9
+ lat_major = 10.0
10
+ lon_minor = 2.0
11
+ lat_minor = 2.0
12
+ minor_outline = blue
13
+ outline = blue
@@ -0,0 +1,17 @@
1
+ [coasts]
2
+ level = 4
3
+ resolution = l
4
+ outline = white
5
+
6
+ [grid]
7
+ write_text = True
8
+ lon_major = 10.0
9
+ lat_major = 10.0
10
+ lon_minor = 2.0
11
+ lat_minor = 2.0
12
+ minor_outline = blue
13
+ outline = blue
14
+ lon_placement = tblr
15
+ lat_placement = ''
16
+ font = 'test_data/DejaVuSerif.ttf'
17
+ font_size = 10
@@ -0,0 +1,26 @@
1
+ [coasts]
2
+ level = 4
3
+ resolution = l
4
+ outline = black
5
+
6
+ [borders]
7
+ level = 1
8
+ outline = black
9
+ width = 3
10
+ resolution = c
11
+
12
+ [cities]
13
+ # Backward compatibility: Allows for *ONE* type of cities
14
+ cities_list = Zurich, Oslo, Reykjavik, Fairbanks, Toronto
15
+ font = test_data/DejaVuSerif.ttf
16
+ font_size = 20
17
+ symbol = square
18
+ ptsize = 16
19
+ outline = black
20
+ width = 1
21
+ fill = blue
22
+ fill_opacity = 128
23
+ box_outline = blue
24
+ box_linewidth = 0.5
25
+ box_fill = yellow
26
+ box_opacity = 200
@@ -0,0 +1,20 @@
1
+ [coasts]
2
+ level = 4
3
+ resolution = l
4
+ outline = black
5
+
6
+ [borders]
7
+ level = 1
8
+ outline = black
9
+ resolution = c
10
+
11
+ [cities]
12
+ # Backward compatibility: Allows for *ONE* type of cities
13
+ cities_list = Zurich, Oslo, Reykjavik, Fairbanks, Toronto
14
+ font = test_data/DejaVuSerif.ttf
15
+ font_size = 20
16
+ symbol = square
17
+ ptsize = 16
18
+ outline = black
19
+ fill = blue
20
+ box_outline = blue
@@ -0,0 +1,11 @@
1
+ [coasts]
2
+ level = 4
3
+ resolution = l
4
+ outline = yellow
5
+ width = 1.5
6
+
7
+ [shapefiles]
8
+ # For completeness: Allows for only *ONE* shapefile
9
+ filename = 'test_data/shapes/Metareas.shp'
10
+ outline = cyan
11
+ width = 3.5
@@ -0,0 +1,24 @@
1
+ [coasts]
2
+ level = 4
3
+ resolution = l
4
+ outline = black
5
+
6
+ [borders]
7
+ level = 1
8
+ outline = black
9
+ width = 3
10
+ resolution = c
11
+
12
+ [points]
13
+ points_list = ((2.3522, 48.8566), 'Paris'), ((0.1278, 51.5074), 'London')
14
+ font = 'test_data/DejaVuSerif.ttf'
15
+ symbol = circle
16
+ ptsize = 16
17
+ outline = black
18
+ width = 3
19
+ fill = red
20
+ fill_opacity = 128
21
+ box_outline = blue
22
+ box_linewidth = 0.5
23
+ box_fill = yellow
24
+ box_opacity = 200
@@ -0,0 +1,19 @@
1
+ [coasts]
2
+ level = 4
3
+ resolution = l
4
+ outline = black
5
+
6
+ [borders]
7
+ level = 1
8
+ outline = black
9
+ width = 3
10
+ resolution = c
11
+
12
+ [points]
13
+ points_list = ((13.4050, 52.5200), 'Berlin'), ((12.4964, 41.9028), 'Rome')
14
+ font = 'test_data/DejaVuSerif.ttf'
15
+ symbol = square
16
+ ptsize = 6
17
+ outline = red
18
+ fill = yellow
19
+ box_outline = black
@@ -0,0 +1,20 @@
1
+ X Bad Schwalbach Bad Schwalbach X 50.14196 8.06964
2
+ X Belp Belp X 46.89129 7.49825
3
+ X Berlin Berlin X 52.52437 13.41053
4
+ X Dublin Dublin X 53.33306 -6.24889
5
+ X Edinburgh Edinburgh X 55.95206 -3.19648
6
+ X Fairbanks Fairbanks X 64.83778 -147.71639
7
+ X Freiburg Freiburg X 47.9959 7.85222
8
+ X Hilversum Hilversum X 52.22333 5.17639
9
+ X Huesca Huesca X 42.13615 -0.4087
10
+ X London London X 42.98339 -81.23304
11
+ X London London X 51.50853 -0.12574
12
+ X Madrid Madrid X 40.4165 -3.70256
13
+ X Marseille Marseille X 43.29695 5.38107
14
+ X Montélimar Montelimar X 44.55468 4.75469
15
+ X Oslo Oslo X 59.91273 10.74609
16
+ X Paris Paris X 48.85341 2.3488
17
+ X Reykjavík Reykjavik X 64.13548 -21.89541
18
+ X Rome Rome X 41.89193 12.51133
19
+ X Toronto Toronto X 43.70011 -79.4163
20
+ X Zürich Zurich X 47.36667 8.55
@@ -0,0 +1 @@
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
@@ -0,0 +1 @@
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
@@ -0,0 +1 @@
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
@@ -0,0 +1 @@
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
@@ -0,0 +1 @@
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
@@ -0,0 +1 @@
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
@@ -0,0 +1 @@
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
@@ -0,0 +1 @@
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
@@ -0,0 +1 @@
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
@@ -0,0 +1 @@
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]