Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
trilos021
Δημοσιεύσεις: 131
Εγγραφή: 04 Νοέμ 2003 18:06

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από trilos021 » 24 Ιούλ 2013 03:52

Καλησπέρα,

έχω ένα πίνακα ο οποίος φτιάχνεται από ένα αρχείο json που περιέχει συντεταγμένες. Αυτό που ψάχνω να βρώ είναι πώς μπορώ να εισάγω μια ενδιάμεση τιμή πχ( ανάμεσα στο array[1],array[η τιμή που θέλω],array[2]).Πιο αναλυτικά

ο πίνακας π έχω φτιάξει είναι ο εξής

Κώδικας: Επιλογή όλων

{"Level":{"0":{"lat":38.889755,"lgn":-77.081756},"2":{"lat":38.890949,"lgn":-77.081886},"1":{"lat":19.445154,"lgn":19.445154},"4":{"lat":38.890911,"lgn":-77.082893},"3":{"lat":29.1680515,"lgn":29.1680515},"6":{"lat":38.89075,"lgn":-77.084739},"5":{"lat":34.02943525,"lgn":34.02943525},"8":{"lat":38.890701,"lgn":-77.085243},"7":{"lat":36.460077625,"lgn":36.460077625},"10":{"lat":38.890861,"lgn":-77.085533},"9":{"lat":37.6753893125,"lgn":37.6753893125},"12":{"lat":38.89122,"lgn":-77.085807},"11":{"lat":38.28319015625,"lgn":38.28319015625},"14":{"lat":38.89175,"lgn":-77.085899},"13":{"lat":38.587369078125,"lgn":38.587369078125},"16":{"lat":38.893379,"lgn":-77.08612},"15":{"lat":38.740293539062,"lgn":38.740293539062}, .....κοκ
Αυτό που ψάχνω να παίρνω ανα δύο συνεχόμενες τιμές πχ 38.889755,-77.081756 και 38.890949,-77.081886 και αφού τις "περνάω" από ένα function που μου επιστέφει την απόσταση των σημείων να προσθέτω στον πίνακα μια ενδιάμεση σε αυτή θέση με τις συντεταγμένες που βρίσκονται στο μέσω της απόστασης.

Αναλυτικότερα το script το οποίο δημιουργώ τον πίνακα ΧΩΡΙΣ τις ενδιάμεσες τιμές
Σε σχόλια είναι η προσπάθεια που κάνω να προσθέσω την ενδιάμεση τιμή αλλά τζίφος (την απόσταση και τα νέα σημεία τα παίρνω κανονικά απλά δεν μπορώ να τα προσθέσω ενδιάμεσα)

- ο μετρητής $i είναι για να μπαίνει η τιμή σαν latitude,longitude (όταν το i έχει μονή τιμή μπαίνει στον πίνακα σαν lat ενώ όταν η τιμή είναι ζυγός αριθμός μπαίνει σαν long)

Κώδικας: Επιλογή όλων


$i++;
    if($i%2==0){
	    
    	$pinakas[Level][$y]['lgn']=$value;
    	$old_lgn=$pinakas[Level][$y-2]['lgn'];
    	$old_lat=$pinakas[Level][$y-3]['lat'];
    	
    	
    	/*if(vincentyGreatCircleDistance($old_lat,$old_lgn,$pinakas[Level][$y-1]['lat'],$pinakas[Level][$y]['lgn'])>70){
	    	$count++;
	    	$newpoint_lat=($old_lat+$pinakas[Level][$y-1]['lat'])/2;
	    	$newpoint_lgn=($old_lgn+$pinakas[Level][$y]['lgn'])/2;
	    	$y++;
	    	$pinakas[Level][$y]['lat']=$newpoint_lat;
	    	
	    	$pinakas[Level][$y]['lgn']=$newpoint_lgn;
	    	//$old_lgn=$pinakas[Level][$y]['lgn'];
	    	//$old_lat=$pinakas[Level][$y]['lat'];
    	} */

    	   $y++;	
    	
    	
    	//$z++;
	   // $koma=" </br>";
    &#125;else&#123;
    $pinakas&#91;Level&#93;&#91;$y&#93;&#91;'lat'&#93;=$value;
    $old_lat=$value;
   // $koma=" , ";
   
    
    
    &#125; 

Έχει κανείς καμια ιδέα; ευχαριστώ εκ των προτέρων!

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από geomagas » 24 Ιούλ 2013 13:19

trilos021 έγραψε:...ανάμεσα στο array[1],array[η τιμή που θέλω],array[2]...
Εκτός κι αν έχω καταλάβει λάθος, αυτό που λες δεν υφίσταται, διότι το array[2] δεν είναι μετά το array[1].
Η μη συνεχόμενη αρίθμηση έχει τη σημασία της (χρησιμοποιείται κάπου) ή μπορείς να την αγνοήσεις και να την αντικαταστήσεις με τη δική σου;

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από alou » 24 Ιούλ 2013 14:38

Προσπερνώντας αυτό που λέει ο geomagas πχ με array_sort το φέρνεις σε μια λογική αν δεν είναι όπως το θες, θα ξαναέφτιαχνα το array με άλλη μια διάσταση, χωρίζοντας τα ζευγάρια και προσθέτοντας την ενδιάμεση τιμή, πχ

array (
pointset1 (
pointA (lat, long),
midpoint (lat,long),
pointB (lat, long) )
), pointset2...
)

γιατί έτσι έχει νόημα ο διαχωρισμός.

Το να ξαναφτιάξεις έτσι το array δεν είναι σπουδαίο, με τον τρόπο που ήδη έχεις χώρισε τα ζευγάρια αρχικά (με τα επίπεδα που υπάρχουν παραπάνω) και μετά στο array που θα φτιάξεις πρόσθεσε το midpoint για κάθε ένα από τα ζεύγη pointset.

Σίγουρα υπάρχει και πιο αποτελεσματική λύση αλλά επειδή φαντάζομαι αυτό θα γίνει μια φορά και θα το αποθηκεύσεις κάπου (ή όχι?) δεν πειράζει.

Για το midpoint αν δεν έχεις βρει λύση δες αυτό:
http://simonholywell.com/projects/navigator/
εξαιρετικά εύχρηστο για τέτοιες περιπτώσεις, φτιάχνω τώρα κάτι σχετικό και με έχει βολέψει πάρα πολύ.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από geomagas » 24 Ιούλ 2013 14:51

Και το pointset2 θα έχει (pointC,midpointCD,pointD); Και το midpointBC;

Εγώ κατάλαβα ότι θέλει:
pointA
midpointAB
pointB
midpointBC
pointC
midpointCD
pointD
...

Λάθος;

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6235
Εγγραφή: 30 Νοέμ 2004 03:09

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από fafos » 24 Ιούλ 2013 14:55

Gia toso (sxetika)aplous algorithmous den xreiazetai na egkatasthsei eidikes vivliothikes sto systhma..
Ego den exo katalavei an exeis kataferei na vreis to midpoint h oxi! pantos o kodikas pou dineis den nomizo oti mporei na sou vrei to midpoint afou einai kommati pio periplokos..

Eixa dhmiourghsei kati analogo prin apo xronia gia mia efarmogh kai to ekana ligo pio "light" gia na to katalaveis:

Κώδικας: Επιλογή όλων

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>find midpoint</title>
    <link href="https&#58;//google-developers.appspot.com/maps/documentation/javascript/examples/default.css" rel="stylesheet">
  <script src="http&#58;//maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>


  </head>
  <body>
<?php
//shmeia A kai B
$lat1 = 37.990849233935194; 
$lon1 = 23.738339349999933; 
 
$lat2 = 37.946133152255044; 
$lon2 = 23.64731800000004;
 
//**apostash A->B**//
$distance = &#40;3958*3.1415926*sqrt&#40;&#40;$lat2-$lat1&#41;*&#40;$lat2-$lat1&#41; + cos&#40;$lat2/57.29578&#41;*cos&#40;$lat1/57.29578&#41;*&#40;$lon2-$lon1&#41;*&#40;$lon2-$lon1&#41;&#41;/180&#41;;

//**vres to midpoint**/
$dLon = deg2rad&#40;$lon2 - $lon1&#41;;

$lat1 = deg2rad&#40;$lat1&#41;;
$lat2 = deg2rad&#40;$lat2&#41;;
$lon1 = deg2rad&#40;$lon1&#41;;

$Bx = cos&#40;$lat2&#41; * cos&#40;$dLon&#41;;
$By = cos&#40;$lat2&#41; * sin&#40;$dLon&#41;;
//mid latitute
$lat3 = atan2&#40;sin&#40;$lat1&#41; + sin&#40;$lat2&#41;, sqrt&#40;&#40;cos&#40;$lat1&#41; + $Bx&#41; * &#40;cos&#40;$lat1&#41; + $Bx&#41; + $By * $By&#41;&#41;;
//mid lotitude
$lon3 = $lon1 + atan2&#40;$By, cos&#40;$lat1&#41; + $Bx&#41;;

//telikes midpoint syntetagmenes
$lat3 = rad2deg&#40;$lat3&#41;;
$lon3 = rad2deg&#40;$lon3&#41;;

//oi syntetgmenes ton A kai B points
$lat1 = 37.990849233935194; 
$lon1 = 23.738339349999933; 
 
$lat2 = 37.946133152255044; 
$lon2 = 23.64731800000004;

//apostasi A->mid
$distanceamid = &#40;3958*3.1415926*sqrt&#40;&#40;$lat3-$lat1&#41;*&#40;$lat3-$lat1&#41; + cos&#40;$lat3/57.29578&#41;*cos&#40;$lat1/57.29578&#41;*&#40;$lon3-$lon1&#41;*&#40;$lon3-$lon1&#41;&#41;/180&#41;;

//apostasi B->mid
$distancebmid = &#40;3958*3.1415926*sqrt&#40;&#40;$lat2-$lat3&#41;*&#40;$lat2-$lat3&#41; + cos&#40;$lat2/57.29578&#41;*cos&#40;$lat3/57.29578&#41;*&#40;$lon2-$lon3&#41;*&#40;$lon2-$lon3&#41;&#41;/180&#41;;
?> 

  
  Apostash A to B&#58; <?php echo round&#40;$distance,4&#41;;?> xiliometra<br />
  Apostash apo A to Mid&#58;  <?php echo round&#40;$distanceamid,4&#41;;?> xiliometra<br />
  Apostash apo B to Mid&#58;  <?php echo round&#40;$distancebmid,4&#41;;?> xiliometra<br /> 
  Syntetagmenes MidPoint&#58;   <?php echo $lat3;?>, <?php echo $lon3;?>
    <div id="map-canvas"></div>
  <script type="text/javascript">
    var locations = &#91;
      &#91;'A Point', <?php echo $lat1;?>, <?php echo $lon1;?>&#93;,
      &#91;'Mid Point', <?php echo $lat3;?>, <?php echo $lon3;?>&#93;,
      &#91;'B Point', <?php echo $lat2;?>, <?php echo $lon2;?>&#93;
    &#93;

    var map = new google.maps.Map&#40;document.getElementById&#40;'map-canvas'&#41;, &#123;
      zoom&#58; 13,
      center&#58; new google.maps.LatLng&#40;<?php echo $lat3;?>, <?php echo $lon3;?>&#41;,
      mapTypeId&#58; google.maps.MapTypeId.ROADMAP
    &#125;&#41;;

    var infowindow = new google.maps.InfoWindow&#40;&#41;;

    var marker, i;

    for &#40;i = 0; i < locations.length; i++&#41; &#123;  
      marker = new google.maps.Marker&#40;&#123;
        position&#58; new google.maps.LatLng&#40;locations&#91;i&#93;&#91;1&#93;, locations&#91;i&#93;&#91;2&#93;&#41;,
        map&#58; map
      &#125;&#41;;

      google.maps.event.addListener&#40;marker, 'click', &#40;function&#40;marker, i&#41; &#123;
        return function&#40;&#41; &#123;
          infowindow.setContent&#40;locations&#91;i&#93;&#91;0&#93;&#41;;
          infowindow.open&#40;map, marker&#41;;
        &#125;
      &#125;&#41;&#40;marker, i&#41;&#41;;
    &#125;
  </script>		
  </body>
</html>

Olo to thema vrisketai mesa sto PHP kodika... o protos algorithmos vriskei thn apostash metaxy ton arxikon shmeion (A->B) h opoia apostash den katalava pou mporei na xrhsimeusei!

Sto epomeno kommati akolouthei h euresh ton syntetagmenon tou midpoint pou einai kai to zhtoumeno.

O xarths kai ta keimena apostaseon yparxoun kathara gia na epalhtheuso oti to midpoint einai sosto..

Auta prepei na exoun idia apostash:
Apostash apo A to Mid: 2.9203 xiliometra
Apostash apo B to Mid: 2.9203 xiliometra

kai na exoun to miso autou:
Apostash A to B: 5.8407 xiliometra
(sto peripou.. mporei na yparxei mia diafora sta xiliosta logo tou round pou exo valei)

Vres prota to midpoint gia kathe array kai meta vlepoume pos to vazeis endiamesa..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από alou » 24 Ιούλ 2013 15:13

@fafos ωραίος. Είδα ότι έχει μια vincentyGreatCircleDistance fn όμως οπότε ήδη κάποιο library έχει μάλλον... αλλά πολύ καλύτερα να τα υπολογίσεις με ένα δικό function.

@geomagas ναι, μάλλον έχεις δίκιο :D κόλλησα με τα ζευγάρια...

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από geomagas » 24 Ιούλ 2013 15:22

fafos έγραψε:Vres prota to midpoint gia kathe array kai meta vlepoume pos to vazeis endiamesa..
Μα τα βρίσκει ήδη, ξαναδές τον κώδικά του!

Βρε παιδιά, η ερώτησή του δεν ήταν ούτε ποια δομή θα πρέπει να έχει το array του (είναι δεδομένη) ούτε πως υπολογίζει αποστάσεις και midpoints.
Ήταν πως μπορεί να εισάγει ένα στοιχείο σε αυτόν τον πίνακα, "σφήνα" μεταξύ δύο άλλων!
Και έχει να κάνει είτε με τη φυσική σειρά των στοιχείων, όπως τα παίρνει από το json, είτε με τα keys.
Μόλις μας απαντήσει τι από τα δύο, θα μπορώ να συνεχίσω...

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από dva_dev » 24 Ιούλ 2013 15:25

Ο πιο απλός τρόπος είναι είτε να δημιουργείς τα στοιχεία σε κάποιον πίνακα Β, είτε για να χρησιμοποιήσεις τον ίδιο πίνακα να κάνεις shift όλα τα στοιχεία μία θέση κάτω (από το Χ στοιχείο και μετά) για να μείνει χώρος στη Χ θέση να βάλεις σφήνα το στοιχείο που θέλεις.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από geomagas » 24 Ιούλ 2013 15:28

Και η αρίθμηση πως διαφοροποιείται; Ποιο θα είναι το νέο key;

Γι αυτό ρωτάω αν η αρίθμηση που έχει ήδη είναι κρίσιμη για τον υπόλοιπο αλγόριθμο ή όχι, διότι από αυτό εξαρτάται και η λύση.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6235
Εγγραφή: 30 Νοέμ 2004 03:09

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από fafos » 24 Ιούλ 2013 15:34

geomagas έγραψε:Μα τα βρίσκει ήδη, ξαναδές τον κώδικά του!

Βρε παιδιά, η ερώτησή του δεν ήταν ούτε ποια δομή θα πρέπει να έχει το array του (είναι δεδομένη) ούτε πως υπολογίζει αποστάσεις και midpoints.
Ήταν πως μπορεί να εισάγει ένα στοιχείο σε αυτόν τον πίνακα, "σφήνα" μεταξύ δύο άλλων!
Και έχει να κάνει είτε με τη φυσική σειρά των στοιχείων, όπως τα παίρνει από το json, είτε με τα keys.
Μόλις μας απαντήσει τι από τα δύο, θα μπορώ να συνεχίσω...
diavase apo thn arxh to mhnyma mou...

an exei sosta domhmenh array mporei me to array_slice() na kanei thn douleia tou..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από geomagas » 24 Ιούλ 2013 16:17

fafos έγραψε:
geomagas έγραψε:Μα τα βρίσκει ήδη, ξαναδές τον κώδικά του!

Βρε παιδιά, η ερώτησή του δεν ήταν ούτε ποια δομή θα πρέπει να έχει το array του (είναι δεδομένη) ούτε πως υπολογίζει αποστάσεις και midpoints.
Ήταν πως μπορεί να εισάγει ένα στοιχείο σε αυτόν τον πίνακα, "σφήνα" μεταξύ δύο άλλων!
Και έχει να κάνει είτε με τη φυσική σειρά των στοιχείων, όπως τα παίρνει από το json, είτε με τα keys.
Μόλις μας απαντήσει τι από τα δύο, θα μπορώ να συνεχίσω...
diavase apo thn arxh to mhnyma mou...
Μην το κάνεις αυτό... Δεν έχεις καμία ένδειξη ότι δεν "διάβασα από την αρχή το μήνυμά σου". Μην πατρονάρεις έτσι τους άλλους.
fafos έγραψε: an exei sosta domhmenh array mporei me to array_slice() na kanei thn douleia tou..
Δεν είσαι ο θεματοφύλακας του σωστού, ακόμα κι αν υποθέσουμε ότι υπάρχει τέτοιο πράγμα, ακόμα κι αν υποθέσουμε ότι η ερώτηση ήταν "πείτε μου το σωστό τρόπο να δομήσω το array μου". Συνεχίζεις να είσα offtopic. Η ερώτηση ήταν συγκεκριμένη, και θεωρώ ότι δεν προσέφερες τίποτα στη συζήτηση.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6235
Εγγραφή: 30 Νοέμ 2004 03:09

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από fafos » 24 Ιούλ 2013 16:19

geomagas έγραψε:
fafos έγραψε:
geomagas έγραψε:Μα τα βρίσκει ήδη, ξαναδές τον κώδικά του!

Βρε παιδιά, η ερώτησή του δεν ήταν ούτε ποια δομή θα πρέπει να έχει το array του (είναι δεδομένη) ούτε πως υπολογίζει αποστάσεις και midpoints.
Ήταν πως μπορεί να εισάγει ένα στοιχείο σε αυτόν τον πίνακα, "σφήνα" μεταξύ δύο άλλων!
Και έχει να κάνει είτε με τη φυσική σειρά των στοιχείων, όπως τα παίρνει από το json, είτε με τα keys.
Μόλις μας απαντήσει τι από τα δύο, θα μπορώ να συνεχίσω...
diavase apo thn arxh to mhnyma mou...
Μην το κάνεις αυτό... Δεν έχεις καμία ένδειξη ότι δεν "διάβασα από την αρχή το μήνυμά σου". Μην πατρονάρεις έτσι τους άλλους.
fafos έγραψε: an exei sosta domhmenh array mporei me to array_slice() na kanei thn douleia tou..
Δεν είσαι ο θεματοφύλακας του σωστού, ακόμα κι αν υποθέσουμε ότι υπάρχει τέτοιο πράγμα, ακόμα κι αν υποθέσουμε ότι η ερώτηση ήταν "πείτε μου το σωστό τρόπο να δομήσω το array μου". Συνεχίζεις να είσα offtopic. Η ερώτηση ήταν συγκεκριμένη, και θεωρώ ότι δεν προσέφερες τίποτα στη συζήτηση.
ok
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

trilos021
Δημοσιεύσεις: 131
Εγγραφή: 04 Νοέμ 2003 18:06

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από trilos021 » 26 Ιούλ 2013 08:09

καλημέρα και ευχαριστώ για τις απαντήσεις σας!Από τα post σας κατάλαβα ότι μάλλον το πάω μέσω Λαμίας το θέμα οπότε ίσως είναι καλύτερα να σας εξηγήσω τι ακριβώς θέλω να κάνω αυτό το script.

Κατασκευάζω ένα location based game για android και γι αυτό το λόγο χρειάζομαι να παίρνω directions κάθε λίγο και λιγάκι με σκοπό να ξεπερνάω το όριο της google στα calls. Ο λόγος που θέλω τα directions είναι για να κινείται ένα ανθρωπάκι (marker) συνέχεια πάνω στο χάρτη (πάνω σε δρόμο) αλλά κοντά στην περιοχή που βρίσκεται ο χρήστης.

ΔΙΑΔΙΚΑΣΙΑ: Ο χρήστης μέσω του κινητού του στέλνει τις συντεταγμένες όπου βρίσκεται στο server.Μόλις ο server πάρει την τοποθεσία του,παίρνει 2 τυχαία σημεία που βρίσκονται σε μια συγκεκριμένη περίμετρο γύρω από αυτόν και ρωτάει το api του mapquest για directions. Εισάγει τα directions σε ένα δικό του πίνακα (αυτό γιατί μετά θα προστεθούν και άλλα χαρακτηριστικά της κίνησης του χαρακτήρα όπως η ταχύτητα) και στέλνει στο κινητό ένα json όπου μετά με μια loop κανει το marker να κινείται πάνω στο δρόμο.

ΠΡΟΒΛΗΜΑ: Το πρόβλημα βρίσκεται στη μη ομαλή κίνηση του marker καθώς σε τελείως ευθεία "πετάγεται" από τη μια άκρη της στην άλλη. Θα ήθελα πριν στείλω το τελικό json στο κινητό να έχω δημιουργήσει πολλά ενδιάμεσα σημεία ώστε να κάνω πιο smooth την κίνηση του marker.Είναι πολύ πιθανό να μη χρειαστεί να πάρω το ενδιάμεσο σημείο αλλά να αρχίσω να προσθέτω στην πρώτη συντεταγμένη μέτρα ώστε να φτάσει στη δεύτερη συντεταγμένη.δλδ θα πρέπει να προστεθούν αρκετές μεταβλητές ανάμεσα στα 2 σημεία.

υ.γ: η vincentyGreatCircleDistance() είναι η παρακάτω function που επιστρέφει την απόσταση από 2 συντεταγμένες

Κώδικας: Επιλογή όλων

function vincentyGreatCircleDistance&#40;
  $latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000&#41;
&#123;
  // convert from degrees to radians
  $latFrom = deg2rad&#40;$latitudeFrom&#41;;
  $lonFrom = deg2rad&#40;$longitudeFrom&#41;;
  $latTo = deg2rad&#40;$latitudeTo&#41;;
  $lonTo = deg2rad&#40;$longitudeTo&#41;;

  $lonDelta = $lonTo - $lonFrom;
  $a = pow&#40;cos&#40;$latTo&#41; * sin&#40;$lonDelta&#41;, 2&#41; +
    pow&#40;cos&#40;$latFrom&#41; * sin&#40;$latTo&#41; - sin&#40;$latFrom&#41; * cos&#40;$latTo&#41; * cos&#40;$lonDelta&#41;, 2&#41;;
  $b = sin&#40;$latFrom&#41; * sin&#40;$latTo&#41; + cos&#40;$latFrom&#41; * cos&#40;$latTo&#41; * cos&#40;$lonDelta&#41;;

  $angle = atan2&#40;sqrt&#40;$a&#41;, $b&#41;;
  return $angle * $earthRadius;
&#125;
υ.γ 2: Παραθέτω και τη circle() η οποία επιστρέφει τις συντεταγμένες 2 σημείων που βρίσκονται πάνω στο τόξο του κύκλου με κέντρο τη θέση του χρήστη και r όσο του ορίσω εγώ

Κώδικας: Επιλογή όλων


function circle&#40;$cx,$cy,$radius,$angle&#41;&#123;
	$angle2=$angle-180;
	$xneo1 = &#40;$cx + $radius * cos&#40;$angle&#41;&#41;;
	$yneo1 = &#40;$cy + $radius * sin&#40;$angle&#41;&#41;;
	
	$xneo2 = &#40;$cx + $radius * cos&#40;$angle2&#41;&#41;;
	$yneo2 = &#40;$cy + $radius * sin&#40;$angle2&#41;&#41;;
	
 
    
  return &#40;"from=".$xneo1.",".$yneo1."&to=".$xneo2.",".$yneo2&#41;;

	

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από geomagas » 26 Ιούλ 2013 09:04

Το json που παραθέτεις λοιπόν να υποθέσω ότι είναι αυτό που παίρνεις από το mapquest;
Και θέλεις να το επεξεργαστείς (να προσθέσεις σημεία κλπ) και να το στείλεις στο χρήστη με την ίδια δομή;
Ο αλγόριθμος, γενικά, θα ήταν κάτι τέτοιο:

Κώδικας: Επιλογή όλων

<?php
	$json='&#123;"Level"&#58;&#123;"0"&#58;&#123;"lat"&#58;38.889755,"lgn"&#58;-77.081756&#125;,"2"&#58;&#123;"lat"&#58;38.890949,"lgn"&#58;-77.081886&#125;,"1"&#58;&#123;"lat"&#58;19.445154,"lgn"&#58;19.445154&#125;,"4"&#58;&#123;"lat"&#58;38.890911,"lgn"&#58;-77.082893&#125;,"3"&#58;&#123;"lat"&#58;29.1680515,"lgn"&#58;29.1680515&#125;,"6"&#58;&#123;"lat"&#58;38.89075,"lgn"&#58;-77.084739&#125;,"5"&#58;&#123;"lat"&#58;34.02943525,"lgn"&#58;34.02943525&#125;,"8"&#58;&#123;"lat"&#58;38.890701,"lgn"&#58;-77.085243&#125;&#125;&#125;';
	// "ekopsa" polla shmeia gia oikonomia xorou
	$obj=json_decode&#40;$json&#41;;
	foreach&#40;$obj->Level as $key=>$val&#41; $level&#91;$key&#93;=&#40;array&#41;$val;
	$level=my_transform&#40;$level&#41;;
	header&#40;"Content-type&#58; 'application/json' charset=utf-8"&#41;; // allakse to utf-8 sto diko sou encoding
	echo json_encode&#40;array&#40;'Level'=>$level&#41;&#41;;

	function my_transform&#40;$arr&#41; &#123; return $arr; &#125; // under construction
Ο παραπάνω κώδικας υποτίθεται ότι επεξεργάζεται το αρχικό json (μόνο το "Level" κομμάτι του) και στέλνει το τελικό array στον client, πάλι σε json. Όμως, η my_transform() που κάνει όλη τη δουλειά, είναι dummy (επιστρέφει ότι της δώσεις αυτούσιο). Το πρόβλημα επικεντρώνεται στο να φτιάξουμε αυτή τη συνάρτηση.
Και εδώ είναι η απορία μου (βλ. και παραπάνω):
Α. Πως είναι οργανωμένα τα ευθύγραμμα τμήματα;
1) ["0"-"2"], ["2"-"1"], ["1"-"4"] ...δηλαδή με τη "φυσική" σειρά που τα δίνει το json
ή
2) ["0"-"1"], ["1"-"2"], ["2"-"3"] ...δηλαδή βάσει των keys;
Β. Το json που θα λάβει ο χρήστης θα πρέπει να διατηρήσει τα αρχικά keys (ή έστω έχει κάποια "προδιαγραφή" για αυτά), ή αποφασίζεις εσύ; (υποθέτω το δεύτερο μιας και την client εφαρμογή τη φτιάχνεις ο ίδιος)

trilos021
Δημοσιεύσεις: 131
Εγγραφή: 04 Νοέμ 2003 18:06

Γρίφος - εισαγωγή ενδιάμεσης τιμής σε πίνακα

Δημοσίευση από trilos021 » 26 Ιούλ 2013 10:07

geomagas έγραψε:Το json που παραθέτεις λοιπόν να υποθέσω ότι είναι αυτό που παίρνεις από το mapquest;
Και θέλεις να το επεξεργαστείς (να προσθέσεις σημεία κλπ) και να το στείλεις στο χρήστη με την ίδια δομή;
Ο αλγόριθμος, γενικά, θα ήταν κάτι τέτοιο:

Κώδικας: Επιλογή όλων

<?php
	$json='&#123;"Level"&#58;&#123;"0"&#58;&#123;"lat"&#58;38.889755,"lgn"&#58;-77.081756&#125;,"2"&#58;&#123;"lat"&#58;38.890949,"lgn"&#58;-77.081886&#125;,"1"&#58;&#123;"lat"&#58;19.445154,"lgn"&#58;19.445154&#125;,"4"&#58;&#123;"lat"&#58;38.890911,"lgn"&#58;-77.082893&#125;,"3"&#58;&#123;"lat"&#58;29.1680515,"lgn"&#58;29.1680515&#125;,"6"&#58;&#123;"lat"&#58;38.89075,"lgn"&#58;-77.084739&#125;,"5"&#58;&#123;"lat"&#58;34.02943525,"lgn"&#58;34.02943525&#125;,"8"&#58;&#123;"lat"&#58;38.890701,"lgn"&#58;-77.085243&#125;&#125;&#125;';
	// "ekopsa" polla shmeia gia oikonomia xorou
	$obj=json_decode&#40;$json&#41;;
	foreach&#40;$obj->Level as $key=>$val&#41; $level&#91;$key&#93;=&#40;array&#41;$val;
	$level=my_transform&#40;$level&#41;;
	header&#40;"Content-type&#58; 'application/json' charset=utf-8"&#41;; // allakse to utf-8 sto diko sou encoding
	echo json_encode&#40;array&#40;'Level'=>$level&#41;&#41;;

	function my_transform&#40;$arr&#41; &#123; return $arr; &#125; // under construction
Ο παραπάνω κώδικας υποτίθεται ότι επεξεργάζεται το αρχικό json (μόνο το "Level" κομμάτι του) και στέλνει το τελικό array στον client, πάλι σε json. Όμως, η my_transform() που κάνει όλη τη δουλειά, είναι dummy (επιστρέφει ότι της δώσεις αυτούσιο). Το πρόβλημα επικεντρώνεται στο να φτιάξουμε αυτή τη συνάρτηση.
Και εδώ είναι η απορία μου (βλ. και παραπάνω):
Α. Πως είναι οργανωμένα τα ευθύγραμμα τμήματα;
1) ["0"-"2"], ["2"-"1"], ["1"-"4"] ...δηλαδή με τη "φυσική" σειρά που τα δίνει το json
ή
2) ["0"-"1"], ["1"-"2"], ["2"-"3"] ...δηλαδή βάσει των keys;
Β. Το json που θα λάβει ο χρήστης θα πρέπει να διατηρήσει τα αρχικά keys (ή έστω έχει κάποια "προδιαγραφή" για αυτά), ή αποφασίζεις εσύ; (υποθέτω το δεύτερο μιας και την client εφαρμογή τη φτιάχνεις ο ίδιος)
Καλημέρα, τα ευθύγραμμα τμήματα είναι οργανωμένα βάσει των keys (αν και τα βάζω όπως τα παίρνω από το mapquest.Δεν αλλάζει η σειρά τους) και δεν είναι ανάγκη να διατηρήσω τα αρχικά keys στο json που θα λάβει ο χρήστης.

Υ.Γ: ΤΟ JSON EINAI AYTO ΠΟΥ ΦΤΑΧΝΩ ΕΓΩ.ΠΑΡΑΚΑΤΩ ΕΙΝΑΙ ΤΟΥ MAPQUEST

http://www.mapquestapi.com/directions/v ... iency=21.0

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες