الاسم
ST_AsGeoJSON — تُعيد شكلًا هندسيًا أو معلمًا (feature) بصيغة GeoJSON.
المختصر
text ST_AsGeoJSON(record feature, text geom_column="", integer maxdecimaldigits=9, boolean pretty_bool=false, text id_column='');
text ST_AsGeoJSON(geometry geom, integer maxdecimaldigits=9, integer options=8);
text ST_AsGeoJSON(geography geog, integer maxdecimaldigits=9, integer options=0);
الوصف
تُعيد شكلًا هندسيًا ككائن "geometry" في GeoJSON، أو صفًا ككائن "feature" في GeoJSON.
تتوافق تمثيلات GeoJSON الناتجة للأشكال الهندسية والمعالم مع مواصفات GeoJSON RFC 7946، إلا عندما تكون الأشكال الهندسية المحلَّلة مرجعيةً بنظام إحداثيات (CRS) غير خط الطول وخط العرض في WGS84 (EPSG:4326، urn:ogc:def:crs:OGC::CRS84)؛ وعندئذٍ يُرفق بكائن geometry في GeoJSON افتراضيًا معرّف CRS قصير لـ SRID. الأشكال الهندسية ثنائية الأبعاد وثلاثية الأبعاد مدعومة كلاهما. لا يدعم GeoJSON إلا أنواع الأشكال الهندسية في SFS 1.1 (فلا دعم للمنحنيات مثلًا).
يُستخدم المعامل geom_column للتمييز بين أعمدة geometry المتعددة. إذا حُذف، يُحدَّد أول عمود geometry في السجل. وفي المقابل، يوفّر تمرير المعامل عمليات البحث عن نوع العمود.
يمكن استخدام الوسيط maxdecimaldigits لتقليل الحد الأقصى لعدد المنازل العشرية المستخدمة في الإخراج (القيمة الافتراضية 9). إذا كنت تستخدم EPSG:4326 وتُخرج الشكل الهندسي للعرض فقط، فقد تكون maxdecimaldigits=6 خيارًا جيدًا لكثير من الخرائط.
|
|
|
قد يؤدي استخدام المعامل |
يمكن استخدام الوسيط options لإضافة BBOX أو CRS في إخراج GeoJSON:
-
0: يعني لا خيار
-
1: GeoJSON BBOX
-
2: CRS قصير في GeoJSON (مثل EPSG:4326)
-
4: CRS طويل في GeoJSON (مثل urn:ogc:def:crs:EPSG::4326)
-
8: CRS قصير في GeoJSON إذا لم يكن EPSG:4326 (افتراضي)
يُستخدم المعامل id_column لتعيين العضو "id" في معالم GeoJSON المُعادة. ووفقًا لـ GeoJSON RFC، ينبغي استخدامه كلما كان للمعلم معرّف شائع الاستخدام، مثل المفتاح الأساسي. وعند عدم تحديده، لن تحصل المعالم الناتجة على عضو "id"، وستنتهي أي أعمدة غير عمود geometry، بما فيها أي مفاتيح محتملة، داخل العضو "properties" للمعلم.
تنص مواصفة GeoJSON على أن المضلعات تُوجَّه باستخدام قاعدة اليد اليمنى، وبعض العملاء يتطلبون هذا التوجيه. ويمكن ضمان ذلك باستخدام ST_ForcePolygonCCW . كما تتطلب المواصفة أن يكون الشكل الهندسي في نظام الإحداثيات WGS84 (SRID = 4326). وعند الحاجة يمكن إسقاط الشكل الهندسي إلى WGS84 باستخدام ST_Transform: ST_Transform( geom, 4326 ).
يمكن اختبار GeoJSON وعرضه عبر الإنترنت في geojson.io وgeojsonlint.com. وهو مدعوم على نطاق واسع في أطر الخرائط على الويب:
متاحة منذ: 1.3.4
متاحة منذ: 1.5.0 أُضيف دعم geography.
تغيّرت في: 2.0.0 دعم الوسائط الافتراضية والوسائط المسمّاة.
تغيّرت في: 3.0.0 دعم السجلات كمُدخلات
تغيّرت في: 3.0.0 إخراج SRID إذا لم يكن EPSG:4326.
تغيّرت في: 3.5.0 السماح بتحديد العمود الذي يحتوي على معرّف المعلم
تدعم هذه الدالة الأبعاد الثلاثية ولا تُسقط قيمة Z.
أمثلة
إنشاء FeatureCollection:
SELECT json_build_object(
'type', 'FeatureCollection',
'features', json_agg(ST_AsGeoJSON(t.*, id_column =
> 'id')::json)
)
FROM ( VALUES (1, 'one', 'POINT(1 1)'::geometry),
(2, 'two', 'POINT(2 2)'),
(3, 'three', 'POINT(3 3)')
) as t(id, name, geom);
{"type" : "FeatureCollection", "features" : [{"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "id": 1, "properties": {"name": "one"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[2,2]}, "id": 2, "properties": {"name": "two"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[3,3]}, "id": 3, "properties": {"name": "three"}}]}
إنشاء Feature:
SELECT ST_AsGeoJSON(t.*, id_column = > 'id') FROM (VALUES (1, 'one', 'POINT(1 1)'::geometry)) AS t(id, name, geom);
st_asgeojson
-----------------------------------------------------------------------------------------------------------------
{"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "id": 1, "properties": {"name": "one"}}
لا تنسَ تحويل بياناتك إلى خط الطول وخط العرض في WGS84 للتوافق مع مواصفة GeoJSON:
SELECT ST_AsGeoJSON(ST_Transform(geom,4326)) from fe_edges limit 1;
st_asgeojson
-----------------------------------------------------------------------------------------------------------
{"type":"MultiLineString","coordinates":[[[-89.734634999999997,31.492072000000000],
[-89.734955999999997,31.492237999999997]]]}
الأشكال الهندسية ثلاثية الأبعاد مدعومة:
SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');
{"type":"LineString","coordinates":[[1,2,3],[4,5,6]]}
يمكن استخدام وسيط الخيارات لإضافة BBOX وCRS في إخراج GeoJSON:
SELECT ST_AsGeoJSON(ST_SetSRID('POINT(1 1)'::geometry, 4326), 9, 4|1);
{"type":"Point","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1.000000000,1.000000000,1.000000000,1.000000000],"coordinates":[1,1]}