مقدمة في وظائف تحليل التدفق الجغرافية المكانية

تمكن الوظائف الجغرافية المكانية في Azure Stream Analytics التحليلات الفورية على البيانات الجغرافية المكانية المتدفقة لسيناريوهات مثل مشاركة الركوب، إدارة الأسطول، تتبع الأصول، التسييج الجغرافي، وتتبع الهاتف عبر مواقع الهواتف. مع وجود بضعة أسطر فقط من كود الاستعلام، يمكنك بناء حلول تستخدم الدوال السبع المدمجة في لغة استعلام تحليلات التدفق (CreateLineString, CreatePoint, CreatePolygon, ST_INTERSECTSST_DISTANCEST_OVERLAPS, و ST_WITHIN), والتي تدعم جميع أنواع WKT وGeoJSON point وpolygon وLineString. تصف هذه المقالة كل وظيفة وتعرض أمثلة على الاستعلامات حتى تتمكن من تطبيقها على بياناتك المتدفقة.

أنواع الهندسة وترتيب الإحداثيات

تعمل الدوال الجغرافية المكانية مع ثلاثة أنواع هندسية GeoJSON. النقطة هي موقع واحد يعرف بخط الطول وخط العرض. سلسلة الخط هي مجموعة مرتبة من نقطتين أو أكثر تشكل خطا متصلا، مثل مسار أو طريق. المضلع هو شكل مغلق تعود حدوده إلى نقطة البداية، مثل بصمة مبنى أو سياج جغرافي.

تنقسم الدوال إلى مجموعتين. دوال البناء (CreatePoint, CreateLineString, و CreatePolygon) تبني هندسات من قيم الإحداثيات في بيانات الأحداث الخاصة بك. تقارن دوال العلاقة (ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS, و ST_WITHIN) بين هندسيتين وتصف كيف ترتبطان في الفضاء.

في GeoJSON، الإحداثيات مرتبة أولا على خط الطول وخط العرض ثانيا، لذا يظهر خط العرض والطول المدخلان بالترتيب العكسي في الهندسة الناتجة. فهم هذا الترتيب، إلى جانب اتجاه الحلقات عكس عقارب الساعة الذي تتطلبه المضلعات، يساعدك على التنبؤ بمخرج كل دالة.

إنشاء سلسلة خطوط

CreateLineString هي دالة بناء ترجع سلسلة خطوط GeoJSON، وهي هندسة تمثل سلسلة متصلة من النقاط كخط على خريطة معينة. يقبل نقطتين أو أكثر ويربطهما بالترتيب الذي تدرجهما، مما يجعله طريقة طبيعية لنمذجة المسارات والمسارات ومقاطع الطرق من بيانات التدفق المتدفق.

يوضح المثال التالي هذا السلوك من خلال دمج ثلاث نقاط في سلسلة خط. النقطة الأولى تأتي من تدفق بيانات الإدخال، وأنت تعرف النقطتين الأخريين يدويا.

SELECT  
     CreateLineString(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5))  
FROM input  

مثال على المدخلات

العرض خط الطول
3.0 -10.2
-87.33 20.2321

مثال على المخرجات

{"type" : "LineString", "الإحداثيات" : [ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5] ]}

{"type" : "LineString", "الإحداثيات" : [ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5] ]}

لمعرفة المزيد، راجع مرجع CreateLineString .

إنشاء نقطة

CreatePoint هي دالة بناء ترجع نقطة GeoJSON من خطي عرض وطول. النقطة هي أبسط هندسة وتمثل موقعا واحدا على الخريطة، مثل الموقع الحالي لمركبة أو أصل. يجب أن تكون float قيم خطوط العرض والطول نوع بيانات.

يوضح المثال التالي هذا السلوك من خلال إنشاء نقطة من قيم خطوط العرض والطول في بيانات الإدخال المتدفقة.

SELECT  
     CreatePoint(input.latitude, input.longitude)  
FROM input 

مثال على المدخلات

العرض خط الطول
3.0 -10.2
-87.33 20.2321

مثال على المخرجات

{"type" : "نقطة", "الإحداثيات" : [-10.2, 3.0]}

{"type" : "نقطة", "الإحداثيات" : [20.2321, -87.33]}

لمعرفة المزيد، راجع مرجع CreatePoint .

إنشاءPolygon

CreatePolygon هي دالة بناء ترجع مضلع GeoJSON من مجموعة نقاط. يمثل المضلع منطقة مغلقة على الخريطة، مثل بصمة مبنى، أو حدود مستودع، أو سياج جغرافي. ترتيب النقاط يتبع اتجاه الحلقة اليمنى، أو عكس عقارب الساعة: إذا تخيلت المشي من نقطة إلى أخرى بالترتيب الذي تعلنها فيه، يبقى مركز المضلع إلى يسارك طوال الوقت.

يوضح المثال التالي هذا السلوك من خلال إنشاء مضلع من ثلاث نقاط. تحدد النقطتين الأوليين يدويا، والنقطة الأخيرة تأتي من بيانات الإدخال.

SELECT  
     CreatePolygon(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5), CreatePoint(input.latitude, input.longitude))  
FROM input  

مثال على المدخلات

العرض خط الطول
3.0 -10.2
-87.33 20.2321

مثال على المخرجات

{"type" : "Polygon", "الإحداثيات" : [[ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5], [-10.2, 3.0] ]]}

{"type" : "Polygon", "الإحداثيات" : [[ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5], [20.2321, -87.33] ]]}

لمعرفة المزيد، قم بزيارة مرجع CreatePolygon .

ST_DISTANCE

ST_DISTANCE هي دالة علاقة تعيد المسافة بين هندسيتين بالمتر. يساعدك على فهم مدى قرب أو بعد موقعين، وهو أمر مفيد في سيناريوهات القرب مثل تنبيهات المركبات القريبة وحسابات مناطق الخدمة.

يوضح المثال التالي كيفية استخدام هذه الوظيفة لتحديد متى تكون محطة الوقود أقل من 10 كم من السيارة.

SELECT Cars.Location, Station.Location 
FROM Cars c  
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000

لمعرفة المزيد، راجع ST_DISTANCE المرجع.

ST_OVERLAPS

ST_OVERLAPS هي دالة علاقة تقارن بين هندسيتين وتبلغ عما إذا كانتا تشتركان في منطقة مشتركة. يعود ب 1 عندما تتداخل الهندسات و0 عندما لا تتداخل. هذه الوظيفة مفيدة لاكتشاف التعارضات المكانية مثل منطقة خطر تلمس منطقة اهتمام.

يوضح المثال التالي كيفية استخدام هذه الوظيفة لتحديد متى يقع مبنى ضمن منطقة فيضانات محتملة.

SELECT Building.Polygon, Flooding.Polygon
FROM Building b 
JOIN Flooding f ON ST_OVERLAPS(b.Polygon, f.Polygon)

المثال التالي يستخدم ST_OVERLAPS أيضا للكشف عن متى تتجه عاصفة نحو سيارة.

SELECT Cars.Location, Storm.Course
FROM Cars c
JOIN Storm s ON ST_OVERLAPS(c.Location, s.Course)

لمعرفة المزيد، راجع ST_OVERLAPS المرجع.

ST_INTERSECTS

ST_INTERSECTS هي دالة علاقة تقارن بين هندسيتين وتبلغ عما إذا تقاطعتا أو تلامسن. يعيد 1 عندما تتقاطع الهندسات و0 عندما لا تتقاطع العدد. تساعدك هذه الوظيفة على اكتشاف أماكن التقاء المسارات أو المناطق.

يوضح المثال التالي كيفية استخدام هذه الوظيفة لتحديد ما إذا كان الطريق المعبد يتقاطع مع طريق ترابي.

SELECT  
     ST_INTERSECTS(input.pavedRoad, input.dirtRoad)  
FROM input  

مثال على المدخلات

الطريق المعبد طريق الترابة
{"type":"LineString", "الإحداثيات": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"type":"LineString", "الإحداثيات": [ [0.0, 10.0], [0.0, 0.0], [0.0, -10.0] ]}
{"type":"LineString", "الإحداثيات": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"type":"LineString", "الإحداثيات": [ [-10.0, 10.0], [0.0, 10.0], [10.0, 10.0] ]}

مثال على المخرجات

1

0

لمعرفة المزيد، قم بزيارة ST_INTERSECTS المرجع.

ST_WITHIN

ST_WITHIN هي دالة علاقة تبلغ عما إذا كانت هندسة واحدة موجودة بالكامل داخل أخرى. يعيد 1 عندما تكون الهندسة الأولى داخل الثانية، و0 عندما لا يكون كذلك، وهو أساس سيناريوهات الاحتواء مثل السياج الجغرافي وفحوصات مناطق التسليم.

يوضح المثال التالي هذا السلوك من خلال تحديد ما إذا كانت نقطة وجهة التسليم تقع ضمن مضلع مستودع معين.

SELECT  
     ST_WITHIN(input.deliveryDestination, input.warehouse)  
FROM input 

مثال على المدخلات

التوصيل وجهة warehouse
{"type":"Point", "الإحداثيات": [76.6, 10.1]} {"type":"Polygon", "الإحداثيات": [ [0.0, 0.0], [10.0, 0.0], [10.0, 10.0], [0.0, 10.0], [0.0, 0.0] ]}
{"type":"Point", "الإحداثيات": [15.0, 15.0]} {"type":"Polygon", "الإحداثيات": [ [10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0] ]}

مثال على المخرجات

0

1

لمعرفة المزيد، قم بزيارة ST_WITHIN المرجع.