|
OutdoorGearHead
Anmeldungsdatum: Okt. 29, 2010
Beiträge: 6
|

23. Juli 2012 10:51
Hallo liebe Community, ich habe folgende Frage, ich bin gerade dabei eine Prototypische Umsetzung eines WebGIS umzusetzen. So nun habe ich folgenden Aufbau bisher. - Postgre 8.4 DB + PostGIS 1.5
- Tomcat 6
- GeoServer
- OpenLayers So ich habe die Datenbank mit den Geodaten gefüllt, dem Tomcat aufgesetzt und den Geoserver zum laufen gebracht und im GeoServer habe ich die WMS-Dienste generiert. Jetzt stellt sich mit folgende Fragestellung. Zwar lassen sich über die WMS-Dienste einige Informationen abrufen, weil ich jedoch in der DB nicht sämtliche Informationen in einer großen Tabelle verwalte und weiter Informationen zu den einzelnen Geodaten in an anderen Tabellen habe, weiß ich nicht wie ich diese Abfragen kann (wenn alle Daten in einer Tabelle wären könnte ich ja WMS-Filter nutzen). Da sich in den anderen Tabellen ja keinerlei Geodaten befinden, lassen sich keinerlei WMS-Dienste generiern. Im Grunde müsste ich nun die zusätzlichen Informationen mit SQL-Abfragen auf Basis der WMS-Ergebnisse abfragen können. Nun weiß ich jedoch nicht, an welchem Punkt ich einsteigen muss. Lassen sich die Abfragen bereits im GeoServer definieren, oder müssen die SQL-Abfragen bei OpenLayers angebracht werden? Weil wenn ja, dann müsste wüsste ich, dass ich als nächstes die Webanwendung mit OpenLayers generieren müsste. Ich hoffe hier hat jm. Erfahrung auf dem Gebiet und kann mir helfen, oder vllt. ein Forum empfehlen, in welchem mir geholfen werden kann.
|
|
dr.gonzo
Anmeldungsdatum: Okt. 17, 2004
Beiträge: 240
|

23. Juli 2012 16:52
Hallo OutdoorGearHead, das ist schon sehr speziell  Hab ich das richtig verstanden: Du möchtest zusätzlich zu einer getMap-Anfrage an den WMS (welche nur eine Bildatei zurückliefert) Daten aus einer DB erhalten? Hängen die Objekte, die angefragt werden sollen, nur vom Extent ab? Mit dem Geoserver kenne ich mich allerdings nicht aus, mit OGC webservices, Geodaten und Co. ein wenig... Evtl. versuchst Du es aber auch gleich hier: http://gis.stackexchange.com/ Grüße,
Jörg
|
|
OutdoorGearHead
(Themenstarter)
Anmeldungsdatum: Okt. 29, 2010
Beiträge: 6
|

1. August 2012 23:14
Also ich habe mich da jetzt noch mal tiefer in die Materie eingearbeitet...Die zusätzlichen Informationen welche abgefragt werden sollen sollen, sind nicht vom Extent abhängig. Hier mal mein Code vllt. wird es damit klarer. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de-de">
<head>
<title>OpenLayers Demo</title>
<style type="text/css">
html, body, #map {
width: 100%;
height: 100%;
margin: 0;
}
</style>
<script src="./OpenLayers-2.12/OpenLayers.js"></script>
<script>
function init(){
//Generiere Kartenobjekt
var map = new OpenLayers.Map("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar({zoomStopHeight: 6}),
//new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.ScaleLine({bottomOutUnits: "", bottomInUnits: ""}),
new OpenLayers.Control.Attribution(),
new OpenLayers.Control.KeyboardDefaults(),
],
projection: new OpenLayers.Projection("EPSG:900913"),
units: "m",
maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
maxResolution: 156543.0399
});
//OSM Layer
var osm = new OpenLayers.Layer.OSM("osm");
osm.setIsBaseLayer(true);
//Haltestellen Layer
var haltestellen = new OpenLayers.Layer.WMS("Haltestellen", "http://localhost:8080/geoserver/cite/wms", {
layers : "cite:Haltestellen",
transparent: "true",
format : " image/png "
}, {visibility: true});
haltestellen.setIsBaseLayer(false);
//Segmente Layer
var segmente = new OpenLayers.Layer.WMS("Segmente", "http://localhost:8080/geoserver/cite/wms", {
layers : "cite:Segmente",
transparent: "true",
format : " image/png "
}, {visibility: true});
segmente.setIsBaseLayer(false);
//Definiion einen einen Layers + Style-Angaben
var select = new OpenLayers.Layer.Vector("Selection", { displayInLayerSwitcher: false, styleMap:
new OpenLayers.Style({pointRadius: 0})
});
//Neues Auswahl-Werkzeug zur Haltestellenauswahl
var controlHS = new OpenLayers.Control.GetFeature({
protocol: OpenLayers.Protocol.WFS.fromWMSLayer(haltestellen),
box: true,
click: true
});
//Einstellunngen des Auswahl-Werkzeugs "controlHS"
controlHS.events.register("featureselected", this, function(e) {
//Hole WMS-Informationen
select.addFeatures([e.feature]);
if (this.popup && map && map.popups && map.popups.length > 0) {
window.clearTimeout(this.autodestroy);
this.popup.destroy();
this.popup = null;
}
var anchor = {
size: new OpenLayers.Size(0, 0),
offset: new OpenLayers.Pixel(0, 0)
}
//Hole x/y Koordinaten für Popupposition
var window_position = new OpenLayers.LonLat(e.feature.geometry.x, e.feature.geometry.y);
//Generiere Popup
this.popup = new OpenLayers.Popup.FramedCloud("ol-info-popup", window_position, null, '<div class="map-kurzinfo-popup"><span><h4>'+e.feature.data.bez+'</h4></span></div>', anchor, true);
//Bestimme Fenstergröße Automatisch
this.popup.autoSize = true;
//Füge Popup zur Karte
map.addPopup(this.popup, true);
});
//Füge Abfragewerkzeug zur Karte + Aktivierung
map.addControl(controlHS);
controlHS.activate();
//Layer zu Karte hinzufügen
map.addLayers([osm, segmente, haltestellen, select]);
//Kartenansicht auf Stadtzentrum zentrieren
var proj = new OpenLayers.Projection("EPSG:4326");
var point = new OpenLayers.LonLat(13.261, 53.557);
map.setCenter(point.transform(proj, map.getProjectionObject()), 14);
//Zoomstufen begrenzen
map.events.register('zoomend', this, function (event) {
var x = map.getZoom();
if( x > 16)
{
alert("Sie haben die Maximale Zoomstufe erreicht");
map.zoomTo(16);
}
else if( x < 12)
{
alert("Sie haben die Minimale Zoomstufe erreicht");
map.zoomTo(12);
}
});
}
</script>
</head>
<body onload="init();">
<div id="map"></div>
</body>
</html>
|
Also wenn ich das richtig verstanden hab, dann werden die WMS-Informationen an dieser: | select.addFeatures([e.feature]);
|
abgefragt. Was ich nun möchte wäre folgendes, ich würde gerne mit diesem Datensatz z.B. (e.feature.data.TEST) eine SQL-Abfrage starten, welche mir zusätzliche Daten liefert. Ich dachte an eine Realisierung mit PHP+AJAX. Nur habe ich inzwischen feststellen können, dass sich unter Tomcat nicht so einfach PHP-Skript einbinden lassen. Ich habe es bereits mit der JavaBridge versucht, jedoch habe ich es nicht hinbekommen die psql extension funktionsfähig einzubinden. Oder sollte man das besser via JDBC realisieren? Ich habe damit jedoch noch keinerlei Erfahrungen gemacht.
|