06-02-2012, 17:01,
(Ten post był ostatnio modyfikowany: 07-02-2012, 09:23 {2} przez BIMSON.)
|
|
BIMSON
geofon
|
Liczba postów: 29
6
Dołączył: 13-04-2011
Reputacja:
0
|
|
[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
|
|
07-02-2012, 09:55,
|
|
Odoakr
geoboss
|
Liczba postów: 264
36
Dołączył: 13-11-2009
Reputacja:
1
|
|
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 displayInLayerSwitcher: false, minScale: 3000000, maxScale: 50000 });
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();
|
|
07-02-2012, 13:20,
|
|
BIMSON
geofon
|
Liczba postów: 29
6
Dołączył: 13-04-2011
Reputacja:
0
|
|
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
Dzięki za odpowiedź ale nie rozumiem kodu geojson.php
Jak go dostosować do mojej bazy? (Mysql)
|
|
07-02-2012, 14:26,
(Ten post był ostatnio modyfikowany: 07-02-2012, 14:35 {2} przez Odoakr.)
|
|
Odoakr
geoboss
|
Liczba postów: 264
36
Dołączył: 13-11-2009
Reputacja:
1
|
|
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.
|
|
07-02-2012, 14:36,
|
|
BIMSON
geofon
|
Liczba postów: 29
6
Dołączył: 13-04-2011
Reputacja:
0
|
|
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,Data_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
|
|
07-02-2012, 14:51,
(Ten post był ostatnio modyfikowany: 07-02-2012, 14:52 {2} przez Odoakr.)
|
|
Odoakr
geoboss
|
Liczba postów: 264
36
Dołączył: 13-11-2009
Reputacja:
1
|
|
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);
|
|
07-02-2012, 17:10,
(Ten post był ostatnio modyfikowany: 08-02-2012, 10:10 {2} przez BIMSON.)
|
|
BIMSON
geofon
|
Liczba postów: 29
6
Dołączył: 13-04-2011
Reputacja:
0
|
|
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
(07-02-2012, 14:51)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
|
|
08-02-2012, 09:33,
|
|
Odoakr
geoboss
|
Liczba postów: 264
36
Dołączył: 13-11-2009
Reputacja:
1
|
|
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ą...
|
|
08-02-2012, 10:13,
|
|
BIMSON
geofon
|
Liczba postów: 29
6
Dołączył: 13-04-2011
Reputacja:
0
|
|
RE: [OPEN LAYERS] Wczytywanie danych z MySQL
(08-02-2012, 09:33)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
|
|
08-02-2012, 19:57,
|
|
Odoakr
geoboss
|
Liczba postów: 264
36
Dołączył: 13-11-2009
Reputacja:
1
|
|
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.
|
|
|