Rechercher l'emplacement le plus proche de scripts

  • carlosrapa
  • Newbie
  • Newbie
  • No Avatar
  • Inscription: Jan 15, 2004
  • Messages: 11
  • Loc: Fairview Heights, IL. (St. Louis Area)
  • Status: Offline

Message Janvier 15th, 2004, 3:59 pm

Nous avons une société qui a un grand nombre de distributeurs à travers le pays...Je souhaite écrire un petit programme qui a un couple de domaines...

Il est généralement trouvé sur des sites comme Radioshack.com ou circuitcity. com....


Je veux que l'utilisateur d'être capable de taper une adresse dans une ville ou un état et d'indiquer la quantité maximale de miles qu'ils sont prêts à Voyage...et donner une liste des distributeurs les plus proches / magasins à leur...

Comment ces sites populaires le faire? Je me demande si l'un d'entre vous à Web-Dieux, il connaît la réponse...et peut aider à m'orienter dans la bonne direction pour créer un effet similaire pour notre entreprise site...

Juste curieux,
Merci à Bunch,
Carlos
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Janvier 15th, 2004, 3:59 pm

  • Axe
  • Genius
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Jan 07, 2004
  • Messages: 5744
  • Loc: Sub-level 28
  • Status: Offline

Message Janvier 15th, 2004, 4:20 pm

Vous savez, je cherchais quelque chose de similaire à ceci sur mon site...

Il existe de nombreux salons & expos reptile à travers les États-Unis au cours de l'année. Im actuellement de faire une base de données de tous les spectacles à venir, de sorte itd être utile pour mes sites membres pour être en mesure de saisir leur code postal et voir tous les spectacles dans les 100 miles »ou quoi que ce soit.
  • ATNO/TW
  • Super Moderator
  • Super Moderator
  • Avatar de l’utilisateur
  • Inscription: Mai 28, 2003
  • Messages: 23403
  • Loc: Woodbridge VA
  • Status: Offline

Message Janvier 15th, 2004, 5:17 pm

Vous pouvez pour Google: le code postal de base de données

Il semble y avoir certains des services d'abonnement à prix raisonnable qui devrait répondre à vos besoins.
"There's no place like 127.0.0.1 except for ::1."
Alexandria Networks. Leader in IT consulting for associations/non-profits, and small to medium sized businesses around the northern Virginia and Washington D.C. metro area.
  • Axe
  • Genius
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Jan 07, 2004
  • Messages: 5744
  • Loc: Sub-level 28
  • Status: Offline

Message Janvier 15th, 2004, 6:55 pm

Hey thanks ATNO / TW, j'ai réussi à en trouver un qui ressemble à un bon prix, à seulement 30 dollars pour le seul y compris la latitude et la longitude...

http://www.zipcodedownload.com/products.aspx?ID=DataUSA

Comme pour l'élaboration de la distance, Ive a trouvé un peu de scripts et les équations pour m'aider un chiffre, alors je n'ai pas besoin de dépenser 40 dollars sur la "Distance Assistant" maintenant, mais je pourrais me passer de la «distance & assistant rayon "ensemble à l'avenir.
  • Axe
  • Genius
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Jan 07, 2004
  • Messages: 5744
  • Loc: Sub-level 28
  • Status: Offline

Message Janvier 15th, 2004, 7:27 pm

Okies, on y va...

Si ce n'est pas essentiel que votre code postal liste demeure pointe, alors vous pouvez obtenir gratuitement la liste des codes postaux, ici ..

http://www.census.gov/geo/www/gazetteer/places.html

Thats the US Census Bureau, et de leur plus récente liste est libre de Y2K.

Ive viens de télécharger le fichier. Txt, dès que je le convertir à un format je peux facilement déséquilibrés dans une base de données MySQL, et d'obtenir un script PHP ou les deux ensemble, le mauvais pop it up here.
  • UNFLUX
  • Genius
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Déc 20, 2002
  • Messages: 6382
  • Loc: twitter.com/unflux
  • Status: Offline

Message Janvier 15th, 2004, 8:35 pm

déplacé par la demande...
UNFLUX.FOTO
  • Axe
  • Genius
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Jan 07, 2004
  • Messages: 5744
  • Loc: Sub-level 28
  • Status: Offline

Message Janvier 15th, 2004, 8:50 pm

/ / Merci de faire avancer ce sur le forum de codage unflux.

Ok, donc après quelques téléchargement, de déconner dans Excel, et codant pour un certain temps lil, I got a solution va...

Vous pouvez voir le script et exécute ici .

Il ya une fonction dans le script qui n'est pas à moi (et je l'ai étiquetées comme telles), et comme il a travaillé, je n'ai pas pris la peine de le retravailler recode ou du tout).

Ce n'est tout simplement comme une démonstration de la façon dont il peut être fait. Il n'ya aucune vérification d'erreur, donc il tomber si vous entrez autre chose que d'une paire de codes valides zip :)

Heres le code actuel pour le faire...(BWM, s'il vous plaît install [php], hein)

enregistrer en tant que distance.php (ou modifier la forme pour tenir compte de nouveau nom de fichier)

Code: [ Select ]
<?php

$dbhost = 'localhost';
$dbname = 'database_name';
$dbuname = 'account_name';
$dbupass = 'account_password';

$connection = mysql_connect("$dbhost","$dbuname","$dbupass")
    or die ("Couldn't connect to server.");
    
$db = mysql_select_db("$dbname", $connection)
    or die("Couldn't select database.");

// I did not write this function - I found it on the web somewhere.
function distance($lat1, $lon1, $lat2, $lon2, $unit) {

 $theta = $lon1 - $lon2;
 $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
 $dist = acos($dist);
 $dist = rad2deg($dist);
 $miles = $dist * 60 * 1.1515;
 $unit = strtolower($unit);

 if ($unit == "k") {
  return ($miles * 1.609344);
 } else if ($unit == "n") {
  return ($miles * 0.8684);
 } else {
  return $miles;
 }
}

function page_header() {
 return '<html>

<head>
<title>Distance Calculator</title>
<style>
<!--
input    { font-family: Verdana; font-size: 8pt; font-weight: bold }
td      { font-family: Verdana; font-size: 8pt; font-weight: bold }
-->
</style>
</head>

<body>
<center><table border="0" width="350" cellspacing="0" cellpadding="0">
<tr><td align="center"><u>Axe\'s Distance Calculator</u><br><br></td></tr>
<tr><td>';
}

function page_footer() {
 return '</td></tr></table></center></body></html>';
}

function diststuff($zipo, $zipd) {
 $origsql = 'select * from zipcodes where zip = "'.$zipo.'"';
 $origresult = mysql_query($origsql);
 $origdata = mysql_fetch_assoc($origresult);
 $destsql = 'select * from zipcodes where zip = "'.$zipd.'"';
 $destresult = mysql_query($destsql);
 $destdata = mysql_fetch_assoc($destresult);
 return '<table border="0" width="350" cellspacing="0" cellpadding="0">
 <tr>
  <td nowrap>Originating zip code :</td>
  <td align="right" nowrap>'.$origdata['zip'].', '.$origdata['state'].'</td>
 </tr>
 <tr>
  <td nowrap>Destination zip code :</td>
  <td align="right" nowrap>'.$destdata['zip'].', '.$destdata['state'].'</td>
 </tr>
 <tr>
  <td nowrap>Distance :</td>
  <td align="right" nowrap>'.number_format(distance($origdata['lat'], $origdata['long'], $destdata['lat'], $destdata['long'], "m"), 2).' Miles</td>
 </tr>
 <tr><td colspan="2"><hr></td></tr>
</table>';

}

function zipform() {
 return '<table border="0" width="350" cellspacing="0" cellpadding="0">
<form method="POST" action="distance.php">
 <tr>
  <td nowrap>Enter originating zip code :</td>
  <td align="right" nowrap><input type="text" name="origzip" size="20" value="'.$_POST['origzip'].'"></td>
 </tr>
 <tr>
  <td nowrap>Enter destination zip code :</td>
  <td align="right" nowrap><input type="text" name="destzip" size="20" value="'.$_POST['destzip'].'"></td>
 </tr>
 <tr>
  <td colspan="2" align="right" nowrap><input type="submit" value="Submit" name="B1">
   <input type="reset" value="Reset" name="B2"></td>
 </tr>
</form>
</table>';
}

echo page_header();
if ((!$origzip) || (!$destzip)) {
 echo zipform();
} else if (($origzip) && ($destzip)) {
 echo diststuff($_POST['origzip'], $_POST['destzip']);
 echo zipform();
}
echo page_footer();

?>
  1. <?php
  2. $dbhost = 'localhost';
  3. $dbname = 'database_name';
  4. $dbuname = 'account_name';
  5. $dbupass = 'account_password';
  6. $connection = mysql_connect("$dbhost","$dbuname","$dbupass")
  7.     or die ("Couldn't connect to server.");
  8.     
  9. $db = mysql_select_db("$dbname", $connection)
  10.     or die("Couldn't select database.");
  11. // I did not write this function - I found it on the web somewhere.
  12. function distance($lat1, $lon1, $lat2, $lon2, $unit) {
  13.  $theta = $lon1 - $lon2;
  14.  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  15.  $dist = acos($dist);
  16.  $dist = rad2deg($dist);
  17.  $miles = $dist * 60 * 1.1515;
  18.  $unit = strtolower($unit);
  19.  if ($unit == "k") {
  20.   return ($miles * 1.609344);
  21.  } else if ($unit == "n") {
  22.   return ($miles * 0.8684);
  23.  } else {
  24.   return $miles;
  25.  }
  26. }
  27. function page_header() {
  28.  return '<html>
  29. <head>
  30. <title>Distance Calculator</title>
  31. <style>
  32. <!--
  33. input    { font-family: Verdana; font-size: 8pt; font-weight: bold }
  34. td      { font-family: Verdana; font-size: 8pt; font-weight: bold }
  35. -->
  36. </style>
  37. </head>
  38. <body>
  39. <center><table border="0" width="350" cellspacing="0" cellpadding="0">
  40. <tr><td align="center"><u>Axe\'s Distance Calculator</u><br><br></td></tr>
  41. <tr><td>';
  42. }
  43. function page_footer() {
  44.  return '</td></tr></table></center></body></html>';
  45. }
  46. function diststuff($zipo, $zipd) {
  47.  $origsql = 'select * from zipcodes where zip = "'.$zipo.'"';
  48.  $origresult = mysql_query($origsql);
  49.  $origdata = mysql_fetch_assoc($origresult);
  50.  $destsql = 'select * from zipcodes where zip = "'.$zipd.'"';
  51.  $destresult = mysql_query($destsql);
  52.  $destdata = mysql_fetch_assoc($destresult);
  53.  return '<table border="0" width="350" cellspacing="0" cellpadding="0">
  54.  <tr>
  55.   <td nowrap>Originating zip code :</td>
  56.   <td align="right" nowrap>'.$origdata['zip'].', '.$origdata['state'].'</td>
  57.  </tr>
  58.  <tr>
  59.   <td nowrap>Destination zip code :</td>
  60.   <td align="right" nowrap>'.$destdata['zip'].', '.$destdata['state'].'</td>
  61.  </tr>
  62.  <tr>
  63.   <td nowrap>Distance :</td>
  64.   <td align="right" nowrap>'.number_format(distance($origdata['lat'], $origdata['long'], $destdata['lat'], $destdata['long'], "m"), 2).' Miles</td>
  65.  </tr>
  66.  <tr><td colspan="2"><hr></td></tr>
  67. </table>';
  68. }
  69. function zipform() {
  70.  return '<table border="0" width="350" cellspacing="0" cellpadding="0">
  71. <form method="POST" action="distance.php">
  72.  <tr>
  73.   <td nowrap>Enter originating zip code :</td>
  74.   <td align="right" nowrap><input type="text" name="origzip" size="20" value="'.$_POST['origzip'].'"></td>
  75.  </tr>
  76.  <tr>
  77.   <td nowrap>Enter destination zip code :</td>
  78.   <td align="right" nowrap><input type="text" name="destzip" size="20" value="'.$_POST['destzip'].'"></td>
  79.  </tr>
  80.  <tr>
  81.   <td colspan="2" align="right" nowrap><input type="submit" value="Submit" name="B1">
  82.    <input type="reset" value="Reset" name="B2"></td>
  83.  </tr>
  84. </form>
  85. </table>';
  86. }
  87. echo page_header();
  88. if ((!$origzip) || (!$destzip)) {
  89.  echo zipform();
  90. } else if (($origzip) && ($destzip)) {
  91.  echo diststuff($_POST['origzip'], $_POST['destzip']);
  92.  echo zipform();
  93. }
  94. echo page_footer();
  95. ?>


Ainsi, theres un bouquet de prettying inutile-up, heh. Mais je voulais que pour produire des sorties assez n neat tidy gif "alt =":)" title =" Smile "/>

Heres le code SQL pour créer la table de base de données (Yeah, généré par phpMyAdmin, hein)...

Code: [ Select ]
CREATE TABLE `zipcodes` (
 `state` char(2) NOT NULL default '',
 `zip` varchar(5) NOT NULL default '',
 `lat` varchar(15) NOT NULL default '',
 `long` varchar(15) NOT NULL default '',
 KEY `zip` (`zip`)
) TYPE=MyISAM;
  1. CREATE TABLE `zipcodes` (
  2.  `state` char(2) NOT NULL default '',
  3.  `zip` varchar(5) NOT NULL default '',
  4.  `lat` varchar(15) NOT NULL default '',
  5.  `long` varchar(15) NOT NULL default '',
  6.  KEY `zip` (`zip`)
  7. ) TYPE=MyISAM;


Et Voici toutes les données du code postal dans un fichier CSV que vous pouvez importer directement dans la base de données via phpMyAdmin, ou la ligne cmmand si vous savez comment .

Le CSV a été créé à partir des données ce fichier texte . Ce fichier contient également tout un tas de bits autres proprette de info (population, les maisons, les terres et les zones d'eau en mètres carrés & sq miles (au cas où vous souhaitez créer votre propre fichier CSV et tables et ajouter les morceaux de ce script).

Ce fichier, avec un tas d'autres personnes est disponible ici ..

Thats essentiellement, qu'à configurer la base de données, de modifier les variables de base de données nom d'hôte, nom de base de données, base de données nom d'utilisateur et mot de passe, télécharger le script, et c'est parti. gif "alt =":)" title =" Smile "/>
  • carlosrapa
  • Newbie
  • Newbie
  • No Avatar
  • Inscription: Jan 15, 2004
  • Messages: 11
  • Loc: Fairview Heights, IL. (St. Louis Area)
  • Status: Offline

Message Janvier 16th, 2004, 1:16 pm

thanks a bunch tous...J'apprécie l'aide...Je pense que je suis juste de celui-ci...i mai, mais être de retour pour obtenir de l'aide...bientôt ..

Merci,
Carlos
  • Axe
  • Genius
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Jan 07, 2004
  • Messages: 5744
  • Loc: Sub-level 28
  • Status: Offline

Message Janvier 16th, 2004, 4:59 pm

Pas de problème, Carlos,

Maintenant, le script ci-dessus vous donne juste la distance entre A et B...

Cela ne vous permettra pas de recherche pour tous les lieux dans un rayon donné (comme par exemple «Trouver tous les magasins dans les 50 miles de chez moi»), mais il peut être modifié pour fonctionner de cette manière ..

Une solution évidente est d'interroger votre base de données pour tous les magasins. Les travaux de la distance entre vous et chacun d'entre eux, puis d'afficher simplement ceux qui tombent dans les X miles de distance.

Im sûr, il ya plus d'équations mathématiques qui peuvent aider dans ce processus, bien que (comme l'élaboration de la min & max de latitude et de longitude, et seulement ceux d'interrogation). Youd encore d'interroger la base de données principale code postal pour trouver les lats et longs, mais si youve a obtenu de 500 magasins dans la base de données, il peut aider à accélérer les boucles si elle sait ne pas exécuter la boucle de 95% de ces magasins.
  • carlosrapa
  • Newbie
  • Newbie
  • No Avatar
  • Inscription: Jan 15, 2004
  • Messages: 11
  • Loc: Fairview Heights, IL. (St. Louis Area)
  • Status: Offline

Message Janvier 19th, 2004, 7:54 am

Yep Axe.... thats assez exactement ce que je veux faire...Je suis simplement de prendre le min / max de longitude / latitude de l'emplacement...calculé par versue miles Lat. / Log. Diplômes...puis de les comparer aux distributeurs...

Los
  • nfuids
  • Born
  • Born
  • No Avatar
  • Inscription: Fév 06, 2004
  • Messages: 2
  • Status: Offline

Message Février 6th, 2004, 9:45 pm

Salut,

J'ai trouvé tous vos suggestion très intéressante, surtout celui avec le code.

Serait bien si vous souhaitez partager cette math formule qui calcule le min / max lon / lat ..


J'ai un peu de 100k de l'équipe de recherche, Im sûr que cela aiderait beaucoup à l'utiliser.

Je vous remercie à l'avance,
NfuidS
  • Axe
  • Genius
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Jan 07, 2004
  • Messages: 5744
  • Loc: Sub-level 28
  • Status: Offline

Message Février 6th, 2004, 10:49 pm

Quand je me figure it out, Ill assurez-vous de ce post, lol.

D'autres projets, et de Real-Life © a mis cela sur le dos du graveur pendant un certain temps, mais il est encore sur ma todo list :)
  • nfuids
  • Born
  • Born
  • No Avatar
  • Inscription: Fév 06, 2004
  • Messages: 2
  • Status: Offline

Message Février 7th, 2004, 12:13 am

D'accord :)

Mais peut-être si vous pouviez me dire la base, je pourrais travailler ça.

let `s dire que j'ai beaucoup de bâtiments autour de l'US.

comment pourrais-je demander à mon système de me donner la liste des bâtiments qui se trouvent dans un rayon de 50 miles?

Je voudrais fournir le code postal de l'endroit où je suis.

alors quoi? J'ai besoin de trouver toutes les zip code qui se trouvent dans un rayon de 50 miles, puis faire un select * from table où le code postal IN ( "zip1", "zip2", "zip3")?

la longitude et de latitude sera utilisé pour trouver d'autres zip code qui se trouvent dans un rayon de 50 miles avec un certain genre de calcul?

Merci :-)
  • Axe
  • Genius
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Jan 07, 2004
  • Messages: 5744
  • Loc: Sub-level 28
  • Status: Offline

Message Février 7th, 2004, 12:43 am

Je n'ai absolument aucune idée de ce moment, lol...

La solution la plus évidente, est simplement la distance entre le client et de chaque magasin.

Comme vous le faire chacun, si moins de 50 miles de son, l'ajouter à un tableau. Si ses plus de 50 miles, l'ignorer.

Puis sortie sur le contenu de votre tableau. Bien sûr, si vous avez de 10.000 magasins et youve a obtenu une demi-douzaine de personnes à chaque minute la recherche d'un storelocation, cela peut jouer l'enfer sur votre serveur plutôt rapidement.

Fondamentalement, l'original de ma solution allait être similaire à celle-ci, mais sur une gamme plus limitée.

Vous travaillez à l'X & Y points 50 miles (distance en utilisant votre exemple) au nord, sud, est et ouest de la clientèle code postal.

Ensuite, vous dites à une liste de tous les magasins qui sont à l'intérieur de ce carré. Maintenant youve considérablement diminué votre recherche de magasins de 10000 à peut-être 75. Ensuite, on compare chacune de ces effectifs à distance linéaire et à ignorer les personnes de plus de 50 miles, ajouter les moins de 50 ans à l'éventail, et d'imprimer le tableau.

Mais, je n'ai pas cherché à comprendre comment le X et Y de ± 50 ± 50 co-ordinates encore, de façon à frapper yuoll google pour que l'un :)

Voir sa va probablement être plus facile sur la recherche pour sélectionner un groupe regroupés près de magasins, puis comparer les distances, que de fouiller chaque code postal pour voir à quoi de 50m, et ensuite voir les magasins qui relèvent de ces codes postaux.

Si vous cherchez tous les magasins dans un rayon de 50 mile, vous pourriez finir par faire 1 requête revenir youve compris le mile carré 100x100 section, qui comprend les 50 milles de rayon à partir de votre zip. si vous travaillez tous les codes postaux qui se trouvent dans ce 100x100 mile carré, et ensuite voir les magasins qui existent dans les codes postaux, vous parlez beaucoup de la demande sur le système.
  • Axe
  • Genius
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Jan 07, 2004
  • Messages: 5744
  • Loc: Sub-level 28
  • Status: Offline

Message Février 7th, 2004, 1:12 am

Attendez, ça ne fait rien, ignorez-moi, cuz les magasins ne contiennent pas les lat et long, juste un zip...donc oui, Youd à interroger la base de données pour tous les codes postaux dans un rayon de 50m, puis la recherche de tous les magasins dans les codes postaux.

Désolé, ses 3 heures, la cervelle frite, lol :)
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Février 7th, 2004, 1:12 am

Afficher de l'information

  • Total des messages de ce sujet: 17 messages
  • Utilisateurs parcourant ce forum: Kurthead+1 et 145 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC