تحديد ما إذا كان إحداثا واحدا في دائرة نصف قطرها آخر

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

سؤال

دعنا نقول أن لدي طاولة من الصفوف التي تحتوي على إحداثيات.

ما هي أفضل طريقة لسحب صفوف الإحداثيات فقط التي هي في دائرة نصف قطرها من تنسيق آخر؟

لتبسيط سؤالي، أعطي المثال التالي:

Table like:
Columns: Latitude, Longitude.
Row1:    23.44444  24.55555
Row2:    32.44444  28.22222
Row3:    35.11111  32.12345

في بيان SQL، كيف يمكنني الحصول على صفوف الإحداثيات الموجودة في دائرة نصف قطرها الصف 3 على سبيل المثال؟

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

المحلول

هذه بريد يوضح كيفية القيام بذلك في SQL Server.

وهنا كيفية القيام بذلك في MySQL:

SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) + 
         COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon - lon) * 
         PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance 
FROM members 
HAVING distance<='10' ORDER BY distance ASC

نصائح أخرى

يبدو وكأنه صيغة المسافة هي:

D = 60* 1.1515 * acos (sin(pi*y/180) * sin(pi*Y/180) +
                       cos(pi*y/180) * cos(pi*Y/180) * cos((z-Z) *pi / 180) 
                 )  * 180 / pi)

حيث Y و Z - هي نقاط كل صف لك أن اختبارها، و Y و Z - هي نقاط مثال على ذلك.

لذلك يمكنك أن تجعل مثل هذا الشيء:

  1. حدد كل صف في الجدول والحصول عليه lon و lat.
  2. تطبيق الاستعلام من هذه, ، تغيير $lon و $lat إلى نموذج البيانات نقطة 1.

أنا لا أعرف كيفية جعل هذا في الوصول. ولكن بهذه الطريقة مضيق بطيئا.

ماذا تقصد في دائرة نصف قطرها؟ هل ترغب في تمرير مسافة، ويقول 5 أميال، والعثور على جميع الصفوف في غضون 5 أميال من الصف X؟

تحقق من ذلك إذا كان الأمر كذلك http://www.microsoft.com/sqlserver/2008/EN/US/SPatial-Data.aspx.

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