17. تمارين الإسقاط¶
إليك تذكيرًا ببعض الدوال التي رأيناها. تلميح: ستكون مفيدة في التمارين!
sum(expression) دالة تجميعية تُرجع مجموع مجموعة من السجلات
ST_Length(linestring) تُرجع طول الخط (linestring)
ST_SRID(geometry) تُرجع SRID الشكل الهندسي
ST_Transform(geometry, srid) تحوّل الأشكال الهندسية إلى أنظمة مرجعية مكانية مختلفة
ST_GeomFromText(text) تُرجع
geometryST_AsText(geometry) تُرجع
textبصيغة WKTST_AsGML(geometry) تُرجع
textبصيغة GML
تذكّر الموارد المتاحة لك على الإنترنت:
وتذكّر أيضًا الجداول المتاحة لدينا:
nyc_census_blocksالأعمدة: name, popn_total, boroname, geom
nyc_streetsالأعمدة: name, type, geom
nyc_subway_stationsالأعمدة: name, geom
nyc_neighborhoodsالأعمدة: name, boroname, geom
17.1. التمارين¶
ما طول جميع الشوارع في نيويورك مقيسًا بنظام UTM 18؟
SELECT Sum(ST_Length(geom)) FROM nyc_streets;
10418904.7172ما تعريف WKT لـ SRID 2831؟
SELECT srtext FROM spatial_ref_sys WHERE SRID = 2831;
أو عبر https://epsg.io/2831
PROJCS["NAD83(HARN) / New York Long Island", GEOGCS["NAD83(HARN)", DATUM["NAD83 (High Accuracy Regional Network)", SPHEROID["GRS 1980", 6378137.0, 298.257222101, AUTHORITY["EPSG","7019"]], TOWGS84[-0.991, 1.9072, 0.5129, 0.0257899075194932, -0.009650098960270402, -0.011659943232342112, 0.0], AUTHORITY["EPSG","6152"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4152"]], PROJECTION["Lambert Conic Conformal (2SP)", AUTHORITY["EPSG","9802"]], PARAMETER["central_meridian", -74.0], PARAMETER["latitude_of_origin", 40.166666666666664], PARAMETER["standard_parallel_1", 41.03333333333333], PARAMETER["false_easting", 300000.0], PARAMETER["false_northing", 0.0], PARAMETER["scale_factor", 1.0], PARAMETER["standard_parallel_2", 40.666666666666664], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH], AUTHORITY["EPSG","2831"]]
ما طول جميع الشوارع في نيويورك مقيسًا بـ SRID 2831؟
SELECT Sum(ST_Length(ST_Transform(geom,2831))) FROM nyc_streets;
10421993.706374ملاحظة
الفرق بين قياسات UTM 18 وState Plane Long Island هو (10421993 - 10418904)/10418904، أي 0.02%. وعند الحساب على الشكل الإهليلجي باستخدام الإحداثيات الجغرافية (Geography) يكون الطول الكلي للشوارع 10421999، وهو أقرب إلى قيمة State Plane. وهذا ليس مستغربًا، لأن إسقاط State Plane Long Island معايَر بدقة لمنطقة صغيرة جدًا (مدينة نيويورك)، بينما يجب أن يقدّم UTM 18 نتائج معقولة لمنطقة إقليمية واسعة.
كم شارعًا يعبر خط الطول 74؟
SELECT Count(*) FROM nyc_streets WHERE ST_Intersects( ST_Transform(geom, 4326), 'SRID=4326;LINESTRING(-74 20, -74 60)' );
223"خط الطول 74" طريقة منمّقة لقول "خط رأسي في الإحداثيات الجغرافية قيمة X فيه هي -74". يمكننا إنشاء خط كهذا ثم مقارنته بالشوارع بعد إسقاطها هي أيضًا إلى الإحداثيات الجغرافية. أما إسقاط الخط إلى UTM والمقارنة هناك فسيُرجع إجابة مختلفة قليلًا. وللحصول على الإجابة نفسها، تحتاج إلى "تقسيمه إلى أجزاء" (segmentize) ليحتوي على نقاط أكثر، قبل التحويل.
SELECT Count(*) FROM nyc_streets WHERE ST_Intersects( geom, ST_Transform(ST_Segmentize('SRID=4326;LINESTRING(-74 20, -74 60)'::geometry,0.001), 26918) );