[1] | 1 | .. _projection_exercises: |
---|
| 2 | |
---|
[28] | 3 | Partie 16 : Exercices de projection |
---|
| 4 | =================================== |
---|
[1] | 5 | |
---|
[28] | 6 | Voici un rappel de certaines fonctions que nous avons vu. Astuce : elles devraient être utiles pour les exercices ! |
---|
| 7 | |
---|
| 8 | * :command:`sum(expression)` agrégation qui retourn la somme d'un esemble de valeurs |
---|
| 9 | * :command:`ST_Length(linestring)` retourne la longueur d'une ligne |
---|
| 10 | * :command:`ST_SRID(geometry, srid)` retourne le SRID d'une géométrie |
---|
| 11 | * :command:`ST_Transform(geometry, srid)` re-projette des géométries dans un autre systÚme de références spatiales |
---|
| 12 | * :command:`ST_GeomFromText(text)` retourne un objet ``geometry`` |
---|
| 13 | * :command:`ST_AsText(geometry)` retourne le WKT (``text``) |
---|
| 14 | * :command:`ST_AsGML(geometry)` retourne le GML (``text``) |
---|
[1] | 15 | |
---|
[28] | 16 | Rappelez-vous les resssources en ligne : |
---|
[1] | 17 | |
---|
| 18 | * http://spatialreference.org |
---|
| 19 | * http://prj2epsg.org |
---|
| 20 | |
---|
[28] | 21 | Et les tables qui sont disponibles : |
---|
[1] | 22 | |
---|
| 23 | * ``nyc_census_blocks`` |
---|
| 24 | |
---|
| 25 | * name, popn_total, boroname, the_geom |
---|
| 26 | |
---|
| 27 | * ``nyc_streets`` |
---|
| 28 | |
---|
| 29 | * name, type, the_geom |
---|
| 30 | |
---|
| 31 | * ``nyc_subway_stations`` |
---|
| 32 | |
---|
| 33 | * name, the_geom |
---|
| 34 | |
---|
| 35 | * ``nyc_neighborhoods`` |
---|
| 36 | |
---|
| 37 | * name, boroname, the_geom |
---|
| 38 | |
---|
[28] | 39 | Exercices |
---|
[1] | 40 | --------- |
---|
| 41 | |
---|
[28] | 42 | * **"Quelle est la longueur des rue de New York, mesurée en UTM 18 ?"** |
---|
[1] | 43 | |
---|
| 44 | .. code-block:: sql |
---|
| 45 | |
---|
| 46 | SELECT Sum(ST_Length(the_geom)) |
---|
| 47 | FROM nyc_streets; |
---|
| 48 | |
---|
| 49 | :: |
---|
| 50 | |
---|
| 51 | 10418904.7172 |
---|
| 52 | |
---|
[28] | 53 | * **"Quelle est la définition du SRID 2831 ?"** |
---|
[1] | 54 | |
---|
| 55 | .. code-block:: sql |
---|
| 56 | |
---|
| 57 | SELECT srtext FROM spatial_ref_sys |
---|
| 58 | WHERE SRID = 2831; |
---|
| 59 | |
---|
[28] | 60 | Ou, via `prj2epsg <http://prj2epsg.org/epsg/2831>`_ |
---|
[1] | 61 | |
---|
| 62 | :: |
---|
| 63 | |
---|
| 64 | PROJCS["NAD83(HARN) / New York Long Island", |
---|
| 65 | GEOGCS["NAD83(HARN)", |
---|
| 66 | DATUM["NAD83 (High Accuracy Regional Network)", |
---|
| 67 | SPHEROID["GRS 1980", 6378137.0, 298.257222101, AUTHORITY["EPSG","7019"]], |
---|
| 68 | TOWGS84[-0.991, 1.9072, 0.5129, 0.0257899075194932, -0.009650098960270402, -0.011659943232342112, 0.0], |
---|
| 69 | AUTHORITY["EPSG","6152"]], |
---|
| 70 | PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], |
---|
| 71 | UNIT["degree", 0.017453292519943295], |
---|
| 72 | AXIS["Geodetic longitude", EAST], |
---|
| 73 | AXIS["Geodetic latitude", NORTH], |
---|
| 74 | AUTHORITY["EPSG","4152"]], |
---|
| 75 | PROJECTION["Lambert Conic Conformal (2SP)", AUTHORITY["EPSG","9802"]], |
---|
| 76 | PARAMETER["central_meridian", -74.0], |
---|
| 77 | PARAMETER["latitude_of_origin", 40.166666666666664], |
---|
| 78 | PARAMETER["standard_parallel_1", 41.03333333333333], |
---|
| 79 | PARAMETER["false_easting", 300000.0], |
---|
| 80 | PARAMETER["false_northing", 0.0], |
---|
| 81 | PARAMETER["scale_factor", 1.0], |
---|
| 82 | PARAMETER["standard_parallel_2", 40.666666666666664], |
---|
| 83 | UNIT["m", 1.0], |
---|
| 84 | AXIS["Easting", EAST], |
---|
| 85 | AXIS["Northing", NORTH], |
---|
| 86 | AUTHORITY["EPSG","2831"]] |
---|
| 87 | |
---|
| 88 | |
---|
[28] | 89 | * **"Quelle est la longueur des rue de New York, mesuré en utilisant le SRID 2831 ?"** |
---|
[1] | 90 | |
---|
| 91 | .. code-block:: sql |
---|
| 92 | |
---|
| 93 | SELECT Sum(ST_Length(ST_Transform(the_geom,2831))) |
---|
| 94 | FROM nyc_streets; |
---|
| 95 | |
---|
| 96 | :: |
---|
| 97 | |
---|
| 98 | 10421993.706374 |
---|
| 99 | |
---|
| 100 | .. note:: |
---|
| 101 | |
---|
[28] | 102 | La différence entre les mesure en UTM 18 et en the Stateplane Long Island est de (10421993 - 10418904)/10418904, soit 0.02%. Calculé sur la sphéroïde en utilissant en :ref:`geography` le total des longueurs des route est 10421999, qui est proche de la valeur dans l'autre systÚme de projection (Stateplane Long Island) est précisément calibré pour une petite zone géographique (la ville de New York) alors que le systÚme UTM 18 doit fournir un résultat raisonable pour une zone régionale plus large. |
---|
[1] | 103 | |
---|
[28] | 104 | * **"Quelle est la représentation KML du point de la station de métris 'Broad St' ?"** |
---|
[1] | 105 | |
---|
| 106 | .. code-block:: sql |
---|
| 107 | |
---|
| 108 | SELECT ST_AsKML(the_geom) |
---|
| 109 | FROM nyc_subway_stations |
---|
| 110 | WHERE name = 'Broad St'; |
---|
| 111 | |
---|
| 112 | :: |
---|
| 113 | |
---|
| 114 | <Point><coordinates>-74.010671468873468,40.707104815584088</coordinates></Point> |
---|
| 115 | |
---|
[28] | 116 | Hé ! les coordonnées sont géographiques bien que nous n'ayons pas fait appÚle à a la fonction :command:`ST_Transform, pourquoi ? Parce que le standard KML spécifit que toutes les coordonnées *doivent* être en géographiques (en fait, dans le systÚme EPSG:4326), donc la fonction :command:`ST_AsKML` réalise la transformation automatiquement. |
---|