10. تمارين الأشكال الهندسية

إليك تذكيرًا بجميع الدوال التي رأيناها حتى الآن. ستكون مفيدة في التمارين!

  • sum(expression) دالة تجميعية تُعيد مجموع مجموعة من السجلات

  • count(expression) دالة تجميعية تُعيد حجم مجموعة من السجلات

  • ST_GeometryType(geometry) تُعيد نوع الشكل الهندسي

  • ST_NDims(geometry) تُعيد عدد أبعاد الشكل الهندسي

  • ST_SRID(geometry) تُعيد رقم معرّف النظام المرجعي المكاني للشكل الهندسي

  • ST_X(point) تُعيد الإحداثي X

  • ST_Y(point) تُعيد الإحداثي Y

  • ST_Length(linestring) تُعيد طول الخط

  • ST_StartPoint(geometry) تُعيد الإحداثي الأول على شكل نقطة

  • ST_EndPoint(geometry) تُعيد الإحداثي الأخير على شكل نقطة

  • ST_NPoints(geometry) تُعيد عدد الإحداثيات في الخط

  • ST_Area(geometry) تُعيد مساحة المضلعات

  • ST_NRings(geometry) تُعيد عدد الحلقات (عادةً 1، وأكثر إن وُجدت ثقوب)

  • ST_ExteriorRing(polygon) تُعيد الحلقة الخارجية على شكل خط

  • ST_InteriorRingN(polygon, integer) تُعيد حلقة داخلية محددة على شكل خط

  • ST_Perimeter(geometry) تُعيد طول جميع الحلقات

  • ST_NumGeometries(multi/geomcollection) تُعيد عدد الأجزاء في المجموعة

  • ST_GeometryN(geometry, integer) تُعيد الجزء المحدد من المجموعة

  • ST_GeomFromText(text) تُعيد geometry

  • ST_AsText(geometry) تُعيد WKT text

  • ST_AsEWKT(geometry) تُعيد EWKT text

  • ST_GeomFromWKB(bytea) تُعيد geometry

  • ST_AsBinary(geometry) تُعيد WKB bytea

  • ST_AsEWKB(geometry) تُعيد EWKB bytea

  • ST_GeomFromGML(text) تُعيد geometry

  • ST_AsGML(geometry) تُعيد GML text

  • ST_GeomFromKML(text) تُعيد geometry

  • ST_AsKML(geometry) تُعيد KML text

  • ST_AsGeoJSON(geometry) تُعيد JSON text

  • ST_AsSVG(geometry) تُعيد SVG text

وتذكّر أيضًا الجداول المتاحة لدينا:

  • nyc_census_blocks

    • blkid (معرّف الكتلة)، popn_total (إجمالي السكان)، boroname (اسم الحي الإداري)، geom (الشكل الهندسي)

  • nyc_streets

    • name (الاسم)، type (النوع)، geom (الشكل الهندسي)

  • nyc_subway_stations

    • name (الاسم)، geom (الشكل الهندسي)

  • nyc_neighborhoods

    • name (الاسم)، boroname (اسم الحي الإداري)، geom (الشكل الهندسي)

10.1. التمارين

  • ما مساحة حي 'West Village'؟

    SELECT ST_Area(geom)
      FROM nyc_neighborhoods
      WHERE name = 'West Village';
    
    1044614.5296486
    

    ملاحظة

    تُعطى المساحة بالمتر المربع. للحصول على المساحة بالهكتار، اقسم على 10000. وللحصول عليها بالإيكر (acre)، اقسم على 4047.

  • ما نوع الشكل الهندسي لشارع ‘Pelham St’؟ وما طوله؟

    SELECT
       ST_GeometryType(geom),
       ST_Length(geom)
      FROM nyc_streets
      WHERE name = 'Pelham St';
    
    ST_MultiLineString
    50.323
    
  • ما تمثيل GeoJSON لمحطة المترو 'Broad St'؟

    SELECT
     ST_AsGeoJSON(geom)
    FROM nyc_subway_stations
    WHERE name = 'Broad St';
    
    {"type":"Point",
     "crs":{"type":"name","properties":{"name":"EPSG:26918"}},
     "coordinates":[583571.905921312,4506714.341192182]}
    
  • ما الطول الكلي للشوارع (بالكيلومترات) في مدينة نيويورك؟ (تلميح: وحدة قياس البيانات المكانية هي المتر، والكيلومتر يساوي 1000 متر.)

    SELECT Sum(ST_Length(geom)) / 1000
      FROM nyc_streets;
    
    10418.9047172
    
  • ما مساحة مانهاتن بالإيكر (acre)؟ (تلميح: يحتوي كل من nyc_census_blocks و nyc_neighborhoods على العمود boroname.)

    SELECT Sum(ST_Area(geom)) / 4047
      FROM nyc_neighborhoods
      WHERE boroname = 'Manhattan';
    
    13965.3201224118
    

    أو...

    SELECT Sum(ST_Area(geom)) / 4047
      FROM nyc_census_blocks
      WHERE boroname = 'Manhattan';
    
    14601.3987215548
    
  • ما محطة المترو الواقعة في أقصى الغرب؟

    SELECT ST_X(geom), name
      FROM nyc_subway_stations
      ORDER BY ST_X(geom)
      LIMIT 1;
    
    Tottenville
    
  • ما طول 'Columbus Cir' (أي Columbus Circle)؟

    SELECT ST_Length(geom)
      FROM nyc_streets
      WHERE name = 'Columbus Cir';
    
    308.34199
    
  • ما طول الشوارع في مدينة نيويورك، ملخّصًا حسب النوع؟

    SELECT type, Sum(ST_Length(geom)) AS length
    FROM nyc_streets
    GROUP BY type
    ORDER BY length DESC;
    
                           type                       |      length
    --------------------------------------------------+------------------
     residential                                      | 8629870.33786606
     motorway                                         | 403622.478126363
     tertiary                                         | 360394.879051303
     motorway_link                                    | 294261.419479668
     secondary                                        | 276264.303897926
     unclassified                                     | 166936.371604458
     primary                                          | 135034.233017947
     footway                                          | 71798.4878378096
     service                                          |  28337.635038596
     trunk                                            | 20353.5819826076
     cycleway                                         | 8863.75144825929
     pedestrian                                       | 4867.05032825026
     construction                                     | 4803.08162103562
     residential; motorway_link                       | 3661.57506293745
     trunk_link                                       | 3202.18981240201
     primary_link                                     | 2492.57457083536
     living_street                                    | 1894.63905457332
     primary; residential; motorway_link; residential | 1367.76576941335
     undefined                                        |  380.53861910346
     steps                                            | 282.745221342127
     motorway_link; residential                       |  215.07778911517
    

    ملاحظة

    يرتّب الشرط ORDER BY length DESC النتيجة حسب الطول تنازليًا، فتظهر الأنواع الأكثر انتشارًا في أول القائمة.