GetFeatureInfo - Popup (Openlayersapplikation med HTML)

Permalänk
Medlem

GetFeatureInfo - Popup (Openlayersapplikation med HTML)

Hej,

Är väldigt ny inom detta område och jag håller på att göra en Openlayersapplikation med en HTML page.
Jag använder mig utan geoserver för att hantera och hämta olika lager med byggnader, vägkonturer med mera. Sedan använder jag mig av visual studio 2010 med visual basic för att skriva koden i en HTML-Page.

Mitt problem i denna uppgift är att få in bilder på byggnader i en "getfeatureinfo-popup".

Så här lyder den exakta meningen från uppgiften: " Använd BID-numret och ta ut text och/eller bild från inventeringen baserat på Bid-numret i popupen.
Texten och bilderna finns i labfoldern.
"

En specifik byggnad ska alltså få en specifik bild.

Koden jag har använt mig av finns nedanför.

Tack på förhand!

Mvh
Alexander

Min kod:********************************************
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Gammelstad, Kyrkbyn</title>
<script src="http://www.openlayers.org/api/OpenLayers.js" type="text/javascript"></script>
<script src="http://maps.google.com/maps/api/js?v=3&sensor=false" type="text/javascript"></script>

<style type="text/css">

#mapContainer
{
position:absolute; /*Elementets position i förhållande till andra element*/
padding: 10px; /*Elementets avstånd från andra element (10 px åt alla håll)*/
width: 600px; /*Elementets brdd*/
height: 500px; /*Elementets höjd*/
border: 1px solid black; /*Ram runt elementet*/
}
</style>

<script type="text/javascript">

OpenLayers.ProxyHost = "/Proxy/proxy.aspx?url=";
/*
OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
defaultHandlerOptions: {
'single': true,
'double': false,
'pixelTolerance': 0,
'stopSingle': false,
'stopDouble': false
},

initialize: function (options) {
this.handlerOptions = OpenLayers.Util.extend(
{}, this.defaultHandlerOptions
);
OpenLayers.Control.prototype.initialize.apply(
this, arguments
);
this.handler = new OpenLayers.Handler.Click(
this, {
'click': this.trigger
}, this.handlerOptions
);
},
trigger: function (e) {
var lonlat = map.getLonLatFromPixel(e.xy);
alert("You clicked near " + lonlat.lat + " N, " +
+lonlat.lon + " E");
}
});
var map;
var info;
*/
function initMap() {

map = new OpenLayers.Map("mapContainer");
var gmap = new OpenLayers.Layer.Google("Google Map");

var osm = new OpenLayers.Layer.OSM();

map.addLayer(osm);
map.addLayer(gmap);

addWMSservice();

addAdditionalMapControls();

map.setCenter(new OpenLayers.LonLat(2452163.81898, 9780548.08282), 10);

/* GetFeatureInfo-pop upen*/

info = new OpenLayers.Control.WMSGetFeatureInfo({
url: 'http://localhost:8115/geoserver/wms',
title: 'Identify features by clicking',
queryVisible: true,
eventListeners: {
getfeatureinfo: function (event) {
map.addPopup(new OpenLayers.Popup.FramedCloud(
"chicken",
map.getLonLatFromPixel(event.xy),
null,
event.text,
null,
true
));
}
}
});
map.addControl(info);
info.activate();

var click = new OpenLayers.Control.Click();
map.addControl(click);
click.activate();

}

function addAdditionalMapControls() {

map.addControl(new OpenLayers.Control.MousePosition());

map.addControl(new OpenLayers.Control.LayerSwitcher());

var drawLayer = new OpenLayers.Layer.Vector("Ritade objekt");
map.addLayer(drawLayer);
map.addControl(new OpenLayers.Control.EditingToolbar(drawLayer))
}

function addWMSservice() {

var universitet = new OpenLayers.Layer.WMS(
"Byggnader i Kyrkbyn", "http://localhost:8115/geoserver/wms",
{
layers: 'Gstad:Byggnader_kyrkbyn',
format: "image/png",
tiled: 'true',
transparent: true
},
{
buffer: 0,
displayOutsideMaxExtent: true
}
);
var universitet1 = new OpenLayers.Layer.WMS(
"Fastighetsgränser", "http://localhost:8115/geoserver/wms",
{
layers: 'Gstad:Fastighetsgranser',
format: "image/png",
tiled: 'true',
transparent: true
},
{
buffer: 0,
displayOutsideMaxExtent: true
}
);

var universitet2 = new OpenLayers.Layer.WMS(
"Vägkonturer", "http://localhost:8115/geoserver/wms",
{
layers: 'Gstad:vagkontur',
format: "image/png",
tiled: 'true',
transparent: true
},
{
buffer: 0,
displayOutsideMaxExtent: true
}
);

map.addLayer(universitet);
map.addLayer(universitet1);
map.addLayer(universitet2);

}

</script>

</head>
<body onload="initMap();">

<div id="mapContainer"></div>

</body>
</html>
*****************************************************************

Permalänk
Medlem

Ingen som har någon idé på hur jag ska kunna lösa detta?

Permalänk
Medlem

heej, jag sitter med exakt samma problem just nu! (skulle tippa att vi går samma kurs på ltu kanske?)
hur går det för dig, har du lyckats komma någon vart?

Permalänk
Medlem
Skrivet av gogoma:

heej, jag sitter med exakt samma problem just nu! (skulle tippa att vi går samma kurs på ltu kanske?)
hur går det för dig, har du lyckats komma någon vart?

Jajemen jag studerar på LTU och har löst problemet.
Man ska använda sig av en content.ftl fil som ska finnas i geoserver(kommer ej ihåg exakt var den låg). I den här filen ska man ändra/skriva kod så att den hämtar bilderna från en specifik plats, t.ex i geoservers WWW mapp.

Här har du en bra länk som jag använde mig av för att kunna slutföra uppgiften: http://docs.geoserver.org/latest/en/user/tutorials/GetFeature...

Permalänk
Medlem

härligt, tack för ditt svar!! då var jag inne på rätt spår!
har kikat på den länken också och läst tidigare men tycker de är förjäkla svårt att hänga med på allt som står där.. har ingen som helst tidigare erfarenhet av programmering tyvärr..
mitt problem nu är att jag inte kan hitta någon content.ftl fil någonstans i geoserver!? är det kanske meningen att jag ska skapa den själv? hur gjorde du? fanns det redan en content.ftl fil där för dig och du bara ändrade i den? eller skapade du en sån fil själv?

Permalänk
Medlem

det löste sig, skapade en egen content.ftl
får fram allt så att det ser bra ut, men bilden blir bara en liten ruta med ett kryss i.. hur gjorde du egentligen med bilderna, hur kan man veta vilken bild som hör till vilket hus!? bilderna heter ju inte tex B304, B305 osv vilket jag först trodde att dom skulle göra..
du vore min hjälte om du hade lust att förklara hur du fick upp rätt bild/text till rätt hus när man klickar!

Permalänk
Medlem
Skrivet av gogoma:

det löste sig, skapade en egen content.ftl
får fram allt så att det ser bra ut, men bilden blir bara en liten ruta med ett kryss i.. hur gjorde du egentligen med bilderna, hur kan man veta vilken bild som hör till vilket hus!? bilderna heter ju inte tex B304, B305 osv vilket jag först trodde att dom skulle göra..
du vore min hjälte om du hade lust att förklara hur du fick upp rätt bild/text till rätt hus när man klickar!

Ok. Med hjälp av denna kod i content.ftl filen kunde jag ta ut bilderna med hjälp av fotonummret på varje bild.
<ul>
<#list features as feature>
<li><b>Point of interest, "${feature.NAME.value}"</b>: <br/>
<img src="http://localhost:8080/geoserver/popup_map/${feature.THUMBNAIL.value}"/>
</li>
</#list>
</ul>

Varje hus har ett fotonummer och varje bild har ett fotonummer. Så jag använde detta nummer för att koppla ihop ett specifikt hus med en specifik bild.
Glöm inte att länka dit bilderna ligger och ha en ändelse i slutet på länken, t.ex .jpg eller vad det nu är för format på bilderna.

Permalänk
Medlem

Hej, sitter med samma uppgift. Hur kopplar jag ihop hus med bild i .ftl-filen?

Mycket tacksam för svar

Permalänk
Medlem

Tack för hjälpen MrDumle!

bergan23 – i attributtabellen till husen finns fotonummer under FOTO, det är samma nummer som bilderna i inventeringsmappen är döpta till. Jag använde följande rad i ftl-filen för att koppla ihop hus med bild:
<img src="http://localhost:8123/geoserver/www/fotoinv/${feature.FOTO.value}.jpg"/>
Min mapp där bilderna låg hette fotoinv och den var placerad i mappen www. Du kan nog lägga de vart du vill tror jag, så länge du bara ändrar i koden så att det stå rätt namn på mapparna där de ligger!