مشكلة استعلام Sql 2008 - ما هو LatLong الموجود في مضلع جغرافي؟

StackOverflow https://stackoverflow.com/questions/303927

سؤال

لدي الجدولين التاليين :-

الأشكال الجغرافية

  • هوية GeoShapeId INT
  • الاسم فارتشار (100)
  • جغرافيا ShapeFile [هذا مضلع مغلق لخطوط العرض/الأطوال]

مواقع الجريمة

  • CrimeLocationId هوية INT
  • جغرافيا خطوط العرض/الخطوط الطويلة [هذه نقطة العرض/الطول]

الآن، لدي حوالي 10 آلاف نتيجة GeoShape وحوالي 500 موقع جريمة.

أحاول معرفة الأشكال الجغرافية التي توجد بداخلها جميع نقاط العرض/الطول الـ 500 للجريمة.

:( أنا فقط لا تحصل عليه!كنت أحاول أن أفعل STIntersects في استعلام فرعي ولكن ذلك لم ينجح.أي اقتراحات؟

هتافات!

تحرير 1:لا أستطيع استخدام أي GEOMETRY المهام ..لأن (كما هو مذكور أعلاه) هذه كلها أنواع جغرافية.

تحرير 2:أنا أعرف كيفية استخدامها STContains و STIntersects.من فضلك لا تقدم أمثلة أساسية على ذلك.أشعر بالفضول أكثر بشأن إجراء استعلام معقد باستخدام بنية الجدول أعلاه.

هل كانت مفيدة؟

المحلول

فيما يتعلق بـ "تعديلاتك"، نادرًا ما ترى سؤالاً يتضمن "الرجاء عدم تقديم...".بالتأكيد كل قليلا يساعد؟خاصة وأنك لم تظهر لنا ما أنت عليه بالفعل يفعل يعرف عن STContains أو STIntersects (أو Filter() لذاك السبب)...

على أي حال، كان لدي قاعدة بيانات للرموز البريدية ومواقع المتاجر في متناول يدي، لذلك قمت بإعادة تسمية الجداول/الأعمدة لتتناسب مع الجداول/الأعمدة الخاصة بك (بعد ذلك لدي 6,535 CrimeLocatoins و3,285 GeoShapes).أفترض أنك قد اكتشفت ذلك الآن - ولكن قد يجد شخص آخر هذا مفيدًا...

يقوم الاستعلام التالي بإرجاع عدد مواقع الجريمة في كل GeoShapes.ShapeFile

SELECT G.Name, COUNT(CL.Id)
FROM   GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
ORDER BY 2 DESC

فإنه يأخذ الأعمار (مثل 20 دقيقة) لأنني لم أقم بإعداد أي فهارس جغرافية مكانية ولدى ملفات الشكل الخاصة بي عدد نقاط مرتفع، ولكنها تعمل بنجاح.إذا أردت تقييد النتائج كما تقترح:

SELECT G.Name, COUNT(CL.Id)
FROM   GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
HAVING COUNT(CL.Id) = 500

بالطبع لا تريد ترميز الرقم 500 - لذا يمكنك إضافة COUNT(*) FROM CrimeLocations استعلام فرعي هناك، أو متغير مع الإجمالي من استعلام منفصل.

هل هذا معقد بما فيه الكفاية؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top