CRM እና የውሂብ መድረኮችትንታኔዎች እና ሙከራግብይት መሣሪያዎች

የ Haversine ፎርሙላ (PHP፣ JavaScript፣ Java፣ Python፣ MySQL፣ MSSQL ምሳሌዎች) በመጠቀም በኬክሮስ እና ኬንትሮስ መካከል ያለውን ታላቅ የክበብ ርቀት አስላ ወይም ጠይቅ

ጂአይስን በተመለከተ በዚህ ወር በ PHP እና በ MySQL ውስጥ በጣም ትንሽ ፕሮግራም አቀርባለሁ ፡፡ በተጣራ መረብ ዙሪያ ማንሸራተት በእውነቱ የተወሰኑትን ለማግኘት በጣም ተቸገርኩ ጂኦግራፊያዊ ስሌቶች በሁለት አካባቢዎች መካከል ያለውን ርቀት ለመፈለግ እዚህ ለማጋራት ፈለኩ ፡፡

የበረራ ካርታ አውሮፓ በታላቅ የክበብ ርቀት

በሁለት ነጥቦች መካከል ያለውን ርቀት ለማስላት ቀላሉ መንገድ የሦስት ማዕዘንን መላምት (A² + B² = C the) ለማስላት የፓይታጎሪያን ቀመር በመጠቀም ነው ፡፡ ይህ በመባል ይታወቃል የዩክሊዳን ርቀት.

ይህ አስደሳች ጅምር ቢሆንም በኬክሮስ እና ኬንትሮስ መስመሮች መካከል ያለው ርቀት ስለሆነ ከጂኦግራፊ ጋር አይሠራም እኩል ርቀት አይደለም ለየብቻ ፡፡ ወደ ወገብ ወገብ ሲጠጉ ፣ የኬክሮስ መስመሮች የበለጠ ይራወጣሉ ፡፡ አንድ ዓይነት ቀለል ያለ የሶስትዮሽ እኩልታ ቀመርን የሚጠቀሙ ከሆነ የምድርን ጠማማነት በመለየት በአንድ ቦታ በትክክል ርቀትን ሊለካ በሌላኛው ደግሞ በጣም የተሳሳተ ሊሆን ይችላል።

ታላቁ የክበብ ርቀት

በምድር ዙሪያ ረጅም ርቀት የሚጓዙባቸው መንገዶች በመባል ይታወቃሉ ታላቁ የክበብ ርቀት. ያም ማለት… በአንድ ሉል ላይ በሁለት ነጥቦች መካከል ያለው አጭር ርቀት በጠፍጣፋ ካርታ ላይ ካሉት ነጥቦች የተለየ ነው። የኬክሮስ እና ኬንትሮስ መስመሮች እኩል አለመሆኑ እውነታ ጋር ያዋህዱት… እና አስቸጋሪ ስሌት አለዎት።

ታላላቅ ክበቦች እንዴት እንደሚሠሩ አስደናቂ የቪዲዮ ማብራሪያ ይኸውልዎት።

ሀቨርሲን ፎርሙላ

የምድርን ኩርባ በመጠቀም ያለው ርቀት በ ውስጥ ተካቷል ሀቨርሲን ቀመር, የምድርን ጠመዝማዛ ለማስቻል ትሪጎኖሜትሪን ይጠቀማል ፡፡ በምድር ላይ ባሉ 2 ቦታዎች መካከል (ቁራ ሲበር) መካከል ያለውን ርቀት ሲያገኙ ቀጥተኛ መስመር በእውነቱ ቅስት ነው ፡፡

ይህ በአየር በረራ ውስጥ ተፈጻሚ ነው - መቼም ትክክለኛውን የበረራዎች ካርታ ተመልክተው እንዳረጁ አስተውለሃል? ይህ የሆነበት ምክንያት በቀጥታ ወደ ቦታው ሳይሆን በሁለት ነጥቦች መካከል ባለው ቅስት ውስጥ መብረር አጭር ስለሆነ ነው ፡፡

ፒኤችፒ-በ 2 ኬክሮስ እና ኬንትሮስ መካከል ያለውን ርቀት አስላ

በሁለት አስርዮሽ ቦታዎች (ከሚል vs. ኪሎሜትር ልወጣ ጋር) በሁለት ነጥቦች መካከል ያለውን ርቀት ለማስላት የ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)); 
}

ተለዋዋጮቹ፡-

  • $Latitude1 - ለመጀመሪያው መገኛዎ ኬክሮስ ተለዋዋጭ።
  • $Longitude1 - ለመጀመሪያው አካባቢዎ ኬንትሮስ ተለዋዋጭ
  • $Latitude2 - ለሁለተኛው አካባቢዎ ኬክሮስ ተለዋዋጭ።
  • $Longitude2 - ለሁለተኛው አካባቢዎ ኬንትሮስ ተለዋዋጭ።
  • $ ክፍል - ነባሪው ማንነት ማይሎች. ይህ እንደ ሊዘመን ወይም ሊታለፍ ይችላል። ኪ.ሜ..

ጃቫ፡ በ 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 - ለመጀመሪያው መገኛዎ ኬክሮስ ተለዋዋጭ።
  • ኬንትሮስ1 - ለመጀመሪያው አካባቢዎ ኬንትሮስ ተለዋዋጭ
  • ኬክሮስ 2 - ለሁለተኛው አካባቢዎ ኬክሮስ ተለዋዋጭ።
  • ኬንትሮስ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 - ለመጀመሪያው መገኛዎ ኬክሮስ ተለዋዋጭ።
  • ኬንትሮስ1 - ለመጀመሪያው አካባቢዎ ኬንትሮስ ተለዋዋጭ
  • ኬክሮስ 2 - ለሁለተኛው አካባቢዎ ኬክሮስ ተለዋዋጭ።
  • ኬንትሮስ2 - ለሁለተኛው አካባቢዎ ኬንትሮስ ተለዋዋጭ።
  • መለኪያ - ነባሪው ማንነት ማይሎች. ይህ እንደ ሊዘመን ወይም ሊታለፍ ይችላል። ኪ.ሜ..

Python፡ በ 2 የኬክሮስ እና ኬንትሮስ ነጥቦች መካከል ያለውን ርቀት አስላ

ለማንኛውም፣ በሁለት አስርዮሽ ቦታዎች (ከሚል vs. ኪሎሜትር ልወጣ ጋር) በሁለት ነጥቦች መካከል ያለውን ርቀት ለማስላት የፓይዘን ቀመር እዚህ አለ። የዳታ ሳይንቲስት ለሆነው ልጄ ቢል ካርር ምስጋና ይድረሰው ግንዛቤዎችን ይክፈቱ, ለኮዱ.

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 - ለመጀመሪያው ቦታዎ ተለዋዋጭ ኬክሮስ.
  • ኬንትሮስ1 - ለመጀመሪያው ቦታዎ ተለዋዋጭ ኬንትሮስ
  • ኬክሮስ 2 - ለሁለተኛ ቦታዎ ተለዋዋጭ ኬክሮስ.
  • ኬንትሮስ2 - ለሁለተኛ ቦታዎ ተለዋዋጭ ኬንትሮስ.
  • መለኪያ - ነባሪው ማንነት ማይሎች. ይህ እንደ ሊዘመን ወይም ሊታለፍ ይችላል። ኪ.ሜ..

MySQL፡ ኬክሮስ እና ኬንትሮስን በመጠቀም ማይልስ ያለውን ርቀት በማስላት ሁሉንም መዝገቦች በክልል ውስጥ ሰርስሮ ማውጣት

በተወሰነ ርቀት ውስጥ ያሉትን ሁሉንም መዝገቦች ለማግኘት ስሌት ለማድረግ SQL ን መጠቀምም ይቻላል ፡፡ በዚህ ምሳሌ ውስጥ የእኔ አካባቢ በ $ ኬክሮስ እና $ ኬንትሮስ ከቦታዬ ተለዋጭ $ ርቀት (ማይሎች ውስጥ) ያነሱ ወይም እኩል የሆኑ መዝገቦችን ሁሉ ለማግኘት በ MySQL ውስጥ ‹MyTable› ን እጠይቃለሁ ፡፡

በአንድ የተወሰነ መዝገብ ውስጥ ያሉትን መዝገቦች በሙሉ የማግኘት ጥያቄ ርቀት በሁለት ኬክሮስ እና ኬንትሮስ መካከል ባሉት ማይሎች መካከል ያለውን ርቀት በማስላት

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`)*pi()/180)))) * 180/pi()) * 60 * 1.1515) as distance FROM `table` WHERE distance <= ".$distance."

ይህንን ማበጀት ያስፈልግዎታል

  • $ ኬንትሮስ - ይህ የነጥቡን ኬንትሮስ የማልፍበት PHP ተለዋዋጭ ነው ፡፡
  • $ ኬክሮስ - ይህ የነጥቡን ኬንትሮስ የማልፍበት PHP ተለዋዋጭ ነው ፡፡
  • $ ርቀት - ይህ ሁሉንም መዝገቦች ያነሰ ወይም እኩል እንዲያገኙ የሚፈልጉት ይህ ርቀት ነው።
  • ጠረጴዛ - ይህ ጠረጴዛው ነው that ያንን በጠረጴዛዎ ስም ለመተካት ይፈልጋሉ ፡፡
  • ኬክሮስ - ይህ የእርስዎ ኬክሮስ መስክ ነው ፡፡
  • ኬንትሮስ - ይህ የእርስዎ የኬንትሮስ መስክ ነው ፡፡

MySQL፡ በኬንትሮስ እና ኬንትሮስ በመጠቀም በኪሎሜትር ያለውን ርቀት በማስላት ሁሉንም መዝገቦች በክልል ውስጥ ሰርስሮ ማውጣት

እና በ MySQL ውስጥ ኪሎሜትሮችን በመጠቀም የ SQL ጥያቄ ይኸውልዎት-

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`) * pi()/180)))) * 180/pi()) * 60 * 1.1515 * 1.609344) as distance FROM `table` WHERE distance <= ".$distance."

ይህንን ማበጀት ያስፈልግዎታል

  • $ ኬንትሮስ - ይህ የነጥቡን ኬንትሮስ የማልፍበት PHP ተለዋዋጭ ነው ፡፡
  • $ ኬክሮስ - ይህ የነጥቡን ኬንትሮስ የማልፍበት PHP ተለዋዋጭ ነው ፡፡
  • $ ርቀት - ይህ ሁሉንም መዝገቦች ያነሰ ወይም እኩል እንዲያገኙ የሚፈልጉት ይህ ርቀት ነው።
  • ጠረጴዛ - ይህ ጠረጴዛው ነው that ያንን በጠረጴዛዎ ስም ለመተካት ይፈልጋሉ ፡፡
  • ኬክሮስ - ይህ የእርስዎ ኬክሮስ መስክ ነው ፡፡
  • ኬንትሮስ - ይህ የእርስዎ የኬንትሮስ መስክ ነው ፡፡

ይህንን ኮድ በሰሜን አሜሪካ በኩል ከ 1,000 በላይ ለሆኑ የችርቻሮ ሱቆች በተጠቀምንበት የድርጅት ካርታ መድረክ ውስጥ ተጠቀምኩበት እና በጥሩ ሁኔታ ሰርቷል ፡፡

የማይክሮሶፍት SQL አገልጋይ ጂኦግራፊያዊ ርቀት፡ STDistance

የማይክሮሶፍት 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);  

ኮፍያ ጠቃሚ ምክር ለማናሽ ሳሆ፣ VP እና አርክቴክት Highbridge.

Douglas Karr

Douglas Karr መሥራች ነው Martech Zone እና በዲጂታል ትራንስፎርሜሽን ላይ እውቅና ያለው ባለሙያ. ዳግላስ በርካታ የተሳካ የማርቴክ ጅምሮች እንዲጀምር ረድቷል፣ በማርቴክ ግዥዎች እና ኢንቨስትመንቶች ከ5 ቢሊዮን ዶላር በላይ ያለውን ተገቢውን ትጋት በማገዝ የራሱን መድረኮች እና አገልግሎቶችን መጀመሩን ቀጥሏል። አብሮ መስራች ነው። Highbridge, የዲጂታል ትራንስፎርሜሽን አማካሪ ድርጅት. ዳግላስ የዱሚ መመሪያ እና የንግድ ሥራ አመራር መጽሐፍ የታተመ ደራሲ ነው።

78 አስተያየቶች

  1. ስላካፈልከን በጣም አመሰግናለሁ። ይህ ቀላል የኮፒ እና የመለጠፍ ስራ ነበር እና በጣም ጥሩ ይሰራል። ብዙ ጊዜ አድነኸኛል።
    ወደ ሲ ወደሚያልፈው ማንኛውም ሰው FYI
    ድርብ ድጋድራድ (ድርብ ድግሪ) {return deg * (2 / 3.14159265358979323846); }

  2. በጣም ጥሩ የመለጠፍ ቁራጭ - በጣም ጥሩ ሰርቷል - ላቲ-ረዥም የያዘውን የጠረጴዛ ስም ብቻ መለወጥ ነበረብኝ። እሱ በፍጥነት በፍጥነት ይሠራል .. በተመጣጣኝ ሁኔታ አነስተኛ ቁጥር ያላቸው የ lat-longs (<400) አለኝ ግን ይህ በጥሩ ሁኔታ ይመዝናል ብዬ አስባለሁ። ጥሩ ጣቢያም - አሁን በ del.icio.us መለያዬ ላይ አክዬዋለሁ እና በመደበኛነት ተመል back እመለከታለሁ ፡፡

  3. ቀኑን ሙሉ የርቀት ስሌቶችን ፈልጌ ፈልጌ አግኝቼዋለሁ ፣ እናም በካሬ ስኩዌር መግለጫ ውስጥ እንዴት እንደሚቀመጥ ምሳሌ በመስጠት ለሰጠኝ አመሰግናለሁ ፡፡ ዳንኤል አመሰግናለሁ እና ሰላምታ ይገባል

    1. ለማገዝ ደስ ብሎኛል ፣ የባቡር ሐዲዶች!

      አሁን በቅደም ተከተል ኬክሮስ እና ኬንትሮስ መጋጠሚያዎች ብዛት የሚወስድ እና በፖሊጎን ውስጥ ወይም ውጭ ሌላ ነጥብ ካለ ለመለየት የሚያስችለኝን ‹በ‹ ፖሊጎን ›ፒኤችፒ ተግባር ፍለጋ ላይ ነኝ ፡፡

  4. የእርስዎ SQL መረጃ ያለው መግለጫ ይፈልጋል ብዬ አስባለሁ።
    ይልቅ WHERE ርቀት <= $ ርቀት ሊፈልጉት ይችላሉ
    HAVING ርቀት ይጠቀሙ <= $ ርቀት

    አለበለዚያ ብዙ ጊዜ እና ጉልበት ስለቆጠበኝ አመሰግናለሁ ፡፡

  5. ከላይ ያለው ቀመር ብዙ ጊዜ እየቆጠበኝ ነው። በጣም አመሰግናለሁ.
    እንዲሁም በNMEA ቅርጸት እና በዲግሪዎች መካከል መቀያየር አለብኝ። በዚህ URL ከገጹ ግርጌ ላይ ቀመር አግኝቻለሁ። http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html

    ይህንን እንዴት ማረጋገጥ እንደሚቻል ማንም ያውቃል?

    አመሰግናለሁ!
    ሃሪ

  6. እኔ ደግሞ WHERE ለእኔ አይሰራም ነበር. ወደ HAVING ቀይሮታል እና ሁሉም ነገር በትክክል ይሰራል። መጀመሪያ ላይ አስተያየቶቹን አላነበብኩም እና ጎጆ ምረጥን በመጠቀም እንደገና ጻፍኩት። ሁለቱም በትክክል ይሰራሉ.

  7. በማይታመን ሁኔታ አጋዥ ፣ በጣም አመሰግናለሁ! ከ “WHERE” ይልቅ በአዲሱ “HAVING” ላይ አንዳንድ ችግሮች አጋጥመውኝ ነበር ፣ ግን አንድ ጊዜ አስተያየቶችን እዚህ ላይ ካነበብኩ (በብስጭት ጥርሶቼን ከፈጨኝ ግማሽ ሰዓት ያህል በኋላ = P) በጥሩ ሁኔታ እየሠራሁ አገኘሁት ፡፡ አመሰግናለሁ ^ _ ^

  8. እንደዚያ የመረጥ መግለጫ በጣም ስሌት በጣም ከባድ እና ስለዚህ ዘገምተኛ እንደሚሆን ያስታውሱ። ብዙ እነዚያ መጠይቆች ካሉዎት ነገሮችን በፍጥነት በፍጥነት ሊያወዛውዝ ይችላል።

    በጣም ያነሰ ጠንከር ያለ አቀራረብ በ SQUARE አካባቢ በተሰላ ርቀት የተገለፀውን የመጀመሪያ (ጥሬ) ምረጥ ማለትም "በ lat1 እና lat2 መካከል ባለው ኬክሮስ እና በሎን1 እና በሎን2 መካከል ካለው የሠንጠረዥ ስም * ምረጥ"። lat1 = targetlatitude – latdiff, lat2 = targetlatitude + latdiff፣ከሎን ጋር ተመሳሳይ ነው። latdiff ~= ርቀት / 111 (ለኪሜ) ፣ ወይም ርቀት/69 ለማይል ከ 1 ዲግሪ ኬክሮስ ~ 111 ኪሜ (ትንሽ ልዩነት ምድር ትንሽ ሞላላ ስለሆነች ፣ ግን ለዚህ ዓላማ በቂ ነው)። londiff = ርቀት / (abs(cos(deg2rad(latitude)))*111)) - ወይም 69 ማይሎች (ለተለዋዋጭነት መለያ ትንሽ ትልቅ ካሬ መውሰድ ትችላለህ)። ከዚያ የዚያን ውጤት ውሰዱ እና ወደ ራዲያል ምረጥ ይመግቡት. ልክ ከወሰን ውጭ መጋጠሚያዎችን መለያ ማድረግን አይርሱ - ማለትም ተቀባይነት ያለው የኬንትሮስ ክልል ከ -180 እስከ +180 እና ተቀባይነት ያለው የኬክሮስ ክልል -90 እስከ +90 - የእርስዎ ላትዲፍ ወይም ሎንዲፍ ከዚህ ክልል ውጭ የሚሮጥ ከሆነ . በአብዛኛዎቹ ሁኔታዎች ይህ በፓስፊክ ውቅያኖስ በኩል ባለው መስመር ላይ ከዋልታ እስከ ምሰሶ ድረስ ባለው መስመር ላይ ያለውን ስሌት ብቻ ስለሚነካ ተግባራዊ ላይሆን እንደሚችል ልብ ይበሉ፣ ምንም እንኳን የቹኮትካ እና የአላስካን ክፍል የሚያቋርጥ ቢሆንም።

    በዚህ የምንፈጽመው ይህንን ስሌት በሚያደርጉበት የነጥብ ብዛት ላይ ከፍተኛ ቅነሳ ነው ፡፡ በግምት በእኩል በተሰራጨው የመረጃ ቋት ውስጥ አንድ ሚሊዮን ዓለም አቀፍ ነጥቦች ካሉዎት እና በ 100 ኪ.ሜ ውስጥ መፈለግ ከፈለጉ የመጀመሪያዎ (ፈጣን) ፍለጋዎ 10000 ስኩዌር ኪ.ሜ አካባቢ ነው ምናልባትም ወደ 20 የሚጠጉ ውጤቶችን ያስገኛል 500 ሜ.ሜ ስኩዌር ኪ.ሜ አካባቢ) ፣ ይህ ማለት ከአንድ ሚሊዮን ጊዜ ይልቅ ለዚህ ጥያቄ ውስብስብ የሆነውን የርቀት ስሌት 20 ጊዜ ያካሂዳሉ ማለት ነው ፡፡

      1. ድንቅ ምክር! እኔ በእውነቱ የውስጡን ካሬ የሚጎትት ተግባር ከፃፈ ገንቢ ጋር ሰራሁ እና በመቀጠል የተቀሩትን ነጥቦች ለማካተት እና ለማግለል በፔሪሜትር ዙሪያ 'ካሬዎች' የሚያደርግ ተግባር ከፃፈ። ውጤቱ በሚያስደንቅ ሁኔታ ፈጣን ውጤት ነበር - በሚሊዮኖች የሚቆጠሩ ነጥቦችን በማይክሮ ሰከንድ ውስጥ መገምገም ይችላል።

        የእኔ አካሄድ በእርግጠኝነት 'ድፍረት' ግን አቅም ያለው ነው። እንደገና አመሰግናለሁ!

        1. ዳግ ፣

          የላቲ ረጅም ነጥብ በፖሊጎን ውስጥ እንዳለ ለመገምገም mysql እና php ን ለመጠቀም እየሞከርኩ ነበር። ይህን ተግባር እንዴት ማከናወን እንደሚቻል የገንቢ ጓደኛዎ ማንኛውንም ምሳሌዎችን እንዳተመ ታውቃለህ። ወይም ጥሩ ምሳሌዎችን ታውቃለህ. በቅድሚያ አመሰግናለሁ.

  9. ታዲያስ ሁላችሁም ይህ የእኔ የሙከራ SQL መግለጫ ነው-

    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

    እና ሚስቅል ርቀቱን ፣ እንደ አምድ እንደሌለ እየነገረኝ ነው ፣ ቅደም ተከተልን መጠቀም እችላለሁ ፣ ያለ የትም ማድረግ እችላለሁ ፣ እና እሱ ይሠራል ፣ ግን ከእሱ ጋር አይደለም…

  10. ይህ በጣም ጥሩ ነው ፣ ሆኖም ወፎቹ እንደሚበሩ ሁሉ ፡፡ የ google ካርታዎችን ኤ.ፒ.አይ.ን በሆነ መንገድ በዚህ መንገድ መሞከር እና ማካተት በጣም ጥሩ ነው (ምናልባት መንገዶችን በመጠቀም ወዘተ) የተለየ የመጓጓዣ ዘዴ በመጠቀም ሀሳብ ለመስጠት ብቻ ፡፡ ለተጓዥው ሻጭ ችግር ቀልጣፋ መፍትሄ ለመስጠት የሚያስችለኝን በ PHP ውስጥ የማስመሰል የማጣሪያ ተግባር ገና አላደርግም ፡፡ ግን ይህን ለማድረግ አንዳንድ ኮዶችዎን እንደገና ለመጠቀም እችል ይሆናል ብዬ አስባለሁ ፡፡

  11. ጥሩ መጣጥፍ! በሁለት ነጥቦች መካከል ያለውን ርቀት እንዴት ማስላት እንደሚቻል የሚገልጹ ብዙ መጣጥፎችን አግኝቻለሁ ግን የ SQL ቅንጥጥን በእውነት እፈልግ ነበር ፡፡

  12. ችግሬን የሚፈታ ይህንን ገጽ በመጨረሻ ለማግኘት የ 2 ቀናት ምርምር። የእኔን የዎልፍራም አልፋዬን አጥፍቼ በሂሳብዎ ላይ ብራሹን የተሻልኩ ይመስላል። ከ WHERE ወደ HAVING የተደረገው ለውጥ በስርዓት ውስጥ የእኔ ስክሪፕት አለው። አመሰግናለሁ

  13. ይህ በዚህ ላይ ያገኘሁት የመጀመሪያ ገጽ ቢሆን ተመኘሁ ፡፡ ብዙ የተለያዩ ትዕዛዞችን ከሞከርኩ በኋላ በትክክል የሚሠራው ይህ ብቻ ነበር ፣ እና ከራሴ የውሂብ ጎታ (ዳታቤዝ) ጋር ለማስማማት በሚያስፈልጉ አነስተኛ ለውጦች ፡፡
    በጣም አመሰግናለሁ!

  14. ይህ በዚህ ላይ ያገኘሁት የመጀመሪያ ገጽ ቢሆን ተመኘሁ ፡፡ ብዙ የተለያዩ ትዕዛዞችን ከሞከርኩ በኋላ በትክክል የሚሠራው ይህ ብቻ ነበር ፣ እና ከራሴ የውሂብ ጎታ (ዳታቤዝ) ጋር ለማስማማት በሚያስፈልጉ አነስተኛ ለውጦች ፡፡
    በጣም አመሰግናለሁ!

  15. ይህንን ጠቃሚ ጽሑፍ ስለለጠፉ አመሰግናለሁ ፣  
    ግን በሆነ ምክንያት መጠየቅ እፈልጋለሁ
    በ MySQL DB እና በተጠቃሚዎች ወደ ፒኤችፒ በተገቡት ቅንጅቶች መካከል ያለውን ርቀት እንዴት ማግኘት ይቻላል?
    የበለጠ በግልጽ ለመግለጽ
    1. user የተገለጸውን ውሂብ ከ db እና ከተጠቃሚው ራሱ ኮዶች ለመምረጥ [id] ን ማስገባት አለባቸው
    2.የ php ፋይል [id] ን በመጠቀም ዒላማውን ውሂብ (ኮርፖሬሽኖችን) ያግኙ እና ከዚያ በተጠቃሚ እና በዒላማው ነጥብ መካከል ያለውን ርቀት ያሰሉ

    ወይም በቀላሉ ከዚህ በታች ካለው ኮድ ርቀትን ማግኘት ይችላል?

    $ qry = "SELECT *, ((acos (sin ((.. $ latitude. * * pi () / 180)) * * sin ((" Latitude` * pi () / 180)) + cos ((". $ ኬክሮስ። ”* pi () / 180)) * cos ((“ Latitude` * pi () / 180)) * cos (((“. $ longitude.” - “Longitude`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) እንደ ርቀት ከ “MyTable` WHERE ርቀት> =“. $ ርቀት. ” >>>> ከዚህ ያለውን ርቀት “ማውጣት” እችላለሁን?
    እንደገና አመሰግናለሁ,
    ቲሚ ኤስ

  16. እሺ ፣ እኔ የሞከርኩት ሁሉ እየሰራ አይደለም ፡፡ እኔ የምለው ፣ ያለኝ ይሠራል ፣ ግን ርቀቶቹ ርቀዋል ፡፡

    ማንም ሰው በዚህ ኮድ ውስጥ ምን ችግር እንዳለ ማየት ይችላል?

    ከሆነ (መነሻ ($ _ POST ['ገብቷል'])) {$ z = $ _POST ['zipcode']]; $ r = $ _POST ['ራዲየስ']; አስተጋባ "ውጤቶች ለ". $ z; $ sql = mysql_query (“Select DISTINCT m.zipcode, m.MktName, m.LAAddSt, 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 (truncate (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 ()); ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ ረድፍ ['MktName']]። ""; $ store = $ ረድፍ ['LocAddSt']። ”” $ store. = $ ረድፍ ['LocAddCity']። ”፣“. $. ረድፍ ['ዚፕ ኮድ']; $ latitude1 = $ ረድፍ ['lat']; $ longitude1 = $ ረድፍ ['lon']; $ latitude2 = $ ረድፍ ['y1']; $ ኬንትሮስ 2 = $ ረድፍ ['x1']; $ ከተማ = $ ረድፍ ['ከተማ']; $ state = $ ረድፍ ['state']; $ dis = getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi'); // $ dis = ርቀት ($ lat1, $ lon1, $ lat2, $ lon2); $ ተረጋግጧል = $ ረድፍ ['ተረጋግጧል']; ከሆነ ($ ተረጋግጧል == '1') {አስተጋባ “”; አስተጋባ "". $ ማከማቻ. ""; አስተጋባ $ dis. ”ማይል (ሮች) ሩቅ”; አስተጋባ “”; } ሌላ {አስተጋባ “”። $ ማከማቻ። ””; አስተጋባ $ dis. ”ማይል (ሮች) ሩቅ”; አስተጋባ “”; }}}

    የእኔ ተግባራት. php ኮድ
    ተግባር getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi') {$ theta = $ longitude1 - $ longitude2; $ ርቀት = (ኃጢአት (deg2rad ($ latitude1)) * sin (deg2rad ($ latitude2))) + (cos (deg2rad ($ latitude1)) * cos (deg2rad ($ latitude2)) * cos (deg2rad ($ theta)) ) $ ርቀት = acos ($ ርቀት); $ ርቀት = rad2deg ($ ርቀት); $ ርቀት = $ ርቀት * 60 * 1.1515; ማብሪያ ($ unit) {case 'Mi': break; ጉዳይ 'ኪም': $ ርቀት = $ ርቀት * 1.609344; } መመለስ (ክብ ($ ርቀት ፣ 2)); }

    የቀደመ ምስጋና

  17. ሄይ ዳግላስ ፣ ግሩም መጣጥፍ። ስለ ጂኦግራፊያዊ ፅንሰ-ሀሳቦች እና ስለ ኮዱ የሰጡት ማብራሪያ በእውነቱ አስደሳች ሆኖ አግኝቼዋለሁ ፡፡ የእኔ ብቸኛ አስተያየት ጥቆማውን ለማሳየት እና ለማሳየት (ለምሳሌ እንደ እስክራቫልቭ ፍሰት) ኮዱን ማስገባት ነው ፡፡ ቦታን መቆጠብ እንደሚፈልጉ ተረድቻለሁ ፣ ነገር ግን የተለመዱ የኮድ ክፍተቶች / ኢንዴንሽን እንደ አንድ ፕሮግራም አውጪ ለማንበብ እና ለመበታተን ለእኔ በጣም ቀላል ይሆንልኛል ፡፡ የሆነ ሆኖ ያ ትንሽ ነገር ነው ፡፡ ታላቁን ስራዎን ይቀጥሉ ፡፡

  18. በምርጫው ውስጥ የትኛውን ቀመር ሁለት ጊዜ ለመጠቀም ፈጣኑ (mysql 5.9) ይመስላል-
    $ ቀመር = “(((acos (sin ((.. $ latitude.” * pi () / 180)) * * sin ((“Latitude` * pi () / 180)) + + cos ((“. $ latitude. ”* Pi () / 180)) * cos ((“ Latitude` * pi () / 180)) * cos (((“. $ Longitude.” - “Longitude`) * pi () / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) ”;
    $ sql = 'SELECT *,'. $ ቀመር። ' እንደ ርቀት ከሠንጠረዥ የት '.. $ ቀመር።' <= '. $ ርቀት;

  19. ይህ ጽሑፍ በጣም ጥሩ ጠቃሚ ነው ፡፡
    ፒኤችፒ መጀመሪያ ላይ እንደ “የግል መነሻ ገጽ” ተብሎ እንደ ቀላል የስክሪፕት መድረክ ተፈጥሯል። በአሁኑ ጊዜ PHP (ለ Hypertext ቅድመ-ፕሮሰሰር አጠር ያለው) የማይክሮሶፍት ንቁ የአገልጋይ ገጾች (ኤስፒ) ቴክኖሎጂ አማራጭ ነው ፡፡

    ፒኤችፒ ተለዋዋጭ የድር ገጾችን ለመፍጠር የሚያገለግል ክፍት ምንጭ አገልጋይ-ጎን ቋንቋ ነው። ወደ ኤችቲኤምኤል ሊገባ ይችላል። ፒኤችፒ አብዛኛውን ጊዜ በሊነክስ / UNIX ድር አገልጋዮች ላይ ከ ‹MySQL› ዳታቤዝ ጋር አብሮ ጥቅም ላይ ይውላል ፡፡ ምናልባት በጣም የታወቀው የስክሪፕት ቋንቋ ነው።

  20. በትክክል የማይሰራ ከላይ መፍትሄ አገኘሁ ፡፡
    መለወጥ አለብኝ ወደ

    $ qqq = "SELECT *, ((acos (sin ((.. $ latitude. * * pi () / 180)) * * sin ((" latt` * pi () / 180)) + cos ((") $ ኬክሮስ. “* pi () / 180)) * cos ((“ latt` * pi () / 180)) * cos (((”. $ ኬንትሮስ.“ - “longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) እንደ ርቀት ከ “ምዝገባ” “;

  21. ጤና ይስጥልኝ ፣ እባክዎን በዚህ ላይ በእርግጥ እገዛዎን እፈልጋለሁ ፡፡

    ለድር አገልጋዬ የማግኘት ጥያቄ አቀረብኩ http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $ ኬክሮስ
    -2.23389 = $ ኬንትሮስ
    እና 20 = ሰርስሮ ማውጣት እፈልጋለሁ

    ሆኖም ቀመርን በመጠቀምዎ በ db ውስጥ ያሉትን ሁሉንም ረድፎች ይሰበስባል

    $ results = DB :: ይምረጡ (DB :: ጥሬ (“SELECT *, ((acos (sin (). $ latitude.” * pi () / 180))) * sin ((lat * pi () / 180) )) + cos ((“. $ latitude.” * pi () / 180)) * cos ((lat * pi () / 180)) * cos (((“. $ longitude.” - lng) * pi ( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) ከጠቋሚዎች እንደ ርቀት ርቀት> = ". $ ርቀት));

    [{"Id": 1, "ስም": "Frankie Johnnie & Luigo Too", "address": "939 W El Camino Real, Mountain View, CA", "lat": 37.386337280273, "lng": - 122.08582305908, ”ርቀት”: 16079.294719663}, {“id”: 2, ”name”: “Amici’s East Coast Pizzeria”, “address”: “790 Castro St, Mountain View, CA”, “lat”: 37.387138366699, ”lng”: -122.08323669434 ፣ “ርቀት”: 16079.175940152} ፣ ““ id ”: 3,” name ”:“ የካፕ ፒዛ አሞሌ እና ግሪል ”፣“ አድራሻ ”“ 191 ካስትሮ እስ ፣ ማውንት ቪው ፣ ካ ”፣“ ላ ”37.393886566162 ”Lng”: - 122.07891845703 ፣ ”ርቀት”: 16078.381373826}, {“id”: 4, ”name”: “Round Table Piza: Mountain View”, “address”: “570 N Shoreline Blvd, Mountain View, CA”, ”Lat”: 37.402652740479, “lng”: - 122.07935333252, ”ርቀት”: 16077.420540582}, {“id”: 5, ”name”: “Tony & Alba’s Pizza & Pasta”, ”address”: “619 Escuela Ave, Mountain እይታ ፣ CA ”፣“ lat ”: 37.394012451172 ፣“ lng ”: - 122.09552764893 ፣” ርቀት ”: 16078.563225154} ፣ {“ id ”: 6,” name ”:“ Oregano’s Wood-Fired Pizza ”,” address ”:“ 4546 ኤል ካሚኖ ሪል ፣ ሎስ አልቶስ ፣ ሲኤ ”፣“ ላት ”37.401725769043 ፣“ lng ”: - 122.11464691162 ፣” ርቀት ”: 16077.937560795} ፣ {“ id ”: 7,” name ”:“ ቡና ቤቶችና ጋሪዎቹ ”፣“ አድራሻ ”:“ 24 ኋይትሊ ጎዳና ፣ ማንቸስተር ”፣“ ላቲ ”53.485118865967 ፣” lng ”: - 2.1828699111938 ፣” ርቀት ”: 8038.7620112314}]

    ከ 20 ማይል ጋር ተራዎችን ብቻ ማውጣት እፈልጋለሁ ግን ሁሉንም ረድፎችን ያመጣል ፡፡ እባክዎን ምን እየሠራሁ ነው

  22. እኔ ተመሳሳይ ጥያቄ እየፈለግሁ ግን ትንሽ ከፍ አልኩ - በአጭሩ ይህ በእያንዳንዱ አስተባባሪ በ 2 ማይል ውስጥ ሁሉንም መጋጠሚያዎች መሰብሰብ እና ከዚያ በእያንዳንዱ ቡድን ውስጥ ምን ያህል መጋጠሚያዎችን መቁጠር እና ብዙ መጋጠሚያዎችን ያለው አንድ ቡድን ብቻ ​​ማውጣት ነው - በጣም ብዙ መጋጠሚያዎች ካሏቸው ቡድኖች መካከል ከአንድ በላይ ቡድን አለዎት - በቀላሉ ተመሳሳይ ቁጥር ካላቸው ቡድኖች የዘፈቀደ ቡድኑን ያውጡ -

ምን አሰብክ?

ይህ ጣቢያ አይፈለጌን ለመቀነስ Akismet ይጠቀማል. አስተያየትዎ እንዴት እንደሚሰራ ይወቁ.

ተዛማጅ ርዕሶች