Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
[OPEN LAYERS] Wczytywanie danych z MySQL
06-02-2012, 05:01 PM (Ten post był ostatnio modyfikowany: 07-02-2012 09:23 AM przez BIMSON.)
Post: #1
[OPEN LAYERS] Wczytywanie danych z MySQL
Witam.
Stworzyłem sobie bazę MySQL w której posiadam dane o zdjęciu tj.
lon, lat, direction, ścieżka dostępu, opis itp. Wraz z formularzem do łatwiejszego wprowadzania

Chce osiągnąć :
1. Na mapie markery z lon lat z bazy,
2. Po kliknięciu na marker otwiera się ścieżka do pliku też z bazy.

Poprosze o przykładowe kody lub jakąś wskazówkę.
Dowiedziałem się że trzeba mieć aplikacje na serwerze która wyśle dane z bazy do klienta, ale na tym moja wiedza sie kończy
Znajdź wszystkie posty użytkownika
Zacytuj ten post w odpowiedzi
07-02-2012, 09:55 AM
Post: #2
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
1) Wystarczy skrypt PHP, który odczyta dane z bazy i wyśle je do aplikacji w formacie JSON (jub xml). Walczyłem z tym tutaj:
http://forum.quantum-gis.pl/thread-645.html

2) Odpowiednio przygotowany plik php podpinasz do mapy.
Kod PHP:
vectorlayer = new OpenLayers.Layer.Vector("nazwa warstwy", {
                    
                    
strategies: [new OpenLayers.Strategy.Fixed()],                
                    
protocol: new OpenLayers.Protocol.HTTP({
            
url"geojson2.php",
                        
format: new OpenLayers.Format.GeoJSON()
                    
                    }),
                                        
// parametry opcjonalne
                    
displayInLayerSwitcherfalse,
                    
minScale3000000,
                    
maxScale50000
                    
                
}); 

3) Klikanie załatwiasz przez OpenLayers.Control.SelectFeature
http://dev.openlayers.org/docs/files/Ope...re-js.html
np:
Kod PHP:
var wybierz = new OpenLayers.Control.SelectFeature(vectorlayer,{
                
                
onSelect: function(f) {
                    
//treść funkcji
            
}
})
            

            
            
map.addControl(wybierz);
            
wybierz.activate(); 
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika
Zacytuj ten post w odpowiedzi
07-02-2012, 01:20 PM
Post: #3
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
Dzięki za odpowiedź ale nie rozumiem kodu geojson.php
Jak go dostosować do mojej bazy? (Mysql)
Znajdź wszystkie posty użytkownika
Zacytuj ten post w odpowiedzi
07-02-2012, 02:26 PM (Ten post był ostatnio modyfikowany: 07-02-2012 02:35 PM przez Odoakr.)
Post: #4
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
W pliku php łączysz się z bazą:
//połaczenie z serweram mysql
Kod PHP:
$polaczenie = @mysql_connect('localhost''uzytkownik''haslo')
or die(
'Brak połączenia z serwerem mysql. Błąd: '.mysql_error());
// połączenie z bazą
$db = @mysql_select_db('nazwa_bazy'$polaczenie)
or die(
'Nie mogę połączyć się z bazą danych. Błąd: '.mysql_error()); 

Przykład połaczenia z:
http://webmade.org/porady/nawiazanie-polaczenia.php

1) Tworzysz zapytanie do bazy danych i je wykonujesz.
Kod PHP:
$query "SELECT gid, fid, ST_X(ST_centroid(geom)) as X, ST_Y(ST_centroid(geom)) as Y FROM XXX";
        
$result pg_query($dbconn$query); 
W powyższym przypadku zapytanie jest do Postrgesa. Do MySQL pewnie będzie się trochę różnić.
Dla My sql:
Kod PHP:
$result mysql_query('SELECT gid, fid, ST_X(ST_centroid(geom)) as X, ST_Y(ST_centroid(geom)) as Y FROM XXX'); 

Jeśli masz X i Y w kolumnie to masz połowę kłopotu za sobą (w moim wypadku, za pomocą funkcji postgis generuje X i Y z geometrii poligonów. W najprostszym wypadku:
Kod PHP:
"SELECT id, fid, X, Y FROM nazwa_tabeli" 

2) konstruujesz obiekt geojson. W zasadzie możesz użyć ten kod. Tu też musisz wymienić funkcje PHP na te odpowiedzialne za obsługę MySQL. pg_fetch_array to mysql_fetch_array, a pg_close to mysql_close

Kod PHP:
// Return route as GeoJSON
   
$geojson = array(
       
'type'      => 'FeatureCollection',
       
'features'  => array()
    ); 
   
    
// Add edges to GeoJSON array
    
while($row=pg_fetch_array($result)) {  
 
       
$feature = array(
          
'type' => 'Feature',
          
'type' => $row[0], //
          
'properties' => array(
             
'gid' => $row[0],
             
'fid' => $row[1]
          ),
          
         
'geometry' => array(
            
'type' => 'Point',
            
'coordinates' => array($row[2], $row[3])
            
            
          
          )
       );
       
       
// Add feature array to feature collection array
       
array_push($geojson['features'], $feature);
    }
 
    
// Close database connection
    
pg_close($dbconn);
 
    
// Return routing result
    //header('Content-type: application/json',true);
    
echo json_encode($geojson); 

3.
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika
Zacytuj ten post w odpowiedzi
07-02-2012, 02:36 PM
Post: #5
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
Moj kod wygląda tak :
Kod:
<?php

$Query = "
SELECT GPSLatitude,GPSLongitude,GPSImgDirection,Path,Opis,Nr_zlecenia,Data_zrobienia,Da​ta_wgrania FROM gps";


$con = mysql_connect("localhost","root","root") or die ('Error connecting to mysql');
mysql_select_db("gis");
$result = mysql_query($Query);

$geojson = array(
       'type'      => 'FeatureCollection',
       'features'  => array()
    );
  
    // Add edges to GeoJSON array
    while($row=mysql_fetch_row($result)) {  

       $feature = array(
          'type' => 'Feature',
          'id' => '$row[5]',
          'properties' => array(
             'gid' => $row[3],
             'fid' => $row[4]
          ),
          
          'geometry' => array(
            'type' => 'Point',
            'coordinates' => '['.$row[0].','.$row[1].']'
            
            
          
          )
       );
      
       // Add feature array to feature collection array
       array_push($geojson['features'], $feature);
    }

    // Close database connection
    mysql_close($con);

    // Return routing result
    //header('Content-type: application/json',true);
    echo json_encode($geojson);
?>

I ostatnie echo wywala mi :
Kod:
{"type":"FeatureCollection","features":[]}

Ja mam kolumny w bazie tak że w osobnej kolumnie jest lon i osobno lat
Znajdź wszystkie posty użytkownika
Zacytuj ten post w odpowiedzi
07-02-2012, 02:51 PM (Ten post był ostatnio modyfikowany: 07-02-2012 02:52 PM przez Odoakr.)
Post: #6
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
Nie łączysz się z bazą.

masz:
mysql_select_db("gis");

powinno być:
$ db = mysql_select_db("gis", $con);
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika
Zacytuj ten post w odpowiedzi
07-02-2012, 05:10 PM (Ten post był ostatnio modyfikowany: 08-02-2012 10:10 AM przez BIMSON.)
Post: #7
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
(07-02-2012 02:51 PM)Odoakr napisał(a):  Nie łączysz się z bazą.

masz:
mysql_select_db("gis");

powinno być:
$ db = mysql_select_db("gis", $con);

Zmieniłem i bez zmian.

Ok Doszedłem do tego żeby tworzyło. Teraz w wyniku otwymuje:
Kod:
{"type":"FeatureCollection","features":[{"type":"Feature","nr_zlecenia":"nr_zlecenia_domyslny","GPSImgDirection":"45","opis":"opis_domyslny","path":"foto/2012-02-06_P1000023.JPG","geometry":{"type":"Point","coordinates":"[50.928019444444,21.369808333333]"}},{"type":"Feature","nr_zlecenia":"nr_zlecenia_domyslny","GPSImgDirection":"315","opis":"opis_domyslny","path":"foto/2012-02-06_P1000022.JPG","geometry":{"type":"Point","coordinates":"[50.928019444444,21.369808333333]"}}]}

Jak dodaje za pomocą kodu :
Kod:
function init() {
    
    var epsg4326 = new OpenLayers.Projection("EPSG:4326");
        
    var map = new OpenLayers.Map({
    div: "map",  allOverlays: true,
    layers: [
            new OpenLayers.Layer.Google(
        "Google Satellite",
        {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22,visibility: false}
    ),
        
        new OpenLayers.Layer.Google(
        "Google Physical",
        {type: google.maps.MapTypeId.TERRAIN, visibility: false}
    ),
        new OpenLayers.Layer.Google(
        "Google Streets", // the default
        {numZoomLevels: 20}
    ),
        new OpenLayers.Layer.Google(
        "Google Hybrid",
        {type: google.maps.MapTypeId.HYBRID, numZoomLevels: 22, visibility: false}
    ),
        [b]new OpenLayers.Layer.Vector("geojson", {
                    
                    strategies: [new OpenLayers.Strategy.Fixed()],                
                    protocol: new OpenLayers.Protocol.HTTP({
            url: "./new.php",
                        format: new OpenLayers.Format.GeoJSON()
                    
                    }),
                                        // parametry opcjonalne
                    displayInLayerSwitcher: true,
                    minScale: 3000000,
                    maxScale: 50000
                    
                })[/b]

    ],
    controls: [
        new OpenLayers.Control.Navigation({
            dragPanOptions: {
                enableKinetic: true
            }
        }),
        new OpenLayers.Control.PanZoom(),
        new OpenLayers.Control.Attribution()
    ],
    center: [0, 0],
    zoom: 3
});
map.addControl(new OpenLayers.Control.LayerSwitcher());

  
    map.setCenter(new OpenLayers.LonLat(10.2, 48.9).transform(
        new OpenLayers.Projection("EPSG:4326"),
        map.getProjectionObject()
    ), 5);
}
To w LayerSwitcher pojawia sie warstwa zaciemniona, zaznaczona ale nie moge jej odchaczyc ani zaznaczyc. Również nie pojawiają sie punkty
Znajdź wszystkie posty użytkownika
Zacytuj ten post w odpowiedzi
08-02-2012, 09:33 AM
Post: #8
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
Masz włączona obsługę błędów w PHP? Nic nie wywala?
Zrób var_dump($result) - jak będzie pusta to wtedy ostatecznie się okaże, że to coś nie tak z połączeniem z bazą...
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika
Zacytuj ten post w odpowiedzi
08-02-2012, 10:13 AM
Post: #9
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
(08-02-2012 09:33 AM)Odoakr napisał(a):  Masz włączona obsługę błędów w PHP? Nic nie wywala?
Zrób var_dump($result) - jak będzie pusta to wtedy ostatecznie się okaże, że to coś nie tak z połączeniem z bazą...
Łaczy sie i wyciąga już dane z bazy. Edytowałem wcześniejszy mój post. Zobacz
Znajdź wszystkie posty użytkownika
Zacytuj ten post w odpowiedzi
08-02-2012, 07:57 PM
Post: #10
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
Usuń minScale i maxScale.
Zaciemnienie jest właśnie powodowane przez to, że skala mapy nie mieści się w przedziale miedzy minScale i maxScale. Jak ustawisz odpowiedni zoom to w LayerSwitcher warstwa się "rozjaśni".

Ta patrzę jeszcze na tego geojsona i tam jest chyba byk w ścieżce do fotki.
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika
Zacytuj ten post w odpowiedzi
Odpowiedz 


Skocz do: