Question

J'ai les données suivantes:

a  , b , c   , d                 , e  , f
375, 52, 1892, http://example.com, ::1, 1308233412
341, 52, 1892, http://example.com, ::1, 1308233412
422, 52, 1892, http://example.com, ::1, 1308233417
478, 50, 1892, http://example.com, ::1, 1308233418
58, 481, 1892, http://example.com, ::1, 1308233432
69, 481, 1892, http://example.com, ::1, 1308233432
487, 49, 1892, http://example.com, ::1, 1308233432
  • a = position y
  • b = position x
  • C = résolution d'écran (navigateur)
  • d = hôte
  • e = ip
  • F = horodatage

Ce que je veux faire, par exemple: par exemple:

Vérifiez si elle dans une case 50x50px si c'est le cas +1.

J'aurais donc une table comme:

y/x |  0 | 50  | 100  | 150
----+----+-----+------+----
50  | 0  |  1  |   2  |   0
100 | 0  |  0  |   1  |   0
150 | 1  |  0  |   0  |   1
200 | 2  |  2  |   3  |   0
etc.

En espérant que quelqu'un puisse m'aider à y parvenir ci-dessus

Le lien suivant crée une carte thermique, http://www.design-code.nl/example/heatmap.php , mais la carte thermique se chevauche donc je veux mettre les points verts dans un tableau qui est compté, et celles-ci où elles se trouvent dans le 50x50 mettra en évidence avec une autre couleur. Désolé pour les mauvaises informations

Était-ce utile?

La solution

Bien que cette question soit mal formulée, je pense que je comprends ce que vous demandez. Voici ce que vous devez faire. Je ne suis pas si couramment couramment PHP, alors assurez-vous de regarder les extraits de code que j'écris au lieu de les copier / coller.

  1. Trouvez les valeurs maximales x et y.
  2. Instancier et initialiser un tableau 2D basé sur ces valeurs divisées par 50.

Par exemple, si vous vouliez Array[X][Y] vous feriez:

$myArray = array();
for ($x = 0; $x < $maxX / 50; $x++) {
    $myArray[] = array();
    for ($y = 0; $y < $maxY / 50; $y++) {
        $myArray[$x][] = 0;
    }
}

Cela devrait instancier et initialiser un tableau 2D à tous les 0 comme vous avez besoin

3) itérer dans votre tableau et pour chaque entrée, incrément la valeur de $myArray[$curX/50][$curY/50] par 1:

foreach ($inputArray as $curRow) $myArray[$curRow[b]/50][$curRow[a]/50] += 1;

Encore une fois, je ne suis pas pro à PHP et je viens de commencer à travailler avec, mais cela devrait être un bon début.

Autres conseils

D'accord, je pense que j'ai réglé la question de la question (voir mon commentaire par la question ci-dessus).

La façon dont je le ferais est de diviser les positions x et y par 50, et utiliser le floor() Fonction pour obtenir une valeur entière à partir de cela. Ce serait le numéro de boîte dans lequel ils seraient.

Vous pouvez ensuite remplir cela dans un tableau assez facilement.

Le code suivant produira le tableau dont vous avez besoin:

$map = array();
foreach($data as $row) {
    $map[floor($row['x']/50)][floor($row['y']/50)]++;
}

Ensuite, vous pouvez simplement l'imprimer dans une table (avec les en-têtes de ligne et de colonne étant le numéro de cellule multiplié par 50).

Vous voudrez peut-être zéro remplir le $map Arrosez à l'avance afin que vous obteniez des zéros dans les cellules où vous n'avez pas de coups, ou vous pouvez le résoudre lorsque vous l'imprimez; à toi de voir)

Les coordonnées de la boîte seraient:

$x_coor = floor ($a / 50);
$y_coor = floor ($b / 50);

Avec les coordonnées, vous pouvez les pleine un tableau N dimensionnel

Vous voulez chercher une courbe de remplissage d'espace. Un SFC est généralement utilisé pour les cartes thermiques et réduit la complexité 2D à une complexité 1D. Vous voulez chercher le blog Spatial Quadtree Hilbert Curve de Nick.

Tout d'abord, vous devez remplir un tableau plein de 0:

$result = array();
for($i=0;$i<2000;$i+=50){
    $result[$i] = array();
    for($j=0;$j<2000;$j+=50){
        $result[$i][$j] = 0;
    }
}

où 2000 est la largeur / hauteur d'écran maximale. Ensuite, vous comptez vos valeurs, où $a est votre tableau:

foreach($a as $v){
    $result[floor($v[0]/50)*50][floor($v[1]/50)*50]++;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top