تحديد ما إذا كان إحداثا واحدا في دائرة نصف قطرها آخر
-
19-09-2019 - |
سؤال
دعنا نقول أن لدي طاولة من الصفوف التي تحتوي على إحداثيات.
ما هي أفضل طريقة لسحب صفوف الإحداثيات فقط التي هي في دائرة نصف قطرها من تنسيق آخر؟
لتبسيط سؤالي، أعطي المثال التالي:
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 - هي نقاط مثال على ذلك.
لذلك يمكنك أن تجعل مثل هذا الشيء:
- حدد كل صف في الجدول والحصول عليه
lon
وlat
. - تطبيق الاستعلام من هذه, ، تغيير
$lon
و$lat
إلى نموذج البيانات نقطة 1.
أنا لا أعرف كيفية جعل هذا في الوصول. ولكن بهذه الطريقة مضيق بطيئا.
ماذا تقصد في دائرة نصف قطرها؟ هل ترغب في تمرير مسافة، ويقول 5 أميال، والعثور على جميع الصفوف في غضون 5 أميال من الصف X؟
تحقق من ذلك إذا كان الأمر كذلك http://www.microsoft.com/sqlserver/2008/EN/US/SPatial-Data.aspx.