मेरे पास ज़िप कोड की एक तालिका है, जिसमें प्रत्येक अक्षांश कोड के लिए केंद्र lat, lng शामिल है। मैं किसी भी मनमाने बिंदु से दिए गए मील के दायरे में ज़िप कोड की सूची प्राप्त करने के लिए इसका उपयोग करता हूं।
यह सिर्फ मेरे लिए हुआ है, सिर्फ इसलिए कि एक ज़िप का केंद्र बिंदु किसी दिए गए दायरे के भीतर नहीं है, इसका मतलब यह नहीं है कि ज़िप खुद त्रिज्या के भीतर नहीं है।
मैंने अपने सुपर एडवांस्ड आर्ट स्किल्स का इस्तेमाल यहां की बात को समझने के लिए किया है:
हरी धारीदार बूँदें ज़िप कोड A, B और C का प्रतिनिधित्व करती हैं।
लाल धब्बा प्रत्येक ज़िप कोड के लिए भौगोलिक केंद्र होते हैं
फुकिया डॉट टारगेट लोकेशन है, और ।।
लम्बी नीला वृत्त लक्ष्य स्थान से 1 मील की दूरी पर है
यदि मैं गुलाबी स्मूदी से 1 मील के दायरे में सभी ज़िप कोड के लिए एक क्वेरी चलाता हूं, तो केवल ज़िप कोड B और C को वापस भेजा जाएगा क्योंकि ज़िप A के लिए केंद्र बिंदु एक मील के दायरे में नहीं है, भले ही गुलाबी smudge हो ज़िप कोड A में स्पष्ट रूप से है।
SELECT *,
p.distance_unit
* DEGREES(ACOS(COS(RADIANS(p.latpoint))
* COS(RADIANS(z.y))
* COS(RADIANS(p.longpoint) - RADIANS(z.x))
+ SIN(RADIANS(p.latpoint))
* SIN(RADIANS(z.y)))) AS dist
FROM standard_zip AS z
JOIN ( /* these are the query parameters */
SELECT $lat AS latpoint, $lng AS longpoint,
$miles AS radius, 69 AS distance_unit
) AS p ON 1=1
WHERE z.y
BETWEEN p.latpoint - (p.radius / p.distance_unit)
AND p.latpoint + (p.radius / p.distance_unit)
AND z.x
BETWEEN p.longpoint - (p.radius / (p.distance_unit * COS(RADIANS(p.latpoint))))
AND p.longpoint + (p.radius / (p.distance_unit * COS(RADIANS(p.latpoint))))
ORDER BY dist
कैसे हो सकता है कि मैं एक प्रश्न लिखूं जिसमें परिणामों में ज़िप ए शामिल होगा?
मेरे पास प्रत्येक ज़िप कोड के लिए स्थानिक / ज्यामिति तक पहुंच है जिसे मैं ज़रूरत पड़ने पर तालिका में जोड़ सकता हूं, लेकिन मुझे नहीं पता कि मैं MySQL में इस उद्देश्य के लिए इसका उपयोग कैसे करूंगा।
संपादित करें : मैंने स्थानिक डेटा के लिए ओरेकल और MySQL डॉक्स को पढ़ने में एक दिन बिताया और सफलतापूर्वक अपने स्थानिक डेटा को MySQL में बदलने में कामयाब रहा । मैं एक समान क्वेरी लिखने के बारे में कैसे जाऊं जो अक्षांश और लंबे के बजाय ज्यामिति कॉलम का उपयोग करता है? मैं 2D डेटा का उपयोग कर रहा हूँ .. ज्यामिति बहुभुज हैं और केवल बहुभुज हैं ..
मुझे लगता है कि मैं इसे सुलझा लिया ..
select
*
from
(
select
MIN(st_distance(geom, POINT(-82.765136, 28.0914015))) * 69 as miles,
zip
from
zip_spatial
group by
zip
order by
miles asc
) d
where
d.miles < 5
अगर किसी के पास एक बेहतर, अधिक कुशल समाधान है, तो मैं अब के लिए इनाम को खुला छोड़ दूंगा।