libsim Versione 7.1.11

◆ arrayof_georef_coord_array_export()

subroutine arrayof_georef_coord_array_export ( type(arrayof_georef_coord_array), intent(in)  this,
character(len=*), intent(in)  shpfile 
)
private

Export an array of georef_coord_array objects to a file in ESRI/Shapefile format.

All the thisarraysize shapes contained in this are exported to the requested shapefile. Topology information and possible polygon parts are exported as well, while projection information is ignored.

Parametri
[in]thisarray object to be exported
[in]shpfilename of shapefile (with or without extension)

Definizione alla linea 1157 del file georef_coord_class.F90.

1158! Copyright (C) 2010 ARPA-SIM <urpsim@smr.arpa.emr.it>
1159! authors:
1160! Davide Cesari <dcesari@arpa.emr.it>
1161! Paolo Patruno <ppatruno@arpa.emr.it>
1162
1163! This program is free software; you can redistribute it and/or
1164! modify it under the terms of the GNU General Public License as
1165! published by the Free Software Foundation; either version 2 of
1166! the License, or (at your option) any later version.
1167
1168! This program is distributed in the hope that it will be useful,
1169! but WITHOUT ANY WARRANTY; without even the implied warranty of
1170! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1171! GNU General Public License for more details.
1172
1173! You should have received a copy of the GNU General Public License
1174! along with this program. If not, see <http://www.gnu.org/licenses/>.
1175#include "config.h"
1176
1190MODULE georef_coord_class
1191USE err_handling
1194USE geo_proj_class
1195#ifdef HAVE_SHAPELIB
1196USE shapelib
1197#endif
1198IMPLICIT NONE
1199
1204TYPE georef_coord
1205 PRIVATE
1206 DOUBLE PRECISION :: x=dmiss, y=dmiss
1207END TYPE georef_coord
1208
1210TYPE(georef_coord),PARAMETER :: georef_coord_miss=georef_coord(dmiss,dmiss)
1211
1217 PRIVATE
1218 INTEGER,ALLOCATABLE :: parts(:)
1219 TYPE(georef_coord),ALLOCATABLE :: coord(:)
1220 INTEGER :: topo=imiss
1221 TYPE(geo_proj) :: proj
1222 TYPE(georef_coord) :: bbox(2)=(/georef_coord_miss, georef_coord_miss/)
1223 LOGICAL :: bbox_updated=.false.
1224END TYPE georef_coord_array
1225
1226INTEGER,PARAMETER :: georef_coord_array_point = 1
1227INTEGER,PARAMETER :: georef_coord_array_arc = 3
1228INTEGER,PARAMETER :: georef_coord_array_polygon = 5
1229INTEGER,PARAMETER :: georef_coord_array_multipoint = 8
1230
1231
1235INTERFACE delete
1236 MODULE PROCEDURE georef_coord_delete, georef_coord_array_delete
1237END INTERFACE
1238
1240INTERFACE c_e
1241 MODULE PROCEDURE georef_coord_c_e, georef_coord_array_c_e
1242END INTERFACE
1243
1245INTERFACE getval
1246 MODULE PROCEDURE georef_coord_getval, georef_coord_proj_getval, georef_coord_array_getval
1247END INTERFACE
1248
1249INTERFACE compute_bbox
1250 MODULE PROCEDURE georef_coord_array_compute_bbox
1251END INTERFACE
1252
1254INTERFACE OPERATOR (==)
1255 MODULE PROCEDURE georef_coord_eq
1256END INTERFACE
1257
1259INTERFACE OPERATOR (/=)
1260 MODULE PROCEDURE georef_coord_ne
1261END INTERFACE
1262
1265INTERFACE OPERATOR (>=)
1266 MODULE PROCEDURE georef_coord_ge
1267END INTERFACE
1268
1271INTERFACE OPERATOR (<=)
1272 MODULE PROCEDURE georef_coord_le
1273END INTERFACE
1274
1275#ifdef HAVE_SHAPELIB
1276
1278INTERFACE import
1279 MODULE PROCEDURE arrayof_georef_coord_array_import
1280END INTERFACE
1281
1284INTERFACE export
1285 MODULE PROCEDURE arrayof_georef_coord_array_export
1286END INTERFACE
1287#endif
1288
1291INTERFACE read_unit
1292 MODULE PROCEDURE georef_coord_read_unit, georef_coord_vect_read_unit
1293END INTERFACE
1294
1297INTERFACE write_unit
1298 MODULE PROCEDURE georef_coord_write_unit, georef_coord_vect_write_unit
1299END INTERFACE
1300
1302INTERFACE inside
1303 MODULE PROCEDURE georef_coord_inside, georef_coord_inside_rectang
1304END INTERFACE
1305
1307INTERFACE dist
1308 MODULE PROCEDURE georef_coord_dist
1309END INTERFACE
1310
1311#define ARRAYOF_ORIGTYPE TYPE(georef_coord_array)
1312#define ARRAYOF_TYPE arrayof_georef_coord_array
1313!define ARRAYOF_ORIGEQ 0
1314#define ARRAYOF_ORIGDESTRUCTOR(x) CALL delete(x)
1315#include "arrayof_pre.F90"
1316! from arrayof
1317PUBLIC insert, append, remove, packarray
1318
1319PRIVATE
1320PUBLIC georef_coord, georef_coord_miss, &
1321 georef_coord_array, georef_coord_array_point, georef_coord_array_arc, &
1322 georef_coord_array_polygon, georef_coord_array_multipoint, &
1323 delete, c_e, getval, compute_bbox, OPERATOR(==), OPERATOR(/=), OPERATOR(>=), OPERATOR(<=), &
1324#ifdef HAVE_SHAPELIB
1325 import, export, &
1326#endif
1328 georef_coord_new, georef_coord_array_new
1329
1330CONTAINS
1331
1332#include "arrayof_post.F90"
1333
1334! ===================
1335! == georef_coord ==
1336! ===================
1340FUNCTION georef_coord_new(x, y) RESULT(this)
1341DOUBLE PRECISION,INTENT(in),OPTIONAL :: x
1342DOUBLE PRECISION,INTENT(in),OPTIONAL :: y
1343TYPE(georef_coord) :: this
1344
1345CALL optio(x, this%x)
1346CALL optio(y, this%y)
1347
1348END FUNCTION georef_coord_new
1349
1350
1351SUBROUTINE georef_coord_delete(this)
1352TYPE(georef_coord),INTENT(inout) :: this
1353
1354this%x = dmiss
1355this%y = dmiss
1356
1357END SUBROUTINE georef_coord_delete
1358
1359
1360ELEMENTAL FUNCTION georef_coord_c_e(this) RESULT (res)
1361TYPE(georef_coord),INTENT(in) :: this
1362LOGICAL :: res
1363
1364res = .NOT. this == georef_coord_miss
1365
1366END FUNCTION georef_coord_c_e
1367
1368
1375ELEMENTAL SUBROUTINE georef_coord_getval(this, x, y)
1376TYPE(georef_coord),INTENT(in) :: this
1377DOUBLE PRECISION,INTENT(out),OPTIONAL :: x
1378DOUBLE PRECISION,INTENT(out),OPTIONAL :: y
1379
1380IF (PRESENT(x)) x = this%x
1381IF (PRESENT(y)) y = this%y
1382
1383END SUBROUTINE georef_coord_getval
1384
1385
1394ELEMENTAL SUBROUTINE georef_coord_proj_getval(this, proj, x, y, lon, lat)
1395TYPE(georef_coord),INTENT(in) :: this
1396TYPE(geo_proj),INTENT(in) :: proj
1397DOUBLE PRECISION,INTENT(out),OPTIONAL :: x
1398DOUBLE PRECISION,INTENT(out),OPTIONAL :: y
1399DOUBLE PRECISION,INTENT(out),OPTIONAL :: lon
1400DOUBLE PRECISION,INTENT(out),OPTIONAL :: lat
1401
1402DOUBLE PRECISION :: llon, llat
1403
1404IF (PRESENT(x)) x = this%x
1405IF (PRESENT(y)) y = this%y
1406IF (PRESENT(lon) .OR. present(lat)) THEN
1407 CALL unproj(proj, this%x, this%y, llon, llat)
1408 IF (PRESENT(lon)) lon = llon
1409 IF (PRESENT(lat)) lat = llat
1410ENDIF
1411
1412END SUBROUTINE georef_coord_proj_getval
1413
1414
1415! document and improve
1416ELEMENTAL FUNCTION getlat(this)
1417TYPE(georef_coord),INTENT(in) :: this ! oggetto di cui restituire latitudine
1418DOUBLE PRECISION :: getlat ! latitudine geografica
1419
1420getlat = this%y ! change!!!
1421
1422END FUNCTION getlat
1423
1424! document and improve
1425ELEMENTAL FUNCTION getlon(this)
1426TYPE(georef_coord),INTENT(in) :: this ! oggetto di cui restituire latitudine
1427DOUBLE PRECISION :: getlon ! longitudine geografica
1428
1429getlon = this%x ! change!!!
1430
1431END FUNCTION getlon
1432
1433
1434ELEMENTAL FUNCTION georef_coord_eq(this, that) RESULT(res)
1435TYPE(georef_coord),INTENT(IN) :: this, that
1436LOGICAL :: res
1437
1438res = (this%x == that%x .AND. this%y == that%y)
1439
1440END FUNCTION georef_coord_eq
1441
1442
1443ELEMENTAL FUNCTION georef_coord_ge(this, that) RESULT(res)
1444TYPE(georef_coord),INTENT(IN) :: this, that
1445LOGICAL :: res
1446
1447res = (this%x >= that%x .AND. this%y >= that%y)
1448
1449END FUNCTION georef_coord_ge
1450
1451
1452ELEMENTAL FUNCTION georef_coord_le(this, that) RESULT(res)
1453TYPE(georef_coord),INTENT(IN) :: this, that
1454LOGICAL :: res
1455
1456res = (this%x <= that%x .AND. this%y <= that%y)
1457
1458END FUNCTION georef_coord_le
1459
1460
1461ELEMENTAL FUNCTION georef_coord_ne(this, that) RESULT(res)
1462TYPE(georef_coord),INTENT(IN) :: this, that
1463LOGICAL :: res
1464
1465res = .NOT.(this == that)
1466
1467END FUNCTION georef_coord_ne
1468
1469
1475SUBROUTINE georef_coord_read_unit(this, unit)
1476TYPE(georef_coord),INTENT(out) :: this
1477INTEGER, INTENT(in) :: unit
1478
1479CALL georef_coord_vect_read_unit((/this/), unit)
1480
1481END SUBROUTINE georef_coord_read_unit
1482
1483
1489SUBROUTINE georef_coord_vect_read_unit(this, unit)
1490TYPE(georef_coord) :: this(:)
1491INTEGER, INTENT(in) :: unit
1492
1493CHARACTER(len=40) :: form
1494INTEGER :: i
1495
1496INQUIRE(unit, form=form)
1497IF (form == 'FORMATTED') THEN
1498 read(unit,*) (this(i)%x,this(i)%y, i=1,SIZE(this))
1499!TODO bug gfortran compiler !
1500!missing values are unredeable when formatted
1501ELSE
1502 READ(unit) (this(i)%x,this(i)%y, i=1,SIZE(this))
1503ENDIF
1504
1505END SUBROUTINE georef_coord_vect_read_unit
1506
1507
1512SUBROUTINE georef_coord_write_unit(this, unit)
1513TYPE(georef_coord),INTENT(in) :: this
1514INTEGER, INTENT(in) :: unit
1515
1516CALL georef_coord_vect_write_unit((/this/), unit)
1517
1518END SUBROUTINE georef_coord_write_unit
1519
1520
1525SUBROUTINE georef_coord_vect_write_unit(this, unit)
1526TYPE(georef_coord),INTENT(in) :: this(:)
1527INTEGER, INTENT(in) :: unit
1528
1529CHARACTER(len=40) :: form
1530INTEGER :: i
1531
1532INQUIRE(unit, form=form)
1533IF (form == 'FORMATTED') THEN
1534 WRITE(unit,*) (this(i)%x,this(i)%y, i=1,SIZE(this))
1535!TODO bug gfortran compiler !
1536!missing values are unredeable when formatted
1537ELSE
1538 WRITE(unit) (this(i)%x,this(i)%y, i=1,SIZE(this))
1539ENDIF
1540
1541END SUBROUTINE georef_coord_vect_write_unit
1542
1543
1546FUNCTION georef_coord_dist(this, that) RESULT(dist)
1548TYPE(georef_coord), INTENT (IN) :: this
1549TYPE(georef_coord), INTENT (IN) :: that
1550DOUBLE PRECISION :: dist
1551
1552DOUBLE PRECISION :: x,y
1553! Distanza approssimata, valida per piccoli angoli
1554
1555x = (this%x-that%x)*cos(((this%y+this%y)/2.)*degrad)
1556y = (this%y-that%y)
1557dist = sqrt(x**2 + y**2)*degrad*rearth
1558
1559END FUNCTION georef_coord_dist
1560
1561
1567FUNCTION georef_coord_inside_rectang(this, coordmin, coordmax) RESULT(res)
1568TYPE(georef_coord),INTENT(IN) :: this
1569TYPE(georef_coord),INTENT(IN) :: coordmin
1570TYPE(georef_coord),INTENT(IN) :: coordmax
1571LOGICAL :: res
1572
1573res = (this >= coordmin .AND. this <= coordmax)
1574
1575END FUNCTION georef_coord_inside_rectang
1576
1577
1578! ========================
1579! == georef_coord_array ==
1580! ========================
1586FUNCTION georef_coord_array_new(x, y, topo, proj) RESULT(this)
1587DOUBLE PRECISION,INTENT(in),OPTIONAL :: x(:)
1588DOUBLE PRECISION,INTENT(in),OPTIONAL :: y(:)
1589INTEGER,INTENT(in),OPTIONAL :: topo
1590TYPE(geo_proj),INTENT(in),OPTIONAL :: proj
1591TYPE(georef_coord_array) :: this
1592
1593INTEGER :: lsize
1594
1595IF (PRESENT(x) .AND. PRESENT(y)) THEN
1596 lsize = min(SIZE(x), SIZE(y))
1597 ALLOCATE(this%coord(lsize))
1598 this%coord(1:lsize)%x = x(1:lsize)
1599 this%coord(1:lsize)%y = y(1:lsize)
1600ENDIF
1601this%topo = optio_l(topo)
1602IF (PRESENT(proj)) this%proj = proj
1603
1604END FUNCTION georef_coord_array_new
1605
1606
1607SUBROUTINE georef_coord_array_delete(this)
1608TYPE(georef_coord_array),INTENT(inout) :: this
1609
1610TYPE(georef_coord_array) :: lobj
1611
1612this = lobj
1613
1614END SUBROUTINE georef_coord_array_delete
1615
1616
1617ELEMENTAL FUNCTION georef_coord_array_c_e(this) RESULT (res)
1618TYPE(georef_coord_array),INTENT(in) :: this
1619LOGICAL :: res
1620
1621res = ALLOCATED(this%coord)
1622
1623END FUNCTION georef_coord_array_c_e
1624
1625
1630SUBROUTINE georef_coord_array_getval(this, x, y, topo, proj)
1631TYPE(georef_coord_array),INTENT(in) :: this
1632DOUBLE PRECISION,OPTIONAL,ALLOCATABLE,INTENT(out) :: x(:)
1633DOUBLE PRECISION,OPTIONAL,ALLOCATABLE,INTENT(out) :: y(:)
1634! allocatable per vedere di nascosto l'effetto che fa
1635INTEGER,OPTIONAL,INTENT(out) :: topo
1636TYPE(geo_proj),OPTIONAL,INTENT(out) :: proj
1637
1638
1639IF (PRESENT(x)) THEN
1640 IF (ALLOCATED(this%coord)) THEN
1641 x = this%coord%x
1642 ENDIF
1643ENDIF
1644IF (PRESENT(y)) THEN
1645 IF (ALLOCATED(this%coord)) THEN
1646 y = this%coord%y
1647 ENDIF
1648ENDIF
1649IF (PRESENT(topo)) topo = this%topo
1650IF (PRESENT(proj)) proj = this%proj ! warning proj has no missing value yet
1651
1652END SUBROUTINE georef_coord_array_getval
1653
1654
1660SUBROUTINE georef_coord_array_compute_bbox(this)
1661TYPE(georef_coord_array),INTENT(inout) :: this
1662
1663IF (ALLOCATED(this%coord)) THEN
1664 this%bbox(1)%x = minval(this%coord(:)%x)
1665 this%bbox(1)%y = minval(this%coord(:)%y)
1666 this%bbox(2)%x = maxval(this%coord(:)%x)
1667 this%bbox(2)%y = maxval(this%coord(:)%y)
1668 this%bbox_updated = .true.
1669ENDIF
1670
1671END SUBROUTINE georef_coord_array_compute_bbox
1672
1673#ifdef HAVE_SHAPELIB
1674! internal method for importing a single shape
1675SUBROUTINE georef_coord_array_import(this, shphandle, nshp)
1676TYPE(georef_coord_array),INTENT(OUT) :: this
1677TYPE(shpfileobject),INTENT(INOUT) :: shphandle
1678INTEGER,INTENT(IN) :: nshp
1679
1680TYPE(shpobject) :: shpobj
1681
1682! read shape object
1683shpobj = shpreadobject(shphandle, nshp)
1684IF (.NOT.shpisnull(shpobj)) THEN
1685! import it in georef_coord object
1686 this = georef_coord_array_new(x=dble(shpobj%padfx), y=dble(shpobj%padfy), &
1687 topo=shpobj%nshptype)
1688 IF (shpobj%nparts > 1 .AND. ASSOCIATED(shpobj%panpartstart)) THEN
1689 this%parts = shpobj%panpartstart(:) ! automatic f95 allocation
1690 ELSE IF (ALLOCATED(this%parts)) THEN
1691 DEALLOCATE(this%parts)
1692 ENDIF
1693 CALL shpdestroyobject(shpobj)
1694 CALL compute_bbox(this)
1695ENDIF
1696
1697
1698END SUBROUTINE georef_coord_array_import
1699
1700
1701! internal method for exporting a single shape
1702SUBROUTINE georef_coord_array_export(this, shphandle, nshp)
1703TYPE(georef_coord_array),INTENT(in) :: this
1704TYPE(shpfileobject),INTENT(inout) :: shphandle
1705INTEGER,INTENT(IN) :: nshp ! index of shape to write starting from 0, -1 to append
1706
1707INTEGER :: i
1708TYPE(shpobject) :: shpobj
1709
1710IF (ALLOCATED(this%coord)) THEN
1711 IF (ALLOCATED(this%parts)) THEN
1712 shpobj = shpcreateobject(this%topo, -1, SIZE(this%parts), this%parts, &
1713 this%parts, SIZE(this%coord), this%coord(:)%x, this%coord(:)%y)
1714 ELSE
1715 shpobj = shpcreatesimpleobject(this%topo, SIZE(this%coord), &
1716 this%coord(:)%x, this%coord(:)%y)
1717 ENDIF
1718ELSE
1719 RETURN
1720ENDIF
1721
1722IF (.NOT.shpisnull(shpobj)) THEN
1723 i = shpwriteobject(shphandle, nshp, shpobj)
1724 CALL shpdestroyobject(shpobj)
1725ENDIF
1726
1727END SUBROUTINE georef_coord_array_export
1728
1729
1740SUBROUTINE arrayof_georef_coord_array_import(this, shpfile)
1741TYPE(arrayof_georef_coord_array),INTENT(out) :: this
1742CHARACTER(len=*),INTENT(in) :: shpfile
1743
1744REAL(kind=fp_d) :: minb(4), maxb(4)
1745INTEGER :: i, ns, shptype, dbfnf, dbfnr
1746TYPE(shpfileobject) :: shphandle
1747
1748shphandle = shpopen(trim(shpfile), 'rb')
1749IF (shpfileisnull(shphandle)) THEN
1750 ! log here
1751 CALL raise_error()
1752 RETURN
1753ENDIF
1754
1755! get info about file
1756CALL shpgetinfo(shphandle, ns, shptype, minb, maxb, dbfnf, dbfnr)
1757IF (ns > 0) THEN ! allocate and read the object
1758 CALL insert(this, nelem=ns)
1759 DO i = 1, ns
1760 CALL georef_coord_array_import(this%array(i), shphandle=shphandle, nshp=i-1)
1761 ENDDO
1762ENDIF
1763
1764CALL shpclose(shphandle)
1765! pack object to save memory
1766CALL packarray(this)
1767
1768END SUBROUTINE arrayof_georef_coord_array_import
1769
1770
1776SUBROUTINE arrayof_georef_coord_array_export(this, shpfile)
1777TYPE(arrayof_georef_coord_array),INTENT(in) :: this
1778CHARACTER(len=*),INTENT(in) :: shpfile
1779
1780INTEGER :: i
1781TYPE(shpfileobject) :: shphandle
1782
1783IF (this%arraysize > 0) THEN
1784 shphandle = shpcreate(trim(shpfile), this%array(1)%topo)
1785ELSE
1786 shphandle = shpcreate(trim(shpfile), georef_coord_array_polygon)
1787ENDIF
1788IF (shpfileisnull(shphandle)) THEN
1789 ! log here
1790 CALL raise_error()
1791 RETURN
1792ENDIF
1793
1794DO i = 1, this%arraysize
1795 CALL georef_coord_array_export(this%array(i), shphandle=shphandle, nshp=i-1)
1796ENDDO
1797
1798CALL shpclose(shphandle)
1799
1800END SUBROUTINE arrayof_georef_coord_array_export
1801#endif
1802
1814FUNCTION georef_coord_inside(this, poly) RESULT(inside)
1815TYPE(georef_coord), INTENT(IN) :: this
1816TYPE(georef_coord_array), INTENT(IN) :: poly
1817LOGICAL :: inside
1818
1819INTEGER :: i
1820
1821inside = .false.
1822IF (.NOT.c_e(this)) RETURN
1823IF (.NOT.ALLOCATED(poly%coord)) RETURN
1824! if outside bounding box stop here
1825IF (poly%bbox_updated) THEN
1826 IF (.NOT.georef_coord_inside_rectang(this, poly%bbox(1), poly%bbox(2))) RETURN
1827ENDIF
1828
1829IF (ALLOCATED(poly%parts)) THEN
1830 DO i = 1, SIZE(poly%parts)-1
1831 inside = inside .NEQV. pointinpoly(this%x, this%y, &
1832 poly%coord(poly%parts(i)+1:poly%parts(i+1))%x, &
1833 poly%coord(poly%parts(i)+1:poly%parts(i+1))%y)
1834 ENDDO
1835 IF (SIZE(poly%parts) > 0) THEN ! safety check
1836 inside = inside .NEQV. pointinpoly(this%x, this%y, &
1837 poly%coord(poly%parts(i)+1:)%x, &
1838 poly%coord(poly%parts(i)+1:)%y)
1839 ENDIF
1840
1841ELSE
1842 IF (SIZE(poly%coord) < 1) RETURN ! safety check
1843 inside = pointinpoly(this%x, this%y, &
1844 poly%coord(:)%x, poly%coord(:)%y)
1845ENDIF
1846
1847CONTAINS
1848
1849FUNCTION pointinpoly(x, y, px, py)
1850DOUBLE PRECISION, INTENT(in) :: x, y, px(:), py(:)
1851LOGICAL :: pointinpoly
1852
1853INTEGER :: i, j, starti
1854
1855pointinpoly = .false.
1856
1857IF (px(1) == px(SIZE(px)) .AND. py(1) == py(SIZE(px))) THEN ! closed polygon
1858 starti = 2
1859 j = 1
1860ELSE ! unclosed polygon
1861 starti = 1
1862 j = SIZE(px)
1863ENDIF
1864DO i = starti, SIZE(px)
1865 IF ((py(i) <= y .AND. y < py(j)) .OR. &
1866 (py(j) <= y .AND. y < py(i))) THEN
1867 IF (x < (px(j) - px(i)) * (y - py(i)) / (py(j) - py(i)) + px(i)) THEN
1868 pointinpoly = .NOT. pointinpoly
1869 ENDIF
1870 ENDIF
1871 j = i
1872ENDDO
1873
1874END FUNCTION pointinpoly
1875
1876END FUNCTION georef_coord_inside
1877
1878
1879
1880END MODULE georef_coord_class
Compute forward coordinate transformation from geographical system to projected system.
Compute backward coordinate transformation from projected system to geographical system.
Quick method to append an element to the array.
Detructors for the two classes.
Compute the distance in m between two points.
Export an array of georef_coord_array objects to a file in ESRI/Shapefile format.
Methods for returning the value of object members.
Import an array of georef_coord_array objects from a file in ESRI/Shapefile format.
Method for inserting elements of the array at a desired position.
Determine whether a point lies inside a polygon or a rectangle.
Method for packing the array object reducing at a minimum the memory occupation, without destroying i...
Read a single georef_coord object or an array of georef_coord objects from a Fortran FORMATTED or UNF...
Method for removing elements of the array at a desired position.
Write a single georef_coord object or an array of georef_coord objects to a Fortran FORMATTED or UNFO...
Generic subroutine for checking OPTIONAL parameters.
Costanti fisiche (DOUBLEPRECISION).
Definition: phys_const.f90:72
Gestione degli errori.
This module defines objects describing georeferenced sparse points possibly with topology and project...
Definitions of constants and functions for working with missing values.
Module for quickly interpreting the OPTIONAL parameters passed to a subprogram.
Derived type defining a one-dimensional array of georeferenced points with an associated topology (is...
Derive type defining a single georeferenced point, either in geodetic or in projected coordinates.

Generated with Doxygen.