CSV und Leerzeilen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CSV und Leerzeilen

    Hallo,

    ich stehe vor folgendem Problem.

    Ich erzeuge für Google Maps einen Linestring, um diesen auf der Karte darzustellen.

    PHP-Code:
    var points = [
                        <?php foreach ($shape->points() as $k => $point) {  ?>
                            <?php if ($k 0) {  ?>,<?php ?>
                            new google.maps.LatLng(<?php echo $point->lat ?><?php echo $point->lng ?>)
                        <?php ?>
                    ];
    Hierzu:

    PHP-Code:
    $fp fopen('myShapes.php''r');
     
        
    $shape = new Shape();
     
        
    $i 0;
        while ((
    $row fgetcsv($fp))) {
            if (
    $i == 0) {
                
    // csv header row
            
    }
            else {
            if(
    $row != ""){
            
    $shape->addPoint(new ShapePoint($row[1], $row[2], $i));
            }
                
            }
     
            
    $i++;
        }
     
        
    fclose($fp); 
    Aufbau der myShapes.php

    PHP-Code:
    <?php
    //TEST
    $string =  '27779,-33.3240789844364,115.638325287067,1,0
    27779,-33.3240755555556,115.638360555556,2,3.31
    27779,-33.3240722222222,115.638396666667,3,6.69
    27779,-33.3240783333333,115.638419444444,4,8.91
    27779,-33.3246238888889,115.638753333333,5,76.93
    27779,-33.3246716666667,115.638813888889,6,84.66
    27779,-33.3247216666667,115.638857777778,7,91.55
    27779,-33.3247783333333,115.638908333333,8,99.4
    27779,-33.3248188888889,115.638933333333,9,104.46
    27779,-33.3248483333333,115.638941666667,10,107.82
    27779,-33.3248366666667,115.63901,11,114.31
    27779,-33.3246905555556,115.639496666667,12,162.43
    27779,-33.3244577777778,115.639959444444,13,212.65
    27779,-33.3243933333333,115.640034444444,14,222.64
    27779,-33.3247722222222,115.64049,15,282.33
    27779,-33.3250116666667,115.640761666667,16,319
    27779,-33.3252088888889,115.640923888889,17,345.58
    27779,-33.3254516666667,115.641070555556,18,375.76
    27779,-33.3258016666667,115.641201666667,19,416.45
    27779,-33.3260861111111,115.641242777778,20,448.22
    27779,-33.3262483333333,115.641245555556,21,466.21
    27779,-33.3264027777778,115.641217777778,22,483.53
    27779,-33.3266022222222,115.64116,23,506.29
    27779,-33.3267394444444,115.641115555556,24,522.06
    27779,-33.3271016666667,115.640994444444,25,563.78
    27779,-33.32748,115.640953888889,26,605.9
    27779,-33.3278433333333,115.640965,27,646.2
    27779,-33.3278988888889,115.640971666667,28,652.39'

    echo 
    $string;
    ?>
    Allerdings erzeugen die Leerzeilen (Sie // zweite Zeile) einen Fehler, siehe Ausgabe:


    var points = [ new google.maps.LatLng(, ) , new google.maps.LatLng(-33.3240789844364, 115.638325287067) , new google.maps.LatLng(-33.3240755555556, 115.638360555556) , new google.maps.LatLng(-33.3240722222222, 115.638396666667) , new google.maps.LatLng(-33.3240783333333, 115.638419444444) , new google.maps.LatLng(-33.3246238888889, 115.638753333333) , new google.maps.LatLng(-33.3246716666667, 115.638813888889) , new google.maps.LatLng(-33.3247216666667, 115.638857777778) , new google.maps.LatLng(-33.3247783333333, 115.638908333333) , new google.maps.LatLng(-33.3248188888889, 115.638933333333) , new google.maps.LatLng(-33.3248483333333, 115.638941666667) , new google.maps.LatLng(-33.3248366666667, 115.63901) , new google.maps.LatLng(-33.3246905555556, 115.639496666667) , new google.maps.LatLng(-33.3244577777778, 115.639959444444) , new google.maps.LatLng(-33.3243933333333, 115.640034444444) , new google.maps.LatLng(-33.3247722222222, 115.64049) , new google.maps.LatLng(-33.3250116666667, 115.640761666667) , new google.maps.LatLng(-33.3252088888889, 115.640923888889) , new google.maps.LatLng(-33.3254516666667, 115.641070555556) , new google.maps.LatLng(-33.3258016666667, 115.641201666667) , new google.maps.LatLng(-33.3260861111111, 115.641242777778) , new google.maps.LatLng(-33.3262483333333, 115.641245555556) , new google.maps.LatLng(-33.3264027777778, 115.641217777778) , new google.maps.LatLng(-33.3266022222222, 115.64116) , new google.maps.LatLng(-33.3267394444444, 115.641115555556) , new google.maps.LatLng(-33.3271016666667, 115.640994444444) , new google.maps.LatLng(-33.32748, 115.640953888889) , new google.maps.LatLng(-33.3278433333333, 115.640965) , new google.maps.LatLng(-33.3278988888889, 115.640971666667) , new google.maps.LatLng(, ) , new google.maps.LatLng(, ) ];


    Jede Leerzeile in der myShapes.php wirft also ein new google.maps.LatLng(, )

    Nun habe ich schon versucht, die Leerzeilen anhand str_replace(CHR(10) sowie CHR(13) zu entfernen, aber ohne Ergebnis.

    Hat jemand einen Tip, wie ich dennoch oben genannte Datei myShapes.php erzeugen kann, und dabei die Leerzeilen später beim Import heraus filtere?

    Danke im Voraus
    Ghostrider

  • #2
    Zitat von Ghostrider28 Beitrag anzeigen
    Nun habe ich schon versucht, die Leerzeilen anhand str_replace(CHR(10) sowie CHR(13) zu entfernen, aber ohne Ergebnis.
    CHR ist für ASCII-Code und wenn ich mir die ASCII-Tabelle ansehe, dann blicke ich da erst einmal nicht durch und weiß nicht so richtig, ob Du das erreichst, was Du vorhast. Nehme doch statt str_replace einfach preg_replace, sollte doch einfacher sein.

    Kommentar


    • #3
      Spielt das in diesem Zusammenhang überhaupt eine Rolle, ob ich str_replace oder preg_replace verwende?

      Kommentar


      • #4
        Zitat von Ghostrider28 Beitrag anzeigen
        Allerdings erzeugen die Leerzeilen (Sie // zweite Zeile) einen Fehler, siehe Ausgabe:
        Wenn ich ehrlich bin, ich verstehe sowieso nichts, soll heißen, was soll in (Sie // zweite Zeile) zu sehen sein und was soll mit str_replace entfernt werden?

        Nur mit str_replace(CHR(10) und CHR(13) kannst Du einzelne Zeichen entfernen und keine Zeilen. Doch welche Zeichen möchtest Du woraus entfernen? Mit 10 und 13 \n\r bzw. LF und CR für Zeilenumbruch und Wagenrücklauf. Und wofür, damit die letzte Ziffer der vorausgehenden Zeile mit der ersten Ziffer der nächsten Zeile verbunden wird? Wenn hingegen ganze Zeilen entfernt werden sollen, dann schreib einen passenden Ausdruck als Muster und verwende preg_replace.
        Zuletzt geändert von Melewo; 09.05.2013, 01:16.

        Kommentar


        • #5
          er will einfach den zeilenumbruch weg haben damit sein anderes script einen langen string baut und das script nicht bei einer neuen zeile die schleife von vorne anfängt.
          Gruß
          Uzu

          private Homepage

          Kommentar


          • #6
            Dann sollte er ein vernünftiges Datenobjekt (JSON) bauen und die Schleife in JavaScript realisieren und nicht in PHP. Lass nicht den Berg zum Propheten kommen, sondern schick den Prophet zum Berg.

            PHP-Code:
            $points = array();

            foreach (
            $shape->points() as $point) {
                
            $points[] = array('lat' => $point->lat'lng' => $point->lng);

            PHP-Code:
            var points = <?php echo json_encode($points); ?>;
            var googlePoints = [];

            for (var point in points) {
                googlePoints.push(new google.maps.LatLng(point.lat, point.lng));
            }
            Zuletzt geändert von h3ll; 09.05.2013, 09:06.

            Kommentar


            • #7
              Habe mir mal von Google ein funktionierendes Beispiel für Linien geborgt. Mit dem was da bei var points steht, da erhalte ich keine Linie, auch nicht wenn ich die leeren new google.maps.LatLng(, ) entferne. Nun ja, da müsste man sich wohl erst einmal richtig einarbeiten, um das besser zu verstehen, doch danach ist mir auch nicht gerade zumute. So funktioniert es zumindest.

              HTML-Code:
              <!DOCTYPE html>
              <html>
                <head>
                  <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
                  <meta charset="utf-8">
                  <title>Simple Polylines</title>
                  <link href="https://developers.google.com/maps/documentation/javascript/examples/default.css" rel="stylesheet">
                  <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
                  <script>
              function initialize() {
                var myLatLng = new google.maps.LatLng(0, -180);
                var mapOptions = {
                  zoom: 3,
                  center: myLatLng,
                  mapTypeId: google.maps.MapTypeId.TERRAIN
                };
              
                var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
              
                var flightPlanCoordinates = [
                    new google.maps.LatLng(37.772323, -122.214897),
                    new google.maps.LatLng(21.291982, -157.821856),
                    new google.maps.LatLng(-18.142599, 178.431),
                    new google.maps.LatLng(-27.46758, 153.027892)
                ];
                var flightPath = new google.maps.Polyline({
                  path: flightPlanCoordinates,
                  strokeColor: '#FF0000',
                  strokeOpacity: 1.0,
                  strokeWeight: 2
                });
              
                flightPath.setMap(map);
              }
              
              google.maps.event.addDomListener(window, 'load', initialize);
              
                  </script>
                </head>
                <body>
                  <div id="map-canvas"></div>
                  <!-- Quelle: https://developers.google.com/maps/documentation/javascript/examples/polyline-simple?hl=de -->
                </body>
              </html>

              Kommentar


              • #8
                Habe es halbwegs begriffen, die Strecke war nur zu kurz, um die bei der Zoomstufe zu erkennen, doch jetzt funktioniert es auch mit diesen Werten.

                HTML-Code:
                <!DOCTYPE html>
                <html>
                  <head>
                    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
                    <meta charset="utf-8">
                    <title>Simple Polylines</title>
                    <link href="https://developers.google.com/maps/documentation/javascript/examples/default.css" rel="stylesheet">
                    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
                    <script>
                function initialize() {
                  var myLatLng = new google.maps.LatLng(-33.3240789844364, 115.638325287067);
                  var mapOptions = {
                    zoom: 16,
                    center: myLatLng,
                    mapTypeId: google.maps.MapTypeId.TERRAIN 
                  };
                
                  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
                
                  var flightPlanCoordinates = [
                  
                    new google.maps.LatLng(-33.3240789844364, 115.638325287067),
                    new google.maps.LatLng(-33.3240755555556, 115.638360555556),
                    new google.maps.LatLng(-33.3240722222222, 115.638396666667),
                    new google.maps.LatLng(-33.3240783333333, 115.638419444444),
                    new google.maps.LatLng(-33.3246238888889, 115.638753333333),
                    new google.maps.LatLng(-33.3246716666667, 115.638813888889),
                    new google.maps.LatLng(-33.3247216666667, 115.638857777778),
                    new google.maps.LatLng(-33.3247783333333, 115.638908333333),
                    new google.maps.LatLng(-33.3248188888889, 115.638933333333),
                    new google.maps.LatLng(-33.3248483333333, 115.638941666667),
                    new google.maps.LatLng(-33.3248366666667, 115.63901),
                    new google.maps.LatLng(-33.3246905555556, 115.639496666667),
                    new google.maps.LatLng(-33.3244577777778, 115.639959444444),
                    new google.maps.LatLng(-33.3243933333333, 115.640034444444),
                    new google.maps.LatLng(-33.3247722222222, 115.64049),
                    new google.maps.LatLng(-33.3250116666667, 115.640761666667),
                    new google.maps.LatLng(-33.3252088888889, 115.640923888889),
                    new google.maps.LatLng(-33.3254516666667, 115.641070555556),
                    new google.maps.LatLng(-33.3258016666667, 115.641201666667),
                    new google.maps.LatLng(-33.3260861111111, 115.641242777778),
                    new google.maps.LatLng(-33.3262483333333, 115.641245555556),
                    new google.maps.LatLng(-33.3264027777778, 115.641217777778),
                    new google.maps.LatLng(-33.3266022222222, 115.64116),
                    new google.maps.LatLng(-33.3267394444444, 115.641115555556),
                    new google.maps.LatLng(-33.3271016666667, 115.640994444444),
                    new google.maps.LatLng(-33.32748, 115.640953888889),
                    new google.maps.LatLng(-33.3278433333333, 115.640965),
                    new google.maps.LatLng(-33.3278988888889, 115.640971666667) 
                  ];
                  var flightPath = new google.maps.Polyline({
                    path: flightPlanCoordinates,
                    strokeColor: '#FF0000',
                    strokeOpacity: 1.0,
                    strokeWeight: 2
                  });
                
                  flightPath.setMap(map);
                }
                
                google.maps.event.addDomListener(window, 'load', initialize);
                
                    </script>
                  </head>
                  <body>
                    <div id="map-canvas"></div>
                    <!-- Quelle: https://developers.google.com/maps/documentation/javascript/examples/polyline-simple?hl=de -->
                  </body>
                </html>

                Kommentar


                • #9
                  Ich nehme mal an, dass die Daten aus dieser Quelle stammen:

                  http://www.phpriot.com/articles/redu...les/shapes.txt

                  Die kannst Du entweder direkt einlesen, wie im Beispiel weiter unten oder aber Du gibst die 5 Dollar für das Zip-Archiv aus, um dann alles komplett zu haben. Oder hast du da alle Dateien auch so gefunden?

                  Page 5: A Working Example Using Google Maps - Reducing a Map Path Using Douglas-Peucker Algorithm - PHP articles, tutorials and screencasts - PHP 5, MySQL, PostgreSQL, AJAX, Web 2.0

                  Leichter wäre die Antwort gefallen, wenn Du gleich geschrieben hättest, wo Code und Daten kopiert wurden.
                  Soll nur ein Beispiel sein, wie es zur Not auch ginge:

                  PHP-Code:
                  <!DOCTYPE html>
                  <html>
                    <head>
                      <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
                      <meta charset="utf-8">
                      <title>Simple Polylines</title>
                      <link href="https://developers.google.com/maps/documentation/javascript/examples/default.css" rel="stylesheet">
                      <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&amp;sensor=false"></script>
                      <script>

                  var flightPlanCoordinates = [
                  <?php

                      $file 
                  "shapes.txt";
                      
                  $i 0;

                      if ((
                  $handle fopen($file"r")) !== false) {

                          while ((
                  $data fgetcsv($handle0",")) !== false) {

                              if (
                  $i != 0) {
                                  echo 
                  "\tnew google.maps.LatLng(".htmlspecialchars($data[1]).",".htmlspecialchars($data[2])."),\n";
                              }
                              if (
                  $i == 1) {
                                  
                  $startpunkt $data[1].",".$data[2];
                              }
                              
                  $i++;
                          }
                          
                  fclose($handle);
                      }
                  ?>  ];

                  function initialize() {
                    var myLatLng = new google.maps.LatLng(<?php echo htmlspecialchars($startpunkt?>);
                    var mapOptions = {
                      zoom: 14,
                      center: myLatLng,
                      mapTypeId: google.maps.MapTypeId.TERRAIN
                    };

                    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

                    var flightPath = new google.maps.Polyline({
                      path: flightPlanCoordinates,
                      strokeColor: '#FF0000',
                      strokeOpacity: 1.0,
                      strokeWeight: 2
                    });

                    flightPath.setMap(map);
                  }

                  google.maps.event.addDomListener(window, 'load', initialize);

                      </script>
                    </head>
                    <body>
                      <div id="map-canvas"></div>
                      <!--
                      Quelle HTML und JavaScript:
                      https://developers.google.com/maps/documentation/javascript/examples/polyline-simple?hl=de
                      Quelle shapes.txt:
                      http://www.phpriot.com/articles/reducing-map-path-douglas-peucker-algorithm/files/shapes.txt
                      -->
                    </body>
                  </html>
                  Zuletzt geändert von Melewo; 09.05.2013, 20:16.

                  Kommentar

                  Lädt...
                  X