
हैवरसाइन फॉर्मूला (PHP, JavaScript, Java, Python, MySQL, MSSQL उदाहरण) का उपयोग करके अक्षांश और देशांतर के बिंदुओं के बीच ग्रेट सर्किल दूरी की गणना या क्वेरी करें।
This month, I’ve been programming quite a bit in पीएचपी और MySQL एसटी जीआईएस. While researching the topic, I had a hard time finding some of the भौगोलिक गणना to find the distance between two locations, so I wanted to share them here.

दो बिंदुओं के बीच की दूरी की गणना करने का सरल तरीका पाइथागोरसियन सूत्र का उपयोग करके त्रिकोण (ए of + बी² = सी²) के कर्ण की गणना करना है। इस के रूप में जाना जाता है यूक्लिडियन दूरी.
That’s an interesting start, but it doesn’t apply to geography since the distance between lines of latitude and longitude are not equal distances apart. As you get closer to the equator, lines of latitude get further apart. If you use a simple triangulation equation, it may measure distance accurately in one location and wrong in the other because of the curvature of the Earth.
महान सर्कल दूरी
पृथ्वी के चारों ओर लंबी दूरी तय करने वाले मार्गों को ग्रेट सर्कल डिस्टेंस के रूप में जाना जाता है। अर्थात... एक गोले पर दो बिंदुओं के बीच की सबसे छोटी दूरी समतल मानचित्र के बिंदुओं से भिन्न होती है। इसे इस तथ्य के साथ जोड़ लें कि अक्षांश और देशांतर रेखाएँ समान दूरी पर नहीं हैं... और आपके पास एक कठिन गणना है।
यहाँ एक शानदार वीडियो विवरण है कि ग्रेट सर्किल कैसे काम करते हैं।
द हॅवरसाइन फॉर्मूला
पृथ्वी की वक्रता का उपयोग करने वाली दूरी को हैवरसाइन सूत्र में शामिल किया गया है, जो पृथ्वी की वक्रता की अनुमति देने के लिए त्रिकोणमिति का उपयोग करता है। जब आप पृथ्वी पर 2 स्थानों के बीच की दूरी का पता लगा रहे हैं (जैसे कौआ उड़ता है), तो एक सीधी रेखा वास्तव में एक चाप होती है।
यह हवाई उड़ान में लागू होता है - क्या आपने कभी उड़ानों के वास्तविक मानचित्र को देखा है और ध्यान दिया है कि वे धनुषाकार हैं? ऐसा इसलिए है क्योंकि दो बिंदुओं के बीच एक आर्च में उड़ना सीधे स्थान से छोटा होता है।
PHP: अक्षांश और देशांतर के 2 बिंदुओं के बीच की दूरी की गणना करें
दो दशमलव स्थानों तक पूर्णांकित दो बिंदुओं (माइल बनाम किलोमीटर रूपांतरण के साथ) के बीच की दूरी की गणना के लिए यहां PHP सूत्र है।
function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'miles') {
$theta = $longitude1 - $longitude2;
$distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
$distance = acos($distance);
$distance = rad2deg($distance);
$distance = $distance * 60 * 1.1515;
switch($unit) {
case 'miles':
break;
case 'kilometers' :
$distance = $distance * 1.609344;
}
return (round($distance,2));
}
चर हैं:
- $अक्षांश1 - आपके पहले स्थान के अक्षांश के लिए एक चर।
- $देशांतर1 - आपके पहले स्थान के देशांतर के लिए एक चर
- $अक्षांश2 - आपके दूसरे स्थान के अक्षांश के लिए एक चर।
- $देशांतर2 - आपके दूसरे स्थान के देशांतर के लिए एक चर।
- $यूनिट - डिफ़ॉल्ट जा रहा है मील. इसे अपडेट या पास किया जा सकता है किलोमीटर की दूरी पर.
जावा: अक्षांश और देशांतर के 2 बिंदुओं के बीच की दूरी की गणना करें
public static double getDistanceBetweenPointsNew(double latitude1, double longitude1, double latitude2, double longitude2, String unit) {
double theta = longitude1 - longitude2;
double distance = 60 * 1.1515 * (180/Math.PI) * Math.acos(
Math.sin(latitude1 * (Math.PI/180)) * Math.sin(latitude2 * (Math.PI/180)) +
Math.cos(latitude1 * (Math.PI/180)) * Math.cos(latitude2 * (Math.PI/180)) * Math.cos(theta * (Math.PI/180))
);
if (unit.equals("miles")) {
return Math.round(distance, 2);
} else if (unit.equals("kilometers")) {
return Math.round(distance * 1.609344, 2);
} else {
return 0;
}
}
चर हैं:
- अक्षांश २३ - आपके पहले स्थान के अक्षांश के लिए एक चर।
- देशांतर1 - आपके पहले स्थान के देशांतर के लिए एक चर
- अक्षांश २३ - आपके दूसरे स्थान के अक्षांश के लिए एक चर।
- देशांतर2 - आपके दूसरे स्थान के देशांतर के लिए एक चर।
- इकाई - डिफ़ॉल्ट जा रहा है मील. इसे अपडेट या पास किया जा सकता है किलोमीटर की दूरी पर.
जावास्क्रिप्ट: अक्षांश और देशांतर के 2 बिंदुओं के बीच की दूरी की गणना करें
function getDistanceBetweenPoints(latitude1, longitude1, latitude2, longitude2, unit = 'miles') {
let theta = longitude1 - longitude2;
let distance = 60 * 1.1515 * (180/Math.PI) * Math.acos(
Math.sin(latitude1 * (Math.PI/180)) * Math.sin(latitude2 * (Math.PI/180)) +
Math.cos(latitude1 * (Math.PI/180)) * Math.cos(latitude2 * (Math.PI/180)) * Math.cos(theta * (Math.PI/180))
);
if (unit == 'miles') {
return Math.round(distance, 2);
} else if (unit == 'kilometers') {
return Math.round(distance * 1.609344, 2);
}
}
चर हैं:
- अक्षांश २३ - आपके पहले स्थान के अक्षांश के लिए एक चर।
- देशांतर1 - आपके पहले स्थान के देशांतर के लिए एक चर
- अक्षांश २३ - आपके दूसरे स्थान के अक्षांश के लिए एक चर।
- देशांतर2 - आपके दूसरे स्थान के देशांतर के लिए एक चर।
- इकाई - डिफ़ॉल्ट जा रहा है मील. इसे अपडेट या पास किया जा सकता है किलोमीटर की दूरी पर.
पायथन: अक्षांश और देशांतर के 2 बिंदुओं के बीच की दूरी की गणना करें
Here’s the Python formula for calculating the distance between two points (along with Mile vs. Kilometer conversion) rounded to two decimal places. Credit to my son, Bill Karr, a Data Scientist for खुली अंतर्दृष्टि, कोड के लिए।
from numpy import sin, cos, arccos, pi, round
def rad2deg(radians):
degrees = radians * 180 / pi
return degrees
def deg2rad(degrees):
radians = degrees * pi / 180
return radians
def getDistanceBetweenPointsNew(latitude1, longitude1, latitude2, longitude2, unit = 'miles'):
theta = longitude1 - longitude2
distance = 60 * 1.1515 * rad2deg(
arccos(
(sin(deg2rad(latitude1)) * sin(deg2rad(latitude2))) +
(cos(deg2rad(latitude1)) * cos(deg2rad(latitude2)) * cos(deg2rad(theta)))
)
)
if unit == 'miles':
return round(distance, 2)
if unit == 'kilometers':
return round(distance * 1.609344, 2)
चर हैं:
- अक्षांश २३ - आपके पहले स्थान के लिए एक चर अक्षांश.
- देशांतर1 - आपके पहले स्थान के लिए एक चर देशान्तर
- अक्षांश २३ - आपके दूसरे स्थान के लिए एक चर अक्षांश.
- देशांतर2 - आपके दूसरे स्थान के लिए एक चर देशान्तर.
- इकाई - डिफ़ॉल्ट जा रहा है मील. इसे अपडेट या पास किया जा सकता है किलोमीटर की दूरी पर.
MySQL: अक्षांश और देशांतर का उपयोग करके मीलों में दूरी की गणना करके एक सीमा के भीतर सभी रिकॉर्ड प्राप्त करना
Using Spatial Data Types in MySQL is a more efficient and convenient way to work with geographical data, including calculating distances between points. MySQL supports Spatial Data Types such as POINT
, LINESTRING
, तथा POLYGON
, along with spatial functions like ST_Distance
.
जब आप उपयोग करते हैं ST_Distance
function in MySQL with geographical data represented as POINT
coordinates, it takes into account the curvature of the Earth’s surface. The spherical model used by ST_Distance
employs the Haversine formula. This approximation is suitable for most practical purposes but may introduce slight inaccuracies for very long distances.
Here’s how you can calculate distances between two points using Spatial Data Types:
- Create a Table with Spatial Data Type: First, create a table with a
POINT
column to store geographical points. For example:
CREATE TABLE locations (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
coordinates POINT
);
Insert your geographical points into this table using the POINT
निर्माता:
INSERT INTO locations (name, coordinates)
VALUES
('Point A', POINT(40.7128, -74.0060)), -- New York City
('Point B', POINT(34.0522, -118.2437)); -- Los Angeles
- Calculate Distance Using ST_Distance: You can calculate the distance between two points using the
ST_Distance
function. Here’s an example query to calculate the distance between two points:
SELECT
id1,
id2,
(ST_Distance(coordinates1, coordinates2) / 1609.344) AS distance_in_miles
FROM (
SELECT
l1.id AS id1,
l2.id AS id2,
l1.coordinates AS coordinates1,
l2.coordinates AS coordinates2
FROM
locations l1,
locations l2
WHERE
l1.id = 1 AND l2.id = 2
) AS distances;
बदलें 1
और 2
with the IDs of the two points you want to calculate the distance between.
- परिणाम: The query will return the distance between the two points in miles.
Using Spatial Data Types and the ST_Distance
function provides a more efficient and accurate way to work with geographical data in MySQL. It also simplifies calculating distances between points, making it easier to manage and query your data.
MySQL: अक्षांश और देशांतर का उपयोग करके किलोमीटर में दूरी की गणना करके एक सीमा के भीतर सभी रिकॉर्ड प्राप्त करना
डिफ़ॉल्ट रूप से ST_Distance
returns the distance in meters, so you simply need to update the query for kilometers:
SELECT
id1,
id2,
(ST_Distance(coordinates1, coordinates2) / 1000) AS distance_in_kilometers
FROM (
SELECT
l1.id AS id1,
l2.id AS id2,
l1.coordinates AS coordinates1,
l2.coordinates AS coordinates2
FROM
locations l1,
locations l2
WHERE
l1.id = 1 AND l2.id = 2
) AS distances;
Microsoft SQL सर्वर भौगोलिक दूरी: STDistance
यदि आप Microsoft SQL सर्वर का उपयोग कर रहे हैं, तो वे अपना स्वयं का कार्य प्रदान करते हैं, एसटीडीडिस्टेंस भूगोल डेटा प्रकार का उपयोग करके दो बिंदुओं के बीच की दूरी की गणना के लिए।
DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326);
SET @h = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.STDistance(@h);
मनश साहू, वीपी और आर्किटेक्ट को हैट टिप Highbridge.
साझा करने के लिए बहुत - बहुत धन्यवाद। यह एक आसान कॉपी और पेस्ट का काम था और बहुत अच्छा काम करता है। आपने मेरा बहुत समय बचाया है।
C को पोर्ट करने वाले किसी व्यक्ति के लिए FYI:
डबल डिग्रेड 2 (डबल डीएल) {रिटर्न डाउन * (3.14159265358979323846 / 180.0); }
पोस्टिंग का बहुत अच्छा टुकड़ा - बहुत अच्छा काम किया - मुझे केवल लेट-लॉन्ग पकड़े हुए टेबल का नाम बदलना पड़ा। यह बहुत तेजी से काम करता है .. मेरे पास लैट-लॉन्ग (<400) की काफी कम संख्या है, लेकिन मुझे लगता है कि यह अच्छी तरह से स्केल होगा। अच्छी साइट भी - मैंने अभी इसे अपने del.icio.us खाते में जोड़ा है और नियमित रूप से वापस जाँच करेगा।
बहुत बहुत धन्यवाद पीटर और केरी! यदि आप जीआईएस परियोजनाओं पर काम करना पसंद करते हैं, तो मेरा सुझाव है:
बहुत बहुत धन्यवाद ... 😀
मैंने पूरे दिन की दूरी की गणना के लिए खोज की और हर्वसिन एल्गोरिथ्म पाया, इसका उदाहरण यह देने के लिए कि इसे एक sql स्टेटमेंट में कैसे रखा जाए। धन्यवाद और बधाई, डैनियल
मदद करने के लिए खुशी है, रेल दोस्त!
अब मैं एक 'बहुभुज' PHP फ़ंक्शन में खोज रहा हूँ जो अनुक्रमित अक्षांश और देशांतर निर्देशांकों की एक सरणी लेगा और यह पता लगाएगा कि क्या कोई अन्य बिंदु बहुभुज के भीतर या बाहर है।
मैंने ढूंढा एक बहुभुज में एक बिंदु अगर यह पता लगाने के लिए समीकरण!
मुझे लगता है कि आपके एसक्यूएल को एक बयान की आवश्यकता है।
इसके स्थान पर <= $ दूरी की आपको आवश्यकता हो सकती है
HAVING दूरी का उपयोग करें <= $ दूरी
अन्यथा मुझे समय और ऊर्जा का एक गुच्छा बचाने के लिए धन्यवाद।
हाय David,
यदि आप किसी प्रकार का ग्रुप बाय स्टेटमेंट कर रहे हैं, तो आपको HAVING की आवश्यकता होगी। मैं ऊपर के उदाहरण में ऐसा नहीं कर रहा हूं।
डॉग
MySQL 5.x के रूप में, आप व्हेयर क्लॉज व्यू पर एक उपनाम का उपयोग नहीं कर सकते http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html
उपरोक्त क्वेरी में WHERE के बजाय HAVING का उपयोग करें
आपका बहुत बहुत धन्यवाद। आपने बहुत अच्छा काम किया है। यही वह चीज है जो मैं वास्तव में चाहता हूं। बहुत बहुत धन्यवाद।
इस कोड को साझा करने के लिए बहुत बहुत धन्यवाद। इसने मुझे विकास का बहुत समय बचाया। साथ ही, आपके पाठकों को यह इंगित करने के लिए धन्यवाद कि MySQL 5.x के लिए एक HAVING कथन आवश्यक है। बहुत मददगार।
मैं पाठकों से धन्य हूं कि मैं जितना होशियार हूं!
🙂
उपरोक्त सूत्र मेरा बहुत समय बचा रहा है। आपका बहुत बहुत धन्यवाद।
मुझे एनएमईए प्रारूप और डिग्री के बीच भी स्विच करना होगा। मुझे पृष्ठ के निचले भाग में इस URL पर एक सूत्र मिला। http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html
किसी को भी यह कैसे सत्यापित करने के लिए पता है?
शुक्रिया!
सताना
नमस्ते,
एक और सवाल। क्या NMEA स्ट्रिंग्स के लिए नीचे दिए गए सूत्र की तरह कोई सूत्र है?
1342.7500, एन, 10052.2287, ई
$GPRMC,032731.000,A,1342.7500,N,10052.2287,E,0.40,106.01,101106,,*0B
धन्यवाद,
सताना
मैंने यह भी पाया कि WHERE ने मेरे लिए काम नहीं किया। इसे HAVING में बदल दिया और सब कुछ सही काम करता है। सबसे पहले मैंने टिप्पणियों को नहीं पढ़ा और नेस्टेड चयन का उपयोग करके इसे फिर से लिखा। दोनों ठीक काम करेंगे।
Mysql में लिखी गई स्क्रिप्ट के लिए बहुत धन्यवाद, बस कुछ मामूली समायोजन करने थे (HAVING) for
ग्रेट की नौकरी
अविश्वसनीय रूप से उपयोगी, बहुत बहुत धन्यवाद! मुझे "WHERE" के बजाय नए "HAVING" से कुछ समस्याएँ हो रही थीं, लेकिन एक बार मैंने यहाँ टिप्पणियाँ पढ़ीं (हताशा = P में अपने दाँत पीसने के लगभग आधे घंटे के बाद), मुझे यह अच्छी तरह से काम करने लगा। धन्यवाद ^ _ ^
बहुत बहुत धन्यवाद महान काम करता है
ध्यान रखें कि इस तरह का एक चुनिंदा बयान बहुत कम्प्यूटेशनल रूप से तीव्र और इसलिए धीमा होगा। यदि आपके पास उन प्रश्नों का एक बहुत है, तो यह चीजों को बहुत तेज़ी से नीचे गिरा सकता है।
एक बहुत कम गहन दृष्टिकोण एक पहले (कच्चे) चयन को चलाने के लिए एक परिकलित दूरी द्वारा परिभाषित एक वर्ग क्षेत्र का उपयोग करना है अर्थात "टेबलनाम से चुनें * जहां अक्षांश 1 और अक्षांश 2 के बीच अक्षांश और लोन 1 और लोन 2 के बीच देशांतर"। अक्षांश 1 = लक्ष्य अक्षांश - अक्षांश, अक्षांश 2 = लक्ष्य अक्षांश + अक्षांश, लोन के समान। latdiff ~= दूरी/१११ (किमी के लिए), या दूरी/६९ मील के लिए १ डिग्री अक्षांश के बाद से ~१११ किमी (थोड़ी भिन्नता है क्योंकि पृथ्वी थोड़ा अंडाकार है, लेकिन इस उद्देश्य के लिए पर्याप्त है)। londiff = दूरी / (abs(cos(deg111rad(latitude))*69)) - या 1 मील के लिए (आप वास्तव में भिन्नता के लिए खाते में थोड़ा बड़ा वर्ग ले सकते हैं)। फिर उसका परिणाम लें और इसे रेडियल सेलेक्ट में फीड करें। बस आउट-ऑफ-बाउंड निर्देशांक के लिए खाते में मत भूलना - यानी स्वीकार्य देशांतर की सीमा -111 से +2 है और स्वीकार्य अक्षांश की सीमा -111 से +69 है - यदि आपका लैटडिफ़ या लॉन्डिफ़ इस सीमा से बाहर चलता है . ध्यान दें कि ज्यादातर मामलों में यह लागू नहीं हो सकता है क्योंकि यह केवल ध्रुव से ध्रुव तक प्रशांत महासागर के माध्यम से एक रेखा पर गणना को प्रभावित करता है, हालांकि यह चुकोटका के हिस्से और अलास्का के हिस्से को काटता है।
इसके द्वारा हम जो हासिल करते हैं, वह उन अंकों की संख्या में महत्वपूर्ण कमी है, जिनके खिलाफ आप यह गणना करते हैं। यदि आपके पास डेटाबेस में एक लाख वैश्विक बिंदु समान रूप से समान रूप से वितरित हैं और आप 100 किमी के भीतर खोज करना चाहते हैं, तो आपकी पहली (तेज़) खोज 10000 वर्ग किमी के क्षेत्र की है और संभवतः लगभग 20 परिणाम प्राप्त करेंगे (एक से अधिक वितरण के आधार पर सतह का क्षेत्रफल लगभग 500 मीटर वर्ग किमी), जिसका अर्थ है कि आप इस क्वेरी के लिए 20 बार के बजाय XNUMX बार जटिल दूरी की गणना चलाते हैं।
उदाहरण में छोटी सी गलती ... जो 50 किमी (100 नहीं) के भीतर होगी क्योंकि हम अपने वर्ग के "त्रिज्या" को देख रहे हैं।
बढ़िया सलाह! मैंने वास्तव में एक डेवलपर के साथ काम किया जिसने एक ऐसा फ़ंक्शन लिखा जो अंदर के वर्ग को खींचता है और फिर एक पुनरावर्ती फ़ंक्शन जो परिधि के चारों ओर 'वर्ग' बनाता है ताकि शेष बिंदुओं को शामिल किया जा सके और बहिष्कृत किया जा सके। परिणाम एक अविश्वसनीय रूप से तेज़ परिणाम था - वह माइक्रोसेकंड में लाखों बिंदुओं का मूल्यांकन कर सकता था।
ऊपर मेरा दृष्टिकोण निश्चित रूप से 'कच्चा' है लेकिन सक्षम है। एक बार फिर धन्यवाद!
डौग,
मैं मूल्यांकन करने के लिए MySQL और php का उपयोग करने का प्रयास कर रहा हूं कि बहुभुज के भीतर एक लंबा लंबा बिंदु है या नहीं। क्या आप जानते हैं कि आपके डेवलपर मित्र ने इस कार्य को पूरा करने के बारे में कोई उदाहरण प्रकाशित किया है या नहीं। या क्या आप कोई अच्छे उदाहरण जानते हैं। अग्रिम में धन्यवाद।
हाय सब यह मेरा परीक्षण एसक्यूएल बयान है:
SELECT DISTINCT area_id, (
(
(
acos( sin( ( 13.65 * pi( ) /180 ) ) * sin( (
`lat_dec` * pi( ) /180 ) ) + cos( ( 13.65 * pi( ) /180 ) ) * cos( (
`lat_dec` * pi( ) /180 )
) * cos( (
( 51.02 - `lon_dec` ) * pi( ) /180 )
)
)
) *180 / pi( )
) *60 * 1.1515 * 1.609344
) AS distance
FROM `post_codes` WHERE distance <= 50
और मैस्केल मुझे बता रहा है कि दूरी, एक स्तंभ के रूप में मौजूद नहीं है, मैं इसके द्वारा आदेश का उपयोग कर सकता हूं, मैं इसे बिना कहां कर सकता हूं, और यह काम करता है, लेकिन इसके साथ नहीं ...
“HEREING दूरी” के साथ “WHERE दूरी” को बदलें।
एक आकर्षण, धन्यवाद, डगलस की तरह काम करता है!
यह बहुत अच्छा है, हालाँकि यह ठीक उसी तरह है जैसे पक्षी उड़ते हैं। Google मैप्स API को किसी भी तरह (शायद सड़कों आदि का उपयोग करके) शामिल करने की कोशिश करना और इसे शामिल करना बहुत अच्छा होगा। बस परिवहन के एक अलग रूप का उपयोग करके एक विचार देना है। मुझे अभी भी PHP में एक सिम्युलेटेड एनालिंग फंक्शन करना है जो ट्रैवलिंग सेल्समैन की समस्या का कुशल समाधान प्रस्तुत करने में सक्षम होगा। लेकिन मुझे लगता है कि मैं ऐसा करने के लिए आपके कुछ कोड का पुन: उपयोग करने में सक्षम हो सकता हूं।
हाय डगलस,
इस लेख के लिए बहुत-बहुत धन्यवाद - आपने मुझे बहुत समय दिया।
ख्याल रखना,
nimrod @Irarael
अच्छा लेख! मुझे दो बिंदुओं के बीच दूरी की गणना करने के तरीके के बारे में बहुत सारे लेख मिले, लेकिन मैं वास्तव में एसक्यूएल स्निपेट की तलाश कर रहा था।
धन्यवाद बहुत अच्छा काम करता है
इस सूत्र के लिए बहुत-बहुत धन्यवाद। इसने कुछ समय एक स्टोर लोकेशन प्रोजेक्ट पर मुंडाया जो मुझे खा रहा था।
ढेरों धन्यवाद। कोड की इस छोटी सी लाइन ने मुझे स्टोर लोकेशन प्रोजेक्ट में काफी समय बचाया!
# 1054 - अज्ञात स्तंभ 'दूरी' जहां 'खंड' में
अनुमोदन करना
मुझे भी! समस्या क्या है :-/? "दूरी" को हल करने के लिए कैसे - कॉलम की समस्या? कृपया हमारी मदद करो!! 🙂
WHERE के बजाय HAVING का उपयोग करने का प्रयास करें
अनुसंधान के 2 दिन आखिरकार इस पृष्ठ को ढूंढते हैं जो मेरी समस्या को हल करता है। ऐसा लगता है कि मैं अपने वुल्फरामअल्फा को बेहतर तरीके से मिटा रहा हूं और अपने गणित पर ब्रश कर रहा हूं। WHERE से HAVING में परिवर्तन से कार्य क्रम में मेरी स्क्रिप्ट है। धन्यवाद
इसके बजाय क्लॉज उपयोग:
दूरी दूरी <50
धन्यवाद जॉर्जी। मैं कॉलम 'दूरी' नहीं मिला। एक बार जब मैं वहाँ को बदलने के लिए यह एक आकर्षण की तरह काम किया!
काश यह पहला पृष्ठ होता जो मुझे इस पर मिलता। कई अलग-अलग कमांड की कोशिश करने के बाद यह ठीक से काम करने के लिए एकमात्र था, और मेरे खुद के डेटाबेस को फिट करने के लिए आवश्यक न्यूनतम परिवर्तनों के साथ।
बहुत बहुत धन्यवाद!
काश यह पहला पृष्ठ होता जो मुझे इस पर मिलता। कई अलग-अलग कमांड की कोशिश करने के बाद यह ठीक से काम करने के लिए एकमात्र था, और मेरे खुद के डेटाबेस को फिट करने के लिए आवश्यक न्यूनतम परिवर्तनों के साथ।
बहुत बहुत धन्यवाद!
आपका बहुत बहुत धन्यवाद!
आपका बहुत बहुत धन्यवाद!
मुझे नहीं लगता कि कोड अब दिखाई दे रहा है। शायद यह फ़ायरफ़ॉक्स है?
मैंने अभी फ़ायरफ़ॉक्स और क्रोम दोनों में परीक्षण किया है और यह प्रदर्शित हो रहा है। पुनः प्रयास करें?
नमस्ते। बहुत बहुत धन्यवाद। यह एक आकर्षण की तरह काम करता है।
बहुत बहुत धन्यवाद डगलस। यह एकदम सही काम कर रहा है।
मुझे पता है कि यह सूत्र काम करता है, लेकिन मैं यह नहीं देख सकता कि पृथ्वी की त्रिज्या को कहाँ ध्यान में रखा जाता है। क्या कोई मुझे बता सकता है, कृपया?
टिम, हैवरसाइन सूत्र की पूरी व्याख्या के लिए (यह कोड नहीं है) विकिपीडिया के लेख को देखें: http://en.wikipedia.org/wiki/Haversine_formula
सुंदर! इससे मुझे बहुत मदद मिली है!
महान सामान डगलस। क्या आपने दो बिंदुओं के लॉन्ग / लाट / बेयरिंग को देखते हुए चौराहे को प्राप्त करने की कोशिश की है?
नहीं किया है कि अभी तक, Khanh!
डगलस, एसक्यूएल क्वेरी का धन्यवाद, जिसकी मुझे आवश्यकता है, और मुझे लगा कि मुझे इसे स्वयं लिखना होगा। आपने मुझे संभवतः अक्षांश देशांतर सीखने के घंटों से बचाया है!
मैं Myrr क्वेरी पर 'जहां खंड' में अज्ञात कॉलम 'डिस्टर्ब': अज्ञात कॉलम 'डिस्टेंस' प्राप्त करता रहता हूं।
पीटर, कृपया अन्य टिप्पणियों के माध्यम से पढ़ें। ऐसा प्रतीत होता है कि कुछ लोगों को WHERE / HAVING के लिए एक अलग वाक्यविन्यास का उपयोग करना पड़ा।
इस उत्तम लेख के लिए आपका धन्यवाद! बस मेरे DB पर कोड का परीक्षण किया और महान काम किया!
डगलस, इस अद्भुत कोड के लिए धन्यवाद। मेरे जीपीएस सामुदायिक पोर्टल पर ऐसा करने के लिए मेरे सिर को फटा जा रहा है। आपने मुझे घंटों बचाया है।
सुनकर बहुत अच्छा लगा, ऐश!
इस उपयोगी लेख को पोस्ट करने के लिए धन्यवाद,
लेकिन किसी कारण के लिए मैं पूछना चाहता हूँ
mysql db के अंदर के कॉर्ड्स के बीच की दूरी कैसे प्राप्त करें और यूजर द्वारा php में कॉर्ड्स डाले जाएं?
अधिक स्पष्ट रूप से वर्णन करने के लिए:
1.user को db से निर्दिष्ट डेटा का चयन करने के लिए [id] सम्मिलित करना होगा और उपयोगकर्ता के स्वयं के कोर्डर्स
2. php फ़ाइल को [id] का उपयोग करके लक्ष्य डेटा (कोर्डर्स) मिलता है और फिर उपयोगकर्ता और लक्ष्य बिंदु के बीच की दूरी की गणना करता है
या बस नीचे दिए गए कोड से दूरी प्राप्त कर सकते हैं?
$ qry = "SELECT *, ((acos (पाप ("। $ अक्षांश "। * pi () / 180)) * sin ((` अक्षांश '* pi () / 180) + cos (")। $ अक्षांश। ”* pi () / 180)) * cos ((` अक्षांश `* pi () / 180)) * cos (((“। $ देशांतर। ”-` देशांतर`) * pi () / 180 ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) 'MyTable` WHERE दूरी> = "$ दूरी से।" >>>> क्या मैं यहाँ से दूरी "ले" सकता हूँ?
एक बार फिर धन्यवाद,
टिम्मी एस
कोई बात नहीं, मैंने पता लगाया है कि "फ़ंक्शन" php में कैसे काम करता है
$ dis = getDistanceBetweenPointsNew ($ userLati, $ userLongi, $ lati, $ longi, $ unit = 'Km')
बहुत बहुत धन्यवाद!!
ठीक है, मैंने जो कुछ भी कोशिश की है वह काम नहीं कर रहा है। मेरा मतलब है, मेरे पास क्या काम है, लेकिन दूरियां दूर हैं।
क्या कोई संभवतः देख सकता है कि इस कोड में क्या गलत है?
if (isset ($ _ POST ['प्रस्तुत'])) {$ z = $ _POST ['zipcode']; $ r = $ _POST ['त्रिज्या']; गूंज "परिणाम के लिए"। $ z; $ sql = mysql_query (“Select DISTINCT m.zipcode, m.MktName, m.LocAddSt, m.LocAddCity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1। शहर, z1.state फ्रॉम mrk m, zip z1, zip z2 WHERE m.zipcode = z1.zipcode और z2.zipcode = $ z AND (3963 * acos (troscate (sin (z2.lat / 57.2958)) * sin (m) y1 / 57.2958) + cos (z2.lat / 57.2958) * cos (m.y1 / 57.2958) * cos (m.x1 / 57.2958 - z2.lon / 57.2958, 8)) <= $ r ") या मरें") (mysql_error ()); जबकि ($ पंक्ति = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName'] ""। $ स्टोर = $ पंक्ति ['LocAddSt']। ””; $ स्टोर। = $ पंक्ति ['लोकेडसिटी']। "," $ पंक्ति ['लोकेडस्टेट "]।" "$ पंक्ति [ 'ज़िपकोड']। $ अक्षांश 1 = $ पंक्ति ['अक्षांश']; $ देशांतर 1 = $ पंक्ति ['लोन']; $ अक्षांश 2 = $ पंक्ति ['y1']; $ देशांतर 2 = $ पंक्ति ['एक्स 1']; $ शहर = $ पंक्ति ['शहर']; $ राज्य = $ पंक्ति ['राज्य']; $ dis = getnew ($ अक्षांश 1, $ देशांतर 1, $ अक्षांश 2, $ देशांतर 2, $ इकाई = 'एमआई'); // $ dis = दूरी ($ lat1, $ lon1, $ lat2, $ lon2); $ सत्यापित = $ पंक्ति ['सत्यापित']; अगर ($ सत्यापित == '1') {गूंज ""; गूंज ""। $ स्टोर। ""; इको $ डिस। " मीलों दूर"; गूंज ""; } और {गूंज ""। $ स्टोर। ""; इको $ डिस। " मीलों दूर"; गूंज ""; }}}
मेरे कार्य। एफपीपी कोड
समारोह getnew ($ अक्षांश 1, $ देशांतर 1, $ अक्षांश 2, $ देशांतर 2, $ इकाई = 'एमआई') {$ थीटा = $ देशांतर 1 - $ देशांतर 2; $ दूरी = (पाप (डाउनट्रेड 2)) ); $ दूरी = एकड़ ($ दूरी); $ दूरी = rad1deg ($ दूरी); $ दूरी = $ दूरी * 2 * 2; स्विच ($ इकाई) {केस 'Mi': ब्रेक; मामला 'किमी': $ दूरी = $ दूरी * 2; } वापसी (गोल ($ दूरी, 1)); }
आप पहले से धन्यवाद
इस लेख के लिए शुक्रिया। मेरे कोड के साथ काम करना ठीक है। 🙂
हे डगलस, महान लेख। मुझे भौगोलिक अवधारणाओं की व्याख्या और कोड वास्तव में दिलचस्प लगे। मेरा एकमात्र सुझाव अंतरिक्ष के लिए होगा और कोड को डिस्प्ले के लिए इंडेंट करना होगा (उदाहरण के लिए स्टैकओवरफ़्लो)। मैं समझता हूं कि आप अंतरिक्ष का संरक्षण करना चाहते हैं, लेकिन पारंपरिक कोड रिक्ति / इंडेंटेशन यह मेरे लिए एक प्रोग्रामर के रूप में, पढ़ने और विच्छेद करने में बहुत आसान बना देगा। किसी भी तरह, यह एक छोटी सी बात है। अच्छा काम करते रहो।
धन्यवाद! मैंने पोस्ट को थोड़ा संशोधित किया है ... लेकिन समीकरण बहुत अधिक जगह लेते हैं और इतने लंबे होते हैं कि मुझे यकीन नहीं होता कि यह बहुत मदद करता है।
बहुत बहुत धन्यवाद।
यहां फ़ंक्शन के साथ उपयोग करते समय हम एक प्रकार की दूरी प्राप्त कर रहे हैं..इस प्रकार क्वेरी का उपयोग करके इसकी अन्य प्रकार की दूरी
मैं दो राज्य के बीच की दूरी की गणना नहीं करेगा
Muchas gracias por tan hermoso कोडिगो…
यह मैं अच्छा cosinus कार्य करता है। मैं गणित नहीं जानता, लेकिन धन्यवाद!
महान काम ... 🙂 (y)
यह तेजी से लगता है (mysql 5.9) चयन में दो बार सूत्र का उपयोग करने के लिए और जहां:
$ सूत्र = "(((एकोस (पाप ("। $ अक्षांश। "* पीआई) (/ 180)) * पाप ((` अक्षांश '* पीआई () / 180)) + cos ("" $ अक्षांश। "* Pi () / 180)) * cos ((` अक्षांश `* pi () / 180)) * cos ((((" $ देशांतर। "-` देशांतर`) * pi () / (180))) * 180 / अनुकरणीय ()) * 60 * 1.1515 * 1.609344) ";
$ sql = 'SELECT *,'। $ सूत्र। ' तालिका से दूरी के रूप में '.. $ सूत्र।' <= '। $ दूरी;
धन्यवाद…
अगर काम नहीं कर रहा है
"जहां दूरी"
अगर काम कर रहा है
"दूरी"
इस लेख के लिए बहुत धन्यवाद। यह बहुत उपयोगी है।
PHP को पहले "व्यक्तिगत होम पेज" नामक एक सरल स्क्रिप्टिंग प्लेटफ़ॉर्म के रूप में बनाया गया था। आजकल PHP (हाइपरटेक्स्ट प्रीप्रोसेसर के लिए छोटा) Microsoft के सक्रिय सर्वर पेज (ASP) तकनीक का एक विकल्प है।
PHP एक ओपन सोर्स सर्वर-साइड भाषा है जिसका उपयोग डायनामिक वेब पेज बनाने के लिए किया जाता है। इसे HTML में एम्बेड किया जा सकता है। PHP आमतौर पर लिनक्स / यूनिक्स वेब सर्वर पर एक MySQL डेटाबेस के साथ संयोजन में उपयोग किया जाता है। यह शायद सबसे लोकप्रिय पटकथा भाषा है।
मैंने उपरोक्त समाधान ठीक से काम नहीं किया।
मुझे इसे बदलने की आवश्यकता है:
$ qqq = "SELECT *, (((acos (sin ("। $ अक्षांश "। * pi () / 180)) * sin ((` latt` * pi () / 180) + cos (")। $ अक्षांश। "* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos ((("। $ देशांतर।" - `longt`) * pi () / 180 ))) * 180 / पीआई ()) * 60 * 1.1515) के रूप में दूरी से `रजिस्टर`”;
धन्यवाद कुपेन्द्र!
थैंक यू सर पूरी तरह से खराब हो रहा है .. लेकिन मेरा एक सवाल है कि अगर मैं दशमलव बिंदु के बिना आउटपुट करना चाहता हूं तो मैं क्या कर सकता हूं ..?
अग्रिम धन्यवाद.
नमस्कार, कृपया मुझे इस पर आपकी सहायता की आवश्यकता होगी।
मैंने अपने वेब-सर्वर से अनुरोध किया
53.47792 = $ अक्षांश
-2.23389 = $ देशांतर
और 20 = वह दूरी जिसे मैं पुनः प्राप्त करना चाहता हूं
हालाँकि आप सूत्र का उपयोग करते हुए, यह मेरे db में सभी पंक्तियों को पुनः प्राप्त करता है
$results = DB::select( DB::raw(“SELECT *, (((acos(sin((“.$latitude.”)पाई ()/180)) * पाप ((अव्यपीआई () / 180)) + कॉस ("। $ अक्षांश।"पीआई () / 180)) * कॉस ((लेटपीआई () / 180)) * कॉस (((("। $ रेखांश।" - एलएनजी)पीआई () / 180))))180/पीआई ())601.1515*1.609344) मार्करों से दूरी के रूप में दूरी>= “.$distance ));
[{"आईडी": 1, "नाम": "फ्रेंकी जॉनी और लुइगो टू", "पता": "939 डब्ल्यू एल कैमिनो रियल, माउंटेन व्यू, सीए", "लैट": 37.386337280273, "ओंग": - 122.08582305908, "दूरी": 16079.294719663}, {"आईडी": 2, "नाम": "एमीस ईस्ट कोस्ट पिज़्ज़ेरिया", "पता": "790 कास्त्रो सेंट, माउंटेन व्यू, सीए", "लाट": 37.387138366699, "lng": -122.08323669434, "दूरी": 16079.175940152}, "" आईडी ": 3," नाम ":" कप्प्स पिज्जा बार एंड ग्रिल "," पता ":" 191 कास्त्रो सेंट, माउंटेन व्यू, सीए "," लैट ": 37.393886566162। "Lng": - 122.07891845703, "दूरी": 16078.381373826}, {"id": 4, "नाम": "राउंड टेबल पिज्जा: माउंटेन व्यू", "पता": "570 N Shleline Blvd, माउंटेन व्यू, CA", "Lat": 37.402652740479, "lng": - 122.07935333252, "दूरी": 16077.420540582}, {"id": 5, "name": "टोनी और अल्बा का पिज़्ज़ा और पास्ता", "पता": "619 Escuela Ave, पर्वत" देखें, CA "," lat ": 37.394012451172," lng ": - 122.09552764893," दूरी ": 16078.563225154}, {" id ": 6," name ":" Oregano's Wood-Fired Pizza "," पता ":" 4546 " एल कैमिनो रियल, लॉस अल्टोस, सीए "," लेट ": 37.401725769043," एलएनजी ": - 122.11464691162," दूरी ": 16077.937560795}, {" आईडी ": 7," नाम ":" बार और ग्रिल्स "," पता ":" 24 व्हाइटली स्ट्रीट, मैनचेस्टर "," लैट ": 53.485118865967," lng ": - 2.1828699111938," दूरी ": 8038.7620112314}]
मैं केवल 20 मील के साथ पंक्तियों को पुनः प्राप्त करना चाहता हूं लेकिन यह सभी पंक्तियों को लाता है। कृपया मैं क्या गलत कर रहा हूँ
मैं एक समान क्वेरी की तलाश कर रहा हूं, लेकिन थोड़ा आगे बढ़ गया हूं - संक्षेप में यह प्रत्येक निर्देशांक के 2 मील के भीतर सभी निर्देशांक को समूहित करना है और फिर गिनना है कि प्रत्येक समूह में कितने निर्देशांक हैं और केवल एक समूह को आउटपुट करता है जिसमें सबसे अधिक निर्देशांक हैं - भले ही अगर आपके पास उन समूहों में से एक से अधिक समूह हैं जिनके निर्देशांक की संख्या सबसे अधिक है - बस यादृच्छिक समूह को समान सबसे बड़ी संख्या वाले समूहों से आउटपुट करें -
साझा करने के लिए बहुत - बहुत धन्यवाद।