diff --git a/docs/how-tos/working-with-postgresql-data-types.rst b/docs/how-tos/working-with-postgresql-data-types.rst index 9cfcf5279..9ad0c934d 100644 --- a/docs/how-tos/working-with-postgresql-data-types.rst +++ b/docs/how-tos/working-with-postgresql-data-types.rst @@ -638,23 +638,28 @@ Say you want to add areas in polygon format. The request using string representa ] EOF -Now, when you request the information, PostgREST will automatically cast the ``area`` column to ``JSON`` format. Although this output is useful, you will want to use the PostGIS functions to have more control on filters or casts. For these cases, creating a ``view`` is your best option. For example, let's use some of the functions to get the data in `GeoJSON format `_ and to calculate the area in square units: +Now, when you request the information, PostgREST will automatically cast the ``area`` column to ``JSON`` format. Although this output is useful, you will want to use the PostGIS functions to have more control on filters or casts. For these cases, creating a ``function`` is your best option. For example, let's use some of the functions to get the data in `GeoJSON format `_ and to calculate the area in square units: .. code-block:: postgres - create or replace view coverage_geo as - select name, - -- Get the Geometry Object - st_AsGeoJSON(c.area)::json as geo_geometry, - -- Get the Feature Object - st_AsGeoJSON(c.*)::json as geo_feature, - -- Calculate the area in square units - st_area(c.area) as square_units - from coverage c; + create or replace function coverage_geo(filter text) returns json as $$ + select + json_build_object( + 'name', c.name, + -- Get the Geometry Object + 'geo_geometry', st_AsGeoJSON(c.area)::json, + -- Get the Feature Object + 'geo_feature', st_AsGeoJSON(c.*)::json, + -- Calculate the area in square units + 'square_units', st_area(c.area) + ) + from coverage c + where c.name = filter; + $$ language sql; - -- Create another view for the FeatureCollection Object + -- Create another function for the FeatureCollection Object -- for the sake of making the examples clearer - create or replace view coverage_geo_collection as + create or replace function coverage_geo_collection() returns json as $$ select json_build_object( 'type', 'FeatureCollection', @@ -662,6 +667,7 @@ Now, when you request the information, PostgREST will automatically cast the ``a ) as geo_feature_collection from coverage c; + $$ language sql; Now the query will return the information as you expected: @@ -669,39 +675,37 @@ Now the query will return the information as you expected: .. code-tab:: http - GET /coverage_geo?name=eq.big HTTP/1.1 + GET /rpc/coverage_geo?filter=big HTTP/1.1 .. code-tab:: bash Curl - curl "http://localhost:3000/coverage_geo?name=eq.big" + curl "http://localhost:3000/rpc/coverage_geo?filter=big" .. code-block:: json - [ - { - "name": "big", - "geo_geometry": { + { + "name": "big", + "geo_geometry": { + "type": "Polygon", + "coordinates": [ + [[0,0],[10,0],[10,10],[0,10],[0,0]] + ] + }, + "geo_feature": { + "type": "Feature", + "geometry": { "type": "Polygon", "coordinates": [ [[0,0],[10,0],[10,10],[0,10],[0,0]] ] }, - "geo_feature": { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [[0,0],[10,0],[10,10],[0,10],[0,0]] - ] - }, - "properties": { - "id": 2, - "name": "big" - } - }, - "square_units": 100 - } - ] + "properties": { + "id": 2, + "name": "big" + } + }, + "square_units": 100 + } And for the Feature Collection format: @@ -709,46 +713,44 @@ And for the Feature Collection format: .. code-tab:: http - GET /coverage_geo_collection HTTP/1.1 + GET /rpc/coverage_geo_collection HTTP/1.1 .. code-tab:: bash Curl - curl "http://localhost:3000/coverage_geo_collection" + curl "http://localhost:3000/rpc/coverage_geo_collection" .. code-block:: json - [ - { - "geo_feature_collection": { - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [[0,0],[1,0],[1,1],[0,1],[0,0]] - ] - }, - "properties": { - "id": 1, - "name": "small" - } + { + "geo_feature_collection": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [[0,0],[1,0],[1,1],[0,1],[0,0]] + ] }, - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [[0,0],[10,0],[10,10],[0,10],[0,0]] - ] - }, - "properties": { - "id": 2, - "name": "big" - } + "properties": { + "id": 1, + "name": "small" } - ] - } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [[0,0],[10,0],[10,10],[0,10],[0,0]] + ] + }, + "properties": { + "id": 2, + "name": "big" + } + } + ] } - ] + }