سؤال

لقد كنت أعمل في Postgis للنقطة في بولي ولدي هذه الوظيفة:

حدد * من Table_Name حيث ST_Contains (العمود، ST_SETSRID (ST_MAKEPOINT (-92.095109، 46.804100)، 4326)؛

العمود متعدد الأقمار (((النقاط)))

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

لقد فعلت كل شيء من هذا القبيل؟

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

المحلول

لا ينفذ MySQL الكثير من الاستفسارات المكانية - لا أعرف بالتأكيد من الحواف ولكن هناك طرق تقاربها وغيرها من المهام. على سبيل المثال، يمكنك القيام بالمسافات بين النقاط عن طريق سحب جميع النتائج مع الإحداثيات في مستطيل معين ثم حساب المسافة كما هو موضح هنا. يمكنك أيضا استخدام المستطيلات لتقريبك contains مشكلة. أولا، بناء جملة WKT أكثر عمومية لتحديد:

select * from table_name where contains(the_polygon, GeomFromText('POINT(12.3 45.6)');

أعتقد أن المواصفات المفتوحة ل contains لم يتم تنفيذه، ولكن هناك وظيفة mysql لاستخدام الحد الأدنى على الحدود المستطيل لتقريب ما إذا كانت وجهة نظرك في المضلع:

select * from table_name where MBRContains(the_polygon, GeomFromText('POINT(12.3 45.6)');

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

تحديث: بعد أن طلب هذا السؤال أ ملخص جميل تم نشرها إلى opengeo.org؛ يبدو أنه حتى حيث ليس من الواضح أو المعلن MySQL يستخدم MBR. انظر أيضا إلى أنواع الخوارز الأصلية point, lseg, box, path, polygon, و circle إذا كنت ترغب في فهم المزيد حول كيفية عمل Postgis ولماذا يتمتع ميزة ميزة ثنائية الأبعاد بالصف الأقصر إلى مجرفة بشكل عام.

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