[Commits] r215 - in sandbox/opengeo/drake/trunk/apps: . geoexplorer
commits at geoext.org
commits at geoext.org
Tue Mar 10 14:29:03 CET 2009
Author: dwins
Date: 2009-03-10 14:29:03 +0100 (Tue, 10 Mar 2009)
New Revision: 215
Added:
sandbox/opengeo/drake/trunk/apps/geoexplorer/
Removed:
sandbox/opengeo/drake/trunk/apps/geoexplorer/AddLayerWindow.js
sandbox/opengeo/drake/trunk/apps/geoexplorer/CustomFilterBuilder.js
sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerNodeUI.js
sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerTree.js
sandbox/opengeo/drake/trunk/apps/geoexplorer/MaxFeaturesWarning.js
sandbox/opengeo/drake/trunk/apps/geoexplorer/built.html
sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstore.html
sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstorewithmap.html
Modified:
sandbox/opengeo/drake/trunk/apps/geoexplorer/build.cfg
sandbox/opengeo/drake/trunk/apps/geoexplorer/index.html
Log:
Skeletal application for GeoExplorer project
Copied: sandbox/opengeo/drake/trunk/apps/geoexplorer (from rev 214, sandbox/opengeo/drake/trunk/apps/drake)
Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/AddLayerWindow.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/AddLayerWindow.js 2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/AddLayerWindow.js 2009-03-10 13:29:03 UTC (rev 215)
@@ -1,69 +0,0 @@
-/**
- * Copyright (c) 2008 The Open Planning Project
- */
-Ext.namespace("GeoExt.drake");
-
-GeoExt.drake.AddLayerWindow = Ext.extend(Ext.Window, {
-
- catalogGrid: null,
- wmsUrl: null,
- width: 550,
- height: 500,
- modal: true,
- layout: "border",
- title: "Available Layers",
-
- initComponent: function(){
- this.catalogGrid = new Ext.grid.GridPanel({
- store: this.capsStore,
- columns: [
- {header: 'Name', dataIndex: 'name', sortable: true, width: 100},
- {header: 'Title', dataIndex: 'title', sortable: true, width: 150},
- {id: 'abstract', header: 'Abstract', dataIndex: 'abstract', sortable: true},
- {header: 'Namespace', dataIndex: 'prefix', sortable: true, hidden: true,
- renderer: function(x){return x ? x : "(None)"; }}
- ],
- loadMask: {msg: 'Loading catalog information...'},
- region: "center",
- view: new Ext.grid.GroupingView(),
- autoExpandColumn: 'abstract'
- });
-
- this.catalogGrid.store.load();
-
- this.items = this.catalogGrid;
-
- this.buttons = [
- new Ext.Button({
- text: "Add",
- handler: function(){
- var selections = this.catalogGrid.getSelectionModel().getSelections();
-
- var layers = [];
-
- for (var index = 0; index < selections.length; index++) {
- layers.push(selections[index]);
- }
-
- if (layers.length > 0) {
- this.fireEvent("layerschosen", layers);
- }
- this.close();
- },
- scope: this
- }),
- new Ext.Button({
- text: "Cancel",
- handler: function(){
- this.close();
- },
- scope: this
- })
- ];
-
- this.addEvents("layerschosen");
-
- GeoExt.drake.AddLayerWindow.superclass.initComponent.call(this);
- }
-
-});
Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/CustomFilterBuilder.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/CustomFilterBuilder.js 2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/CustomFilterBuilder.js 2009-03-10 13:29:03 UTC (rev 215)
@@ -1,17 +0,0 @@
-Ext.namespace("GeoExt.drake");
-
-// Quick hack to get a filter builder that looks better.
-GeoExt.drake.CustomFilterBuilder = Ext.extend(GeoExt.FilterBuilder, {
-
- addToToolbar: null,
-
- createToolBar: function() {
- var bar = GeoExt.drake.CustomFilterBuilder.superclass.createToolBar.call(this);
-
- for (var index = 0; index < this.addToToolbar.length; index++) {
- bar.push(this.addToToolbar[index]);
- }
-
- return bar;
- }
-});
Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerNodeUI.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/LayerNodeUI.js 2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerNodeUI.js 2009-03-10 13:29:03 UTC (rev 215)
@@ -1,65 +0,0 @@
-
-Ext.namespace("GeoExt.drake");
-
-GeoExt.drake.LayerNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
-
- render: function(bulkRender){
- var rendered = this.rendered;
-
- GeoExt.drake.LayerNodeUI.superclass.render.call(this, bulkRender);
-
- if(!rendered){
- this.nameCol = Ext.get(this.elNode).insertHtml("beforeEnd", "<div></div>", true);
-
- Ext.get(this.indentNode).appendTo(this.nameCol);
- Ext.get(this.ecNode).appendTo(this.nameCol);
- Ext.get(this.iconNode).appendTo(this.nameCol);
- Ext.get(this.checkbox).appendTo(this.nameCol);
- Ext.get(this.anchor).appendTo(this.nameCol);
-
- this.nameCol.addClass("gx-tree-col");
- this.nameCol.setWidth(250);
-
- var queryHtml = "<div>";
-
- if (this.node.attributes.queryable == true) {
- queryHtml += "<input type='radio' name='" + this.node.ownerTree.id + "-query-radio" + "' value='" + this.node.id + "'></input>";
- } else {
- queryHtml += "n/a"
- }
-
- queryHtml += "</div>";
-
-
- this.queryCol = Ext.get(this.elNode).insertHtml('beforeEnd', queryHtml, true);
-
- // If there's no first item... because of the functionality above, this is
- // equivalent to saying if (this.note.attributes.queryable == true) {...}.
- var div = this.queryCol.first();
- if (div) {
- div.on("click", function(evt, target, parameters){
-
- // Note: target.click() below somehow causes the div's click event
- // to be fired again. In total, then, the user clicking on the radio
- // button would cause the layeractivated event to be fired twice -- we
- // don't want that. To distinguish between the user-generated click and
- // the artificially generated click (i.e., target.click()), we check
- // the browserEvent's "isTrusted" parameter to see which click we're
- // responding to. If "isTrusted" is true, then this event is the original
- // event fired by the browser, and not the one fired by target.click().
- if (evt.browserEvent.isTrusted == true) {
- this.node.ownerTree.fireEvent("layeractivated", this.node.layer);
- target.click();
- }
-
- return true;
- }, this);
- }
-
- this.queryCol.addClass("gx-tree-query-col");
-
- this.clearEl = Ext.get(this.elNode).insertHtml("beforeEnd", "<div class='x-clear'></div>", true);
- }
- }
-
-});
\ No newline at end of file
Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerTree.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/LayerTree.js 2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/LayerTree.js 2009-03-10 13:29:03 UTC (rev 215)
@@ -1,46 +0,0 @@
-
-// TODO: We should probably change this name. This tree is Drake specific.
-GeoExt.tree.LayerTree = Ext.extend(Ext.tree.TreePanel, {
- lines:false,
- borderWidth: Ext.isBorderBox ? 0 : 2, // the combined left/right border for each cell
- cls:'gx-column-tree',
-
- initComponent: function() {
- this.addEvents("layeractivated");
- GeoExt.tree.LayerTree.superclass.initComponent.call(this);
- },
-
- onRender : function(){
- GeoExt.tree.LayerTree.superclass.onRender.apply(this, arguments);
- this.headers = this.body.createChild(
- {cls:'gx-tree-headers'},this.innerCt.dom);
-
- var cols = [{
- header: 'Layer',
- width: 250
- },{
- header: 'Query',
- width: 60
- }];
-
- var c;
- var totalWidth = 0;
-
- for(var i = 0, len = cols.length; i < len; i++){
- c = cols[i];
- totalWidth += c.width;
- this.headers.createChild({
- cls:'gx-tree-hd ' + (c.cls?c.cls+'-hd':''),
- cn: {
- cls:'gx-tree-hd-text',
- html: c.header
- },
- style:'width:'+(c.width-this.borderWidth)+'px;'
- });
- }
- this.headers.createChild({cls:'x-clear'});
- // prevent floats from wrapping when clipped
- this.headers.setWidth(totalWidth);
- this.innerCt.setWidth(totalWidth);
- }
-});
Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/MaxFeaturesWarning.js
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/MaxFeaturesWarning.js 2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/MaxFeaturesWarning.js 2009-03-10 13:29:03 UTC (rev 215)
@@ -1,47 +0,0 @@
-Ext.namespace("GeoExt.drake");
-
-GeoExt.drake.MaxFeaturesWarning = Ext.extend(Ext.Window, {
-
- // Must be set on initialization.
- maxFeatures: null,
-
- autoHeight: true,
- width: 350,
-
- bodyStyle: "padding: 5px; background-color: #FFFFFF;",
-
- title: "Warning: Maximum Features Encountered",
-
- initComponent: function() {
-
- this.addEvents("donotshowchange");
-
- var checkbox = new Ext.form.Checkbox({
- boxLabel: "Do not show this warning again."
- });
-
- checkbox.on("check", function(cb, newValue, oldValue) {
- this.fireEvent("donotshowchange", newValue);
- }, this);
-
- this.items = [
- new Ext.Panel({
- html: "You have encountered the maximum allowed features for the active layer (" + this.maxFeatures + " allowed). If I was a nicer application, I'd tell you something fluffier and more caring, about how you need to refine your search to overcome some technical nonsense. But I'm not. So deal with it.",
- border: false
- }),
- checkbox
- ];
-
- this.buttons = [
- new Ext.Button({
- text: "I'll deal.",
- handler: function() {
- this.close();
- },
- scope: this
- })
- ];
-
- GeoExt.drake.MaxFeaturesWarning.superclass.initComponent.call(this);
- }
-});
\ No newline at end of file
Modified: sandbox/opengeo/drake/trunk/apps/geoexplorer/build.cfg
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/build.cfg 2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/build.cfg 2009-03-10 13:29:03 UTC (rev 215)
@@ -26,12 +26,12 @@
OpenLayers/Lang/zh-CN.js
-[Drake.js]
+[GeoExplorer.js]
root=.
exclude=
script/OpenLayers.js
script/GeoExt.js
- script/Drake.js
+ script/GeoExplorer.js
[GeoExt.js]
root=../../core/lib
@@ -63,4 +63,4 @@
GeoExt/widgets/popup/Popup.js
GeoExt/layer/Vector.js
GeoExt/data/FeatureStore.js
-
\ No newline at end of file
+
Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/built.html
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/built.html 2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/built.html 2009-03-10 13:29:03 UTC (rev 215)
@@ -1,622 +0,0 @@
-<html>
-<head>
- <title>Drake (alpha) - A GeoExplorer</title>
- <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/ext-all.css" />
- <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/xtheme-gray.css" />
- <link rel="stylesheet" type="text/css" href="../../theme/style.css" />
- <link rel="stylesheet" type="text/css" href="../../core/theme/css/styler.css" />
- <link rel="stylesheet" type="text/css" href="../../core/theme/css/popup-gray.css" />
- <link rel="stylesheet" type="text/css" href="./theme/column-tree.css" />
-
- <script type="text/javascript" src="../../externals/ext/adapter/ext/ext-base.js"></script>
- <script type="text/javascript" src="../../externals/ext/ext-all-debug.js"></script>
- <script type="text/javascript" src="script/OpenLayers.js"></script>
- <script type="text/javascript" src="../../core/lib/GeoExt.js"></script>
- <script type="text/javascript" src="script/Drake.js"></script>
-
- <script>
-
- Ext.BLANK_IMAGE_URL = "../../externals/ext/resources/images/default/s.gif";
- OpenLayers.ImgPath = "theme/img/";
-
- // These should go in a better spot.
- function recordize(attrs){
- var records = new Array();
- var mapping = {
- "double": "float",
- "string": "string",
- "long" : "int",
- "MultiSurfacePropertyType": "auto"
- }
-
- for (var i = 0; i < attrs.length; i++){
- var a = attrs[i];
- var k = a.type.replace(/.*:/, '');
-
- if (mapping[k]){
- records.push({
- name: a.name,
- mapping: a.name,
- type: mapping[k]
- });
- }
- }
-
- return Ext.data.Record.create(records);
- }
-
- function columnize(attrs){
- var cols = new Array();
- for (var i = 0; i < attrs.length; i++){
- var a = attrs[i];
- if (a.type){
- cols.push({
- id: a.name,
- header: a.name,
- dataIndex: a.name,
- hidden: (i>11 | a.type.startsWith('gml:')),
- sortable: true
- });
- } else {
- console.log(a.name + " has no type");
- }
- }
-
- return cols;
- }
-
- GeoExt.Drake = {
- filterBuilder: null,
- grid: null,
-
- filter: null,
- store: null,
- fields: null,
-
- map: null,
- wfsStoreLayer: null,
-
- load: function(config) {
- OpenLayers.Util.extend(this, config);
-
- // Show the error window on network failures.
- GeoExt.RequestMgr.on("requestexception", function(request, url) {
- var errorWindow = new GeoExt.ErrorWindow({
- request: request,
- url: url,
- modal: true
- });
-
- errorWindow.show();
- }, this);
-
- var attributeStore = new GeoExt.data.AttributesStore({
- url: this.wfsUrl + "?typename=" + this.getFullType() + "&request=describefeaturetype"
- });
-
- attributeStore.load({
- // TODO: Rename x to something meaningful.
- callback: function(x){
- this.fields = [];
-
- for (var i = 0; i < x.length; i++){
- this.fields.push(x[i].data);
- }
-
- this.initFilter();
- this.initFeatureStore();
- this.initWMSStore();
- this.initMap();
-
- this.initFilterBuilder();
- this.initPagingBar();
- this.initFeatureGrid();
- this.initLayerTree();
- this.initLegendPanel();
-
- new Ext.Viewport({
- layout: 'border',
- items: [
- new Ext.Panel({
- region: "west",
- layout: "border",
- items: [
- this.filterBuilder,
- this.layerTree
- ],
- width: 370,
- collapsible: true,
- collapseMode: "mini",
- split: true
- }),
- this.mapPanel,
- this.grid,
- this.legendPanel
- ]
- });
- },
- scope: this
- });
- },
-
- initFilter: function() {
- this.filter = new OpenLayers.Filter.Logical({
- type: OpenLayers.Filter.Logical.OR,
- filters: []
- });
- },
-
- createProxy: function(params) {
- params = params || {};
- var type = params.type || this.featureType;
- var ns = params.namespace || 'http://www.openplans.org/topp';
- var prefix = params.prefix || this.featurePrefix;
-
- var proto = new OpenLayers.Protocol.WFS({
- url: this.wfsUrl,
- featureType: type,
- featureNS: ns,
- featurePrefix: prefix,
- srsName: "EPSG:4326",
- version: "1.1.0",
- maxFeatures: this.maxFeatures
- });
-
- return new GeoExt.data.ProtocolProxy({protocol: proto});
- },
-
- initFeatureStore: function() {
- // create the data store
- this.featureStore = new Ext.data.Store({
- proxy: this.createProxy(),
- remoteSort: true,
- reader: new Ext.data.JsonReader({}, [])
- });
-
- var showMaxFeaturesWarning = true;
-
- this.featureStore.on("load", function() {
- if (showMaxFeaturesWarning && this.featureStore.getTotalCount() >= this.maxFeatures) {
- var maxFeaturesWarning = new GeoExt.drake.MaxFeaturesWarning({
- maxFeatures: this.maxFeatures
- });
-
- maxFeaturesWarning.on("donotshowchange", function(newValue) {
- showMaxFeaturesWarning = !newValue;
- }, this);
-
- maxFeaturesWarning.show();
- }
- }, this);
- },
-
- initWMSStore: function() {
- this.wmsStore = new Ext.data.GroupingStore({
- url: this.wmsUrl + "?request=getcapabilities",
- reader: new GeoExt.data.WMSCapabilitiesReader(),
- sortInfo: {field: 'prefix'},
- groupField: 'prefix'
- });
- },
-
- initFilterBuilder: function() {
- this.filterBuilder = new GeoExt.drake.CustomFilterBuilder({
- title: "Filter Builder",
- region: "south",
- height: 175,
- autoScroll: true,
- filter: this.filter.clone(),
- attributes: new GeoExt.data.AttributesStore({
- url: this.getWFSLayerURL(this.getFullType()),
- ignore: {name: "the_geom"}
- }),
- addToToolbar: ["->", new Ext.form.Checkbox({
- boxLabel: "Use Filter",
- enableToggle: true,
- handler: function(checkbox, checked) {
- if (checked){
- this.featureStore.proxy.setOGCFilter(this.filterBuilder.getFilter());
- this.filterBuilder.on("change", this.updateQueryFilter, this);
- } else {
- this.featureStore.proxy.setOGCFilter(null);
- this.filterBuilder.un("change", this.updateQueryFilter, this);
- }
- this.reloadFeatureStore();
- },
- scope: this
- })]
- });
- },
-
- initPagingBar: function() {
- this.pagingBar = new Ext.PagingToolbar({
- pageSize: 7,
- store: this.featureStore,
- displayInfo: true,
- displayMsg: 'Displaying features {0} - {1} of {2}',
- emptyMsg: 'No features to display'
- });
- },
-
- initMap: function() {
- this.map = new OpenLayers.Map({
- theme: null,
- controls: [],
- units: "m",
- projection: new OpenLayers.Projection("EPSG:4326"),
- // maxExtent: new OpenLayers.Bounds(-139.53227612499998,20.816194750000008,-59.55180737499998,55.44510100000001)
- maxExtent: new OpenLayers.Bounds(-180,-90,180,90)
- });
-
- this.wfsStoreLayer = new GeoExt.layer.Vector("Vector Layer", {
- store: this.featureStore,
- displayInLayerSwitcher: false
- }
- );
-
- var baseLayer = new OpenLayers.Layer.WMS(
- "OpenStreetMap",
- "http://demo.opengeo.org/geoserver_openstreetmap/gwc/service/wms",
- {layers: 'openstreetmap', format:'image/png'}, {isBaseLayer: true}
- );
-
- var vmap0 = new OpenLayers.Layer.WMS(
- "Metacarta Vmap0",
- "http://labs.metacarta.com/wms/vmap0",
- {layers: 'basic'}, {isBaseLayer: true}
- );
-
-
- var countries = new OpenLayers.Layer.WMS(
- "Political Boundaries",
- this.wmsUrl,
- {layers: 'topp:countries'}, {isBaseLayer: true}
- );
-
- // Add some layers with a dummy base layer.
- this.map.addLayers([
- baseLayer,
- vmap0,
- countries,
- this.wfsStoreLayer
- ]);
-
- this.map.addControl(new OpenLayers.Control.Navigation());
- this.map.addControl(new OpenLayers.Control.PanZoomBar());
-
- this.mapPanel = new GeoExt.MapPanel({
- region: "center",
- map: this.map,
- zoom: 4,
- center: new OpenLayers.LonLat(-99.54204174999998,38.13064787500001)
- });
- },
-
- initFeatureGrid: function() {
-
- this.grid = new Ext.grid.GridPanel({
- title: "Feature Query Results",
- stripeRows: true,
- height:230,
- region: "south",
- collapsible: true,
- collapseMode: "mini",
- loadMask: {
- msg: "Loading features...",
- store: this.featureStore
- },
- columns: [],
- store: this.featureStore,
- selModel: new GeoExt.grid.FeatureSelectionModel({
- layer: this.wfsStoreLayer
- }),
- bbar: this.pagingBar
- });
-
- this.grid.on("rowdblclick", function(grid, index, evt) {
- var record = grid.getSelectionModel().getSelected();
-
- if (record) {
- var bounds = record.data.feature.geometry.getBounds();
- this.map.zoomToExtent(bounds);
- }
- }, this);
-
-
- ///////////// POPUP STUFF
-
- this.grid.getSelectionModel().on("rowselect", function (model, row, record){
- var feature = record.data.feature;
-
- var content = "<p> You selected " + feature.fid + "! I am truly impressed! </p>";
-
- feature.popup = new GeoExt.popup.Popup({
- title: feature.fid,
- feature: feature,
- width: 235,
- height: 70,
- html: content,
- collapsible: true,
- collapsed: true,
- expandOnShow: false
- });
-
- var popup = feature.popup;
- this.grid.store.on("load", function(store, records, options){
- var record;
- for(var i = 0; i < records.length; i++){
- if(records[i].data.feature == feature){
- return;
- }
- }
- if(popup.anc){
- popup.close();
- }
- });
-
- feature.popup.addToMapPanel(this.mapPanel);
- }, this);
-
- this.grid.getSelectionModel().on("rowdeselect", function(model, row, record){
- var feature = record.data.feature;
- if(feature.popup.anc){
- feature.popup.close();
- }
- });
-
- },
-
- initLayerTree: function() {
- var addLayerButton = new Ext.Button({
- text: "Add Layer...",
- disabled: true,
- handler: function() {
- var win = new GeoExt.drake.AddLayerWindow({
- capsStore: this.wmsStore
- });
-
- win.on("layerschosen", function(layers) {
-
- var layer;
- for (var index = 0; index < layers.length; index++) {
- var layerRecord = layers[index];
- var name = layerRecord.data.name;
- var tilesOrigin = layerRecord.data.llbbox[0] + "," + layerRecord.data.llbbox[1];
-
- layer = new OpenLayers.Layer.WMS(name, this.wmsUrl, {
- layers: name,
- format: "image/png",
- transparent: "true",
- tiled: true,
- tilesOrigin: tilesOrigin
- }, {
- isBaselayer: false,
- maxExtent: OpenLayers.Bounds.fromArray(layerRecord.data.llbbox)
- });
-
- layer.drakestyles = layerRecord.data.styles;
-
- var found = false;
- for (var layersIndex = 0; layersIndex < this.map.layers.length; layersIndex++) {
- if (this.map.layers[layersIndex] instanceof OpenLayers.Layer.WMS) {
- if (layer.params.LAYERS == this.map.layers[layersIndex].params.LAYERS) {
- found = true;
- break;
- }
- }
- }
-
- if (!found) {
- this.map.addLayer(layer);
- }
- }
- }, this);
-
- win.show();
- },
- scope: this
- });
-
-
- var root = new Ext.tree.TreeNode({});
-
- var baseLayerContainer = new GeoExt.tree.BaseLayerContainer({
- map: this.map
- });
-
- var wfsStore = new Ext.data.Store({
- reader: new GeoExt.data.WFSCapabilitiesReader(),
- url: this.wfsUrl + "?request=GetCapabilities"
- });
-
- // TODO: We should probably have some UI that shows the layer tree is loading,
- // as the overlayContainer will not be added to the layerTree until the
- // wfsStore's request returns. This is not Hugely Important Right Now, but
- // experience tells me that for some user, at some point, this request
- // is gonna hang.
- wfsStore.load({
- callback: function(response) {
- var overlayContainer = new GeoExt.tree.OverlayLayerContainer({
- map: this.map
- });
-
- overlayContainer.on("customizeconfig", function(config, layer) {
- config.uiProvider = GeoExt.drake.LayerNodeUI;
- config.queryable = wfsStore.find("name", layer.params.LAYERS) >= 0;
- });
-
- root.appendChild(overlayContainer);
-
- // Don't allow them to click the Add Layer button until we
- // have all the data we need. (i.e., we have it all now,
- // so enable the button).
- addLayerButton.setDisabled(false);
- }
- })
-
- root.appendChild(baseLayerContainer);
-
- this.layerTree = new GeoExt.tree.LayerTree({
- border: false,
- split: true,
- rootVisible: false,
- title: "Layers",
- region: "center",
- autoScroll: true,
- root: root,
- bbar: [
- addLayerButton,
- new Ext.Button({
- text: "Remove selected",
- handler: function() {
- var nodes = layerTree.getSelectionModel().getSelectedNodes();
- for (var i = 0; i < nodes.length; i++){
- var layerName = nodes[i].text;
- for (var j = 0; j < map.layers.length; j++) {
- if (map.layers[j] instanceof OpenLayers.Layer.WMS) {
- if (layerName == map.layers[j].params.LAYERS) {
- map.layers[j].destroy();
- break;
- } }
- }
- }
- }
- })
- ]
- });
-
- this.layerTree.on("contextmenu", function(node, e){
- if (node.layer){
- var menuConfig = [{
- id: "zoomtobounds",
- text: "Zoom to layer bounds",
- handler: function(evt){
- this.map.zoomToExtent(node.layer.maxExtent);
- },
- scope: this
- }];
-
- if (node.layer.drakestyles && node.layer.drakestyles.length > 1){
- for (var i = 0; i < node.layer.drakestyles.length; i++){
- var style = node.layer.drakestyles[i];
- menuConfig.push({id: style.name,
- text: "Render by \"" + style.title + '"',
- handler: function(style){
- return function(evt){
- node.layer.params.STYLES = style.name;
- node.layer.redraw();
- };
- }(style),
- scope: this
- });
- }
- }
-
- var menu = new Ext.menu.Menu(menuConfig);
- menu.showAt(e.getPoint());
- }
- }, this);
-
- this.layerTree.on("layeractivated", this.activateLayer, this);
- },
-
- addLayerHandler: function() {
-
- },
-
- initLegendPanel: function() {
- this.legendPanel = new GeoExt.LegendPanel({
- map: this.map,
- region: "east",
- title: "Legend",
- width: 200,
- bodyStyle: "padding: 5px",
- collapsible: true,
- autoScroll: true
- });
- },
-
- getFullType: function() {
- return this.featurePrefix + ":" + this.featureType;
- },
-
- getWFSLayerURL: function(type) {
- return this.wfsUrl + "?request=DescribeFeatureType&typename=" + type;
- },
-
- activateLayer: function(layer) {
- this.filterBuilder.attributes = new GeoExt.data.AttributesStore({
- url: this.getWFSLayerURL(layer.name),
- ignore: {name: "the_geom"}
- });
- this.filterBuilder.setFilter(null);
-
- var typename = layer.params.LAYERS;
- // update fields
- var attributeStore = new GeoExt.data.AttributesStore({
- url: this.wfsUrl + "?typename=" + typename + "&request=describefeaturetype"
- });
-
- attributeStore.load({
- // TODO: Rename x to something meaningful.
- callback: function(x){
- this.fields = [];
-
- for (var i = 0; i < x.length; i++){
- this.fields.push(x[i].data);
- }
-
- this.finishActivating(attributeStore.reader.namespace, typename);
- },
- scope: this
- });
- },
-
- finishActivating: function(namespace, typename) {
- var parts = typename.split(':');
- this.featurePrefix = parts[0];
- this.featureType = parts[1];
-
- this.featureStore.proxy = this.createProxy({prefix: parts[0], type: parts[1], namespace: namespace});
- this.featureStore.reader = new GeoExt.data.FeatureReader({}, recordize(this.fields));
-
- this.grid.setTitle(typename + " - " + namespace);
- this.grid.colModel.setConfig(columnize(this.fields));
-
- this.reloadFeatureStore();
- },
-
- updateQueryFilter: function(builder){
- this.featureStore.proxy.setOGCFilter(builder.getFilter());
- this.reloadFeatureStore();
- },
-
- reloadFeatureStore: function() {
- this.featureStore.load({
- params: {
- start: 0,
- limit: this.featuresPerPage
- }
- });
- }
- };
-
- Ext.onReady(function() {
- GeoExt.Drake.load({
- featurePrefix: "topp",
- featureType: "states",
-
- geoserverUrl: "/geoserver",
- wmsUrl: "/geoserver/wms",
- wfsUrl: "/geoserver/wfs",
-
- maxFeatures: 300,
- featuresPerPage: 7
- });
- });
-
- </script>
-</head>
-<body>
-</body>
-</html>
Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstore.html
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/filterstore.html 2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstore.html 2009-03-10 13:29:03 UTC (rev 215)
@@ -1,225 +0,0 @@
-<html>
-<head>
- <title>Filter and WFS Store</title>
- <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/ext-all.css" />
- <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/xtheme-gray.css" />
- <link rel="stylesheet" type="text/css" href="../../externals/openlayers/theme/default/style.css" />
- <link rel="stylesheet" type="text/css" href="../../core/theme/css/styler.css" />
- <style type="text/css">
- #panel {
- width: 380px;
- margin: 1em 3em;
- }
- </style>
-
- <script type="text/javascript" src="../../externals/ext/adapter/ext/ext-base.js"></script>
- <script type="text/javascript" src="../../externals/ext/ext-all.js"></script>
- <!-- <script type="text/javascript" src="../externals/openlayers/OpenLayers.js"></script> -->
- <script type="text/javascript" src="../../externals/openlayers/lib/OpenLayers.js"></script>
- <script>
- window.scriptLocation = "../../core/";
- </script>
- <script type="text/javascript" src="../../core/lib/GeoExt.js"></script>
-
-
-
- <script>
-
- // CODE FOR FILTERBUILDER //
-
- Ext.BLANK_IMAGE_URL = "../../externals/ext/resources/images/default/s.gif";
-
- var filter = new OpenLayers.Filter.Logical({
- type: OpenLayers.Filter.Logical.OR,
- filters: [
- new OpenLayers.Filter.Comparison({
- type: OpenLayers.Filter.Comparison.LESS_THAN,
- property: "PERSONS",
- value: 1000000
- })
- ]
- });
-
- var feWin = null;
- var format = new OpenLayers.Format.Filter();
- function showFE(panel) {
- var filter = panel.getComponent(0).getFilter();
- var node = format.write(filter);
- var text = OpenLayers.Format.XML.prototype.write.apply(format, [node]);
- if(!feWin) {
- feWin = new Ext.Window({
- title: "Filter Encoding",
- layout: "fit",
- closeAction: "hide",
- height: 300,
- width: 450,
- plain: true,
- modal: true,
- items: [{
- xtype: "textarea",
- value: text
- }]
- });
- } else {
- feWin.items.items[0].setValue(text);
- }
- feWin.show();
- }
-
- var fb;
-
- //Initialize Filter Builder
- Ext.onReady(function() {
-
- fb = new Ext.Panel({
- title: "Filter Builder",
- region: "west",
- width: 370,
- items: [{
- xtype: "gx_filterbuilder",
- filter: filter.clone(),
- attributes: new GeoExt.data.AttributesStore({
- url: "/geoserver/wfs?request=DescribeFeatureType&typename=topp:states",
- ignore: {name: "the_geom"}
- })
- }],
- bbar: ["->", {
- text: "Set Filter",
- handler: function() {
- proxy.setOGCFilter(fb.getComponent(0).getFilter());
- grid.store.load({params: {start: 0, limit: 25}});
- }
- }]
- });
-
- })
-
-
- // CODE FOR WFS FEATURE STORE //
-
- var grid;
-
- function recordize(attrs){
- var records = new Array();
- var mapping = {
- "double": "float",
- "string": "string",
- "MultiSurfacePropertyType": "auto"
- }
-
- for (var i = 0; i < attrs.length; i++){
- var a = attrs[i];
- var k = a.type.replace(/.*:/, '');
-
- if (mapping[k]){
- records.push({
- name: a.name,
- mapping: a.name,
- type: mapping[k]
- });
- }
- }
-
- return Ext.data.Record.create(records);
- }
-
- function columnize(attrs){
- var cols = new Array();
- for (var i = 0; i < attrs.length; i++){
- var a = attrs[i];
- if (a.type){
- cols.push({
- id: a.name,
- header: a.name,
- dataIndex: a.name,
- hidden: (i>11 | a.type.startsWith('gml:')),
- sortable: true
- });
- } else {
- console.log(a.name + " has no type");
- }
- }
-
- return cols;
- }
-
-
-
-
- Ext.onReady(function(){
- var proto = new OpenLayers.Protocol.WFS({
- url: '/geoserver/wfs',
- featureType: 'states',
- featureNS: 'http://www.openplans.org/topp',
- featurePrefix: 'topp'
- });
-
- proxy = new GeoExt.data.ProtocolProxy({protocol: proto});
-
- var as = new GeoExt.data.AttributesStore({
- url: '/geoserver/wfs?typename=topp:states&request=describefeaturetype'
- });
-
- as.load({
- callback: function(x){
- fields = [];
-
- for (var i = 0; i < x.length; i++){
- fields.push(x[i].data);
- }
-
- setupGrid();
- }
- });
- });
-
-
-
- function setupGrid(){
- var type = 'topp:states';
- // create the data store
- var store = new Ext.data.Store({
- proxy: proxy,
- reader: new GeoExt.data.FeatureReader({}, recordize(fields))
- });
-
- proxy.ogcFilter = filter;
-
- store.load();
-
- var pagingBar = new Ext.PagingToolbar({
- pageSize: 25,
- store: store,
- displayInfo: true,
- displayMsg: 'Displaying features {0} - {1} of {2}',
- emptyMsg: 'No features to display',
- });
-
- // create the Grid
-
- grid = new Ext.grid.GridPanel({
- store: store,
- columns: columnize(fields),
- stripeRows: true,
- autoExpandColumn: fields[0].name,
- height:350,
- width:600,
- title: type,
- bbar: pagingBar,
- region: "center"
- });
-
- new Ext.Viewport({
- layout: 'border',
- items: grid,
- items: [fb,
- grid]
- });
- }
-
-
- </script>
-</head>
-<body>
-</body>
-</html>
Deleted: sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstorewithmap.html
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/filterstorewithmap.html 2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/filterstorewithmap.html 2009-03-10 13:29:03 UTC (rev 215)
@@ -1,313 +0,0 @@
-<html>
-<head>
- <title>Filter and WFS Store</title>
- <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/ext-all.css" />
- <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/xtheme-gray.css" />
- <link rel="stylesheet" type="text/css" href="../../externals/openlayers/theme/default/style.css" />
- <link rel="stylesheet" type="text/css" href="../../core/theme/css/styler.css" />
- <style type="text/css">
- #panel {
- width: 380px;
- margin: 1em 3em;
- }
- </style>
-
- <script type="text/javascript" src="../../externals/ext/adapter/ext/ext-base.js"></script>
- <script type="text/javascript" src="../../externals/ext/ext-all.js"></script>
- <!-- <script type="text/javascript" src="../externals/openlayers/OpenLayers.js"></script> -->
- <script type="text/javascript" src="../../externals/openlayers/lib/OpenLayers.js"></script>
- <script>
- window.scriptLocation = "../../core/";
- </script>
- <script type="text/javascript" src="../../core/lib/GeoExt.js"></script>
-
-
-
- <script>
-
- // CODE FOR FILTERBUILDER //
-
- Ext.BLANK_IMAGE_URL = "../../externals/ext/resources/images/default/s.gif";
-
- var filter = new OpenLayers.Filter.Logical({
- type: OpenLayers.Filter.Logical.OR,
- filters: [
- new OpenLayers.Filter.Comparison({
- type: OpenLayers.Filter.Comparison.LESS_THAN,
- property: "PERSONS",
- value: 1000000
- })
- ]
- });
-
- var feWin = null;
- var format = new OpenLayers.Format.Filter();
- function showFE(panel) {
- var filter = panel.getComponent(0).getFilter();
- var node = format.write(filter);
- var text = OpenLayers.Format.XML.prototype.write.apply(format, [node]);
- if(!feWin) {
- feWin = new Ext.Window({
- title: "Filter Encoding",
- layout: "fit",
- closeAction: "hide",
- height: 300,
- width: 450,
- plain: true,
- modal: true,
- items: [{
- xtype: "textarea",
- value: text
- }]
- });
- } else {
- feWin.items.items[0].setValue(text);
- }
- feWin.show();
- }
-
- var fb;
-
- //Initialize Filter Builder
- Ext.onReady(function() {
-
- fb = new Ext.Panel({
- title: "Filter Builder",
- items: [{
- xtype: "gx_filterbuilder",
- filter: filter.clone(),
- attributes: new GeoExt.data.AttributesStore({
- url: "/geoserver/wfs?request=DescribeFeatureType&typename=topp:states",
- ignore: {name: "the_geom"}
- })
- }],
- bbar: ["->", {
- text: "Set Filter",
- handler: function() {
- proxy.setOGCFilter(fb.getComponent(0).getFilter());
- grid.store.load({
- params: {
- start: 0,
- limit: 7
- }
- });
- }
- }]
- });
-
- })
-
-
- // CODE FOR WFS FEATURE STORE //
-
- var grid, map;
-
- function recordize(attrs){
- var records = new Array();
- var mapping = {
- "double": "float",
- "string": "string",
- "MultiSurfacePropertyType": "auto"
- }
-
- for (var i = 0; i < attrs.length; i++){
- var a = attrs[i];
- var k = a.type.replace(/.*:/, '');
-
- if (mapping[k]){
- records.push({
- name: a.name,
- mapping: a.name,
- type: mapping[k]
- });
- }
- }
-
- return Ext.data.Record.create(records);
- }
-
- function columnize(attrs){
- var cols = new Array();
- for (var i = 0; i < attrs.length; i++){
- var a = attrs[i];
- if (a.type){
- cols.push({
- id: a.name,
- header: a.name,
- dataIndex: a.name,
- hidden: (i>11 | a.type.startsWith('gml:')),
- sortable: true
- });
- } else {
- console.log(a.name + " has no type");
- }
- }
-
- return cols;
- }
-
-
-
-
- Ext.onReady(function(){
- var proto = new OpenLayers.Protocol.WFS({
- url: '/geoserver/wfs',
- featureType: 'states',
- featureNS: 'http://www.openplans.org/topp',
- featurePrefix: 'topp'
- });
-
- proxy = new GeoExt.data.ProtocolProxy({protocol: proto});
-
- var as = new GeoExt.data.AttributesStore({
- url: '/geoserver/wfs?typename=topp:states&request=describefeaturetype'
- });
-
- as.load({
- callback: function(x){
- fields = [];
-
- for (var i = 0; i < x.length; i++){
- fields.push(x[i].data);
- }
-
- setupGrid();
- }
- });
- });
-
-
- var store;
- function setupGrid(){
- var type = 'topp:states';
- // create the data store
- store = new Ext.data.Store({
- proxy: proxy,
- remoteSort: true,
- reader: new GeoExt.data.FeatureReader({}, recordize(fields))
- });
-
- proxy.ogcFilter = filter;
-
- store.load();
-
- var pagingBar = new Ext.PagingToolbar({
- pageSize: 7,
- store: store,
- displayInfo: true,
- displayMsg: 'Displaying features {0} - {1} of {2}',
- emptyMsg: 'No features to display',
- });
-
- ///////////// Grid Stuff
-
- grid = new Ext.grid.GridPanel({
- store: store,
- columns: columnize(fields),
- stripeRows: true,
- autoExpandColumn: fields[0].name,
- height:230,
- //width:600,
- title: type,
- bbar: pagingBar,
- region: "south",
- collapsible: true,
- collapseMode: "mini"
- });
-
- grid.on("rowdblclick", function(grid, index, evt) {
- var record = grid.getSelectionModel().getSelected();
-
- if (record) {
- var bounds = record.data.feature.geometry.getBounds();
- map.zoomToExtent(bounds);
- }
- }, this);
-
- ///////////// Map Stuff
-
- map = new OpenLayers.Map({
- theme: null,
- controls: [],
- units: "m",
- projection: new OpenLayers.Projection("EPSG:4326"),
- restrictedExtent: new OpenLayers.Bounds(-139.53227612499998,20.816194750000008,-59.55180737499998,55.44510100000001), //new OpenLayers.Bounds(-180,-90,180,90),
- });
-
- // Add some layers with a dummy base layer.
- map.addLayers([
- new OpenLayers.Layer.WMS(
- "OpenLayers WMS",
- "http://labs.metacarta.com/wms/vmap0",
- {layers: 'basic'}, {isBaseLayer: true}
- ),
- /*new OpenLayers.Layer.WMS("The United States (WMS, 1 layer)", "/geoserver/wms",
- {
- layers: "topp:states",
- format: "image/png",
- transparent: "true"
- }, {
- isBaseLayer: false
- }
- )*/
- new GeoExt.layer.Vector("WFS Store, yo!",
- {
- store: store
- }
- )
- ]);
-
- map.addControl(new OpenLayers.Control.Navigation());
- map.addControl(new OpenLayers.Control.PanZoomBar());
-
- mapPanel = new GeoExt.MapPanel({
- region: "center",
- map: map
- })
-
- ///////////////// Layer Tree
-
- var root = new Ext.tree.TreeNode({});
- root.appendChild(new GeoExt.tree.BaseLayerContainer({
- map: map
- }));
- root.appendChild(new GeoExt.tree.OverlayLayerContainer({
- map: map
- }));
-
- var layerTree = new Ext.tree.TreePanel({
- border: false,
- split: true,
- rootVisible: false,
- title: "Layers",
- region: "center",
- autoScroll: true,
- root: root
- });
-
- new Ext.Viewport({
- layout: 'border',
- items: [
- new Ext.Panel({
- region: "west",
- items: [
- fb,
- layerTree
- ],
- width: 370,
- collapsible: true,
- collapseMode: "mini",
- split: true
- }),
- mapPanel,
- grid
- ]
- });
- }
-
-
- </script>
-</head>
-<body>
-</body>
-</html>
Modified: sandbox/opengeo/drake/trunk/apps/geoexplorer/index.html
===================================================================
--- sandbox/opengeo/drake/trunk/apps/drake/index.html 2009-03-01 02:00:57 UTC (rev 214)
+++ sandbox/opengeo/drake/trunk/apps/geoexplorer/index.html 2009-03-10 13:29:03 UTC (rev 215)
@@ -1,629 +1,62 @@
<html>
-<head>
- <title>Drake (alpha) - A GeoExplorer</title>
- <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/ext-all.css" />
- <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/xtheme-gray.css" />
- <link rel="stylesheet" type="text/css" href="../../externals/openlayers/theme/default/style.css" />
- <link rel="stylesheet" type="text/css" href="../../core/theme/css/styler.css" />
- <link rel="stylesheet" type="text/css" href="../../core/theme/css/popup-gray.css" />
- <link rel="stylesheet" type="text/css" href="./theme/column-tree.css" />
-
- <script type="text/javascript" src="../../externals/ext/adapter/ext/ext-base.js"></script>
- <script type="text/javascript" src="../../externals/ext/ext-all-debug.js"></script>
- <!-- <script type="text/javascript" src="../../externals/openlayers/OpenLayers.js"></script> -->
- <script type="text/javascript" src="../../externals/openlayers/lib/OpenLayers.js"></script>
- <script>
- window.scriptLocation = "../../core/";
- </script>
- <script type="text/javascript" src="../../core/lib/GeoExt.js"></script>
- <script type="text/javascript" src="./AddLayerWindow.js"></script>
- <script type="text/javascript" src="./CustomFilterBuilder.js"></script>
- <script type="text/javascript" src="./LayerTree.js"></script>
- <script type="text/javascript" src="./LayerNodeUI.js"></script>
- <script type="text/javascript" src="./MaxFeaturesWarning.js"></script>
+ <head>
+ <title>GeoExplorer 0.1-pre</title>
+ <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/ext-all.css" />
+ <link rel="stylesheet" type="text/css" href="../../externals/ext/resources/css/xtheme-gray.css" />
+ <link rel="stylesheet" type="text/css" href="../../externals/openlayers/theme/default/style.css" />
+ <link rel="stylesheet" type="text/css" href="../../core/theme/css/styler.css" />
+ <link rel="stylesheet" type="text/css" href="../../core/theme/css/popup-gray.css" />
+ <link rel="stylesheet" type="text/css" href="./theme/column-tree.css" />
- <script>
+ <script type="text/javascript" src="../../externals/ext/adapter/ext/ext-base.js"></script>
+ <script type="text/javascript" src="../../externals/ext/ext-all-debug.js"></script>
+ <script type="text/javascript" src="../../externals/openlayers/lib/OpenLayers.js"></script>
+ <script>
+ window.scriptLocation = "../../core/";
+ </script>
+ <script type="text/javascript" src="../../core/lib/GeoExt.js"></script>
+ <script>
- Ext.BLANK_IMAGE_URL = "../../externals/ext/resources/images/default/s.gif";
+ Ext.BLANK_IMAGE_URL = "../../externals/ext/resources/images/default/s.gif";
- // These should go in a better spot.
- function recordize(attrs){
- var records = new Array();
- var mapping = {
- "double": "float",
- "string": "string",
- "long" : "int",
- "MultiSurfacePropertyType": "auto"
- }
-
- for (var i = 0; i < attrs.length; i++){
- var a = attrs[i];
- var k = a.type.replace(/.*:/, '');
+ GeoExplorer = {
+ load: function() {
+ this.map = new OpenLayers.Map();
+ this.map.addLayers([
+ new OpenLayers.Layer.WMS("TOPP States",
+ '/geoserver/wms' ,{
+ layers: 'topp:states'
+ }, {
+ isBaseLayer: true
+ })
+ ]);
- if (mapping[k]){
- records.push({
- name: a.name,
- mapping: a.name,
- type: mapping[k]
- });
- }
- }
+ this.mapPanel = new GeoExt.MapPanel({
+ map: this.map,
+ region: 'center'
+ });
- return Ext.data.Record.create(records);
- }
+ this.layerTree = new Ext.tree.TreePanel({
+ region: 'west',
+ root: new GeoExt.tree.LayerContainer({
+ text: 'Map Layers',
+ map: this.map
+ })
+ });
- function columnize(attrs){
- var cols = new Array();
- for (var i = 0; i < attrs.length; i++){
- var a = attrs[i];
- if (a.type){
- cols.push({
- id: a.name,
- header: a.name,
- dataIndex: a.name,
- hidden: (i>11 | a.type.startsWith('gml:')),
- sortable: true
- });
- } else {
- console.log(a.name + " has no type");
- }
- }
-
- return cols;
- }
-
- GeoExt.Drake = {
- filterBuilder: null,
- grid: null,
-
- filter: null,
- store: null,
- fields: null,
-
- map: null,
- wfsStoreLayer: null,
-
- load: function(config) {
- OpenLayers.Util.extend(this, config);
-
- // Show the error window on network failures.
- GeoExt.RequestMgr.on("requestexception", function(request, url) {
- var errorWindow = new GeoExt.ErrorWindow({
- request: request,
- url: url,
- modal: true
- });
-
- errorWindow.show();
- }, this);
-
- var attributeStore = new GeoExt.data.AttributesStore({
- url: this.wfsUrl + "?typename=" + this.getFullType() + "&request=describefeaturetype"
- });
-
- attributeStore.load({
- // TODO: Rename x to something meaningful.
- callback: function(x){
- this.fields = [];
-
- for (var i = 0; i < x.length; i++){
- this.fields.push(x[i].data);
- }
-
- this.initFilter();
- this.initFeatureStore();
- this.initWMSStore();
- this.initMap();
-
- this.initFilterBuilder();
- this.initPagingBar();
- this.initFeatureGrid();
- this.initLayerTree();
- this.initLegendPanel();
-
new Ext.Viewport({
layout: 'border',
- items: [
- new Ext.Panel({
- region: "west",
- layout: "border",
- items: [
- this.filterBuilder,
- this.layerTree
- ],
- width: 370,
- collapsible: true,
- collapseMode: "mini",
- split: true
- }),
- this.mapPanel,
- this.grid,
- this.legendPanel
- ]
+ items: [this.mapPanel, this.layerTree]
});
- },
- scope: this
- });
- },
-
- initFilter: function() {
- this.filter = new OpenLayers.Filter.Logical({
- type: OpenLayers.Filter.Logical.OR,
- filters: []
- });
- },
-
- createProxy: function(params) {
- params = params || {};
- var type = params.type || this.featureType;
- var ns = params.namespace || 'http://www.openplans.org/topp';
- var prefix = params.prefix || this.featurePrefix;
-
- var proto = new OpenLayers.Protocol.WFS({
- url: this.wfsUrl,
- featureType: type,
- featureNS: ns,
- featurePrefix: prefix,
- srsName: "EPSG:4326",
- version: "1.1.0",
- maxFeatures: this.maxFeatures
- });
-
- return new GeoExt.data.ProtocolProxy({protocol: proto});
- },
-
- initFeatureStore: function() {
- // create the data store
- this.featureStore = new Ext.data.Store({
- proxy: this.createProxy(),
- remoteSort: true,
- reader: new Ext.data.JsonReader({}, [])
- });
-
- var showMaxFeaturesWarning = true;
-
- this.featureStore.on("load", function() {
- if (showMaxFeaturesWarning && this.featureStore.getTotalCount() >= this.maxFeatures) {
- var maxFeaturesWarning = new GeoExt.drake.MaxFeaturesWarning({
- maxFeatures: this.maxFeatures
- });
-
- maxFeaturesWarning.on("donotshowchange", function(newValue) {
- showMaxFeaturesWarning = !newValue;
- }, this);
-
- maxFeaturesWarning.show();
- }
- }, this);
- },
-
- initWMSStore: function() {
- this.wmsStore = new Ext.data.GroupingStore({
- url: this.wmsUrl + "?request=getcapabilities",
- reader: new GeoExt.data.WMSCapabilitiesReader(),
- sortInfo: {field: 'prefix'},
- groupField: 'prefix'
- });
- },
-
- initFilterBuilder: function() {
- this.filterBuilder = new GeoExt.drake.CustomFilterBuilder({
- title: "Filter Builder",
- region: "south",
- height: 175,
- autoScroll: true,
- filter: this.filter.clone(),
- attributes: new GeoExt.data.AttributesStore({
- url: this.getWFSLayerURL(this.getFullType()),
- ignore: {name: "the_geom"}
- }),
- addToToolbar: ["->", new Ext.form.Checkbox({
- boxLabel: "Use Filter",
- enableToggle: true,
- handler: function(checkbox, checked) {
- if (checked){
- this.featureStore.proxy.setOGCFilter(this.filterBuilder.getFilter());
- this.filterBuilder.on("change", this.updateQueryFilter, this);
- } else {
- this.featureStore.proxy.setOGCFilter(null);
- this.filterBuilder.un("change", this.updateQueryFilter, this);
- }
- this.reloadFeatureStore();
- },
- scope: this
- })]
- });
- },
-
- initPagingBar: function() {
- this.pagingBar = new Ext.PagingToolbar({
- pageSize: 7,
- store: this.featureStore,
- displayInfo: true,
- displayMsg: 'Displaying features {0} - {1} of {2}',
- emptyMsg: 'No features to display'
- });
- },
-
- initMap: function() {
- this.map = new OpenLayers.Map({
- theme: null,
- controls: [],
- units: "m",
- projection: new OpenLayers.Projection("EPSG:4326"),
- // maxExtent: new OpenLayers.Bounds(-139.53227612499998,20.816194750000008,-59.55180737499998,55.44510100000001)
- maxExtent: new OpenLayers.Bounds(-180,-90,180,90)
- });
-
- this.wfsStoreLayer = new GeoExt.layer.Vector("Vector Layer", {
- store: this.featureStore,
- displayInLayerSwitcher: false
- }
- );
-
- var baseLayer = new OpenLayers.Layer.WMS(
- "OpenStreetMap",
- "http://demo.opengeo.org/geoserver_openstreetmap/gwc/service/wms",
- {layers: 'openstreetmap', format:'image/png'}, {isBaseLayer: true}
- );
-
- var vmap0 = new OpenLayers.Layer.WMS(
- "Metacarta Vmap0",
- "http://labs.metacarta.com/wms/vmap0",
- {layers: 'basic'}, {isBaseLayer: true}
- );
-
-
- var countries = new OpenLayers.Layer.WMS(
- "Political Boundaries",
- this.wmsUrl,
- {layers: 'topp:countries'}, {isBaseLayer: true}
- );
-
- // Add some layers with a dummy base layer.
- this.map.addLayers([
- baseLayer,
- vmap0,
- countries,
- this.wfsStoreLayer
- ]);
-
- this.map.addControl(new OpenLayers.Control.Navigation());
- this.map.addControl(new OpenLayers.Control.PanZoomBar());
-
- this.mapPanel = new GeoExt.MapPanel({
- region: "center",
- map: this.map,
- zoom: 4,
- center: new OpenLayers.LonLat(-99.54204174999998,38.13064787500001)
- });
- },
-
- initFeatureGrid: function() {
-
- this.grid = new Ext.grid.GridPanel({
- title: "Feature Query Results",
- stripeRows: true,
- height:230,
- region: "south",
- collapsible: true,
- collapseMode: "mini",
- loadMask: {
- msg: "Loading features...",
- store: this.featureStore
},
- columns: [],
- store: this.featureStore,
- selModel: new GeoExt.grid.FeatureSelectionModel({
- layer: this.wfsStoreLayer
- }),
- bbar: this.pagingBar
- });
-
- this.grid.on("rowdblclick", function(grid, index, evt) {
- var record = grid.getSelectionModel().getSelected();
-
- if (record) {
- var bounds = record.data.feature.geometry.getBounds();
- this.map.zoomToExtent(bounds);
- }
- }, this);
-
-
- ///////////// POPUP STUFF
-
- this.grid.getSelectionModel().on("rowselect", function (model, row, record){
- var feature = record.data.feature;
-
- var content = "<p> You selected " + feature.fid + "! I am truly impressed! </p>";
+ };
- feature.popup = new GeoExt.popup.Popup({
- title: feature.fid,
- feature: feature,
- width: 235,
- height: 70,
- html: content,
- collapsible: true,
- collapsed: true,
- expandOnShow: false
- });
-
- var popup = feature.popup;
- this.grid.store.on("load", function(store, records, options){
- var record;
- for(var i = 0; i < records.length; i++){
- if(records[i].data.feature == feature){
- return;
- }
- }
- if(popup.anc){
- popup.close();
- }
- });
-
- feature.popup.addToMapPanel(this.mapPanel);
- }, this);
-
- this.grid.getSelectionModel().on("rowdeselect", function(model, row, record){
- var feature = record.data.feature;
- if(feature.popup.anc){
- feature.popup.close();
- }
+ Ext.onReady(function() {
+ GeoExplorer.load();
});
- },
-
- initLayerTree: function() {
- var addLayerButton = new Ext.Button({
- text: "Add Layer...",
- disabled: true,
- handler: function() {
- var win = new GeoExt.drake.AddLayerWindow({
- capsStore: this.wmsStore
- });
-
- win.on("layerschosen", function(layers) {
-
- var layer;
- for (var index = 0; index < layers.length; index++) {
- var layerRecord = layers[index];
- var name = layerRecord.data.name;
- var tilesOrigin = layerRecord.data.llbbox[0] + "," + layerRecord.data.llbbox[1];
-
- layer = new OpenLayers.Layer.WMS(name, this.wmsUrl, {
- layers: name,
- format: "image/png",
- transparent: "true",
- tiled: true,
- tilesOrigin: tilesOrigin
- }, {
- isBaselayer: false,
- maxExtent: OpenLayers.Bounds.fromArray(layerRecord.data.llbbox)
- });
-
- layer.drakestyles = layerRecord.data.styles;
-
- var found = false;
- for (var layersIndex = 0; layersIndex < this.map.layers.length; layersIndex++) {
- if (this.map.layers[layersIndex] instanceof OpenLayers.Layer.WMS) {
- if (layer.params.LAYERS == this.map.layers[layersIndex].params.LAYERS) {
- found = true;
- break;
- }
- }
- }
-
- if (!found) {
- this.map.addLayer(layer);
- }
- }
- }, this);
-
- win.show();
- },
- scope: this
- });
-
-
- var root = new Ext.tree.TreeNode({});
-
- var baseLayerContainer = new GeoExt.tree.BaseLayerContainer({
- map: this.map
- });
-
- var wfsStore = new Ext.data.Store({
- reader: new GeoExt.data.WFSCapabilitiesReader(),
- url: this.wfsUrl + "?request=GetCapabilities"
- });
-
- // TODO: We should probably have some UI that shows the layer tree is loading,
- // as the overlayContainer will not be added to the layerTree until the
- // wfsStore's request returns. This is not Hugely Important Right Now, but
- // experience tells me that for some user, at some point, this request
- // is gonna hang.
- wfsStore.load({
- callback: function(response) {
- var overlayContainer = new GeoExt.tree.OverlayLayerContainer({
- map: this.map
- });
-
- overlayContainer.on("customizeconfig", function(config, layer) {
- config.uiProvider = GeoExt.drake.LayerNodeUI;
- config.queryable = wfsStore.find("name", layer.params.LAYERS) >= 0;
- });
-
- root.appendChild(overlayContainer);
-
- // Don't allow them to click the Add Layer button until we
- // have all the data we need. (i.e., we have it all now,
- // so enable the button).
- addLayerButton.setDisabled(false);
- }
- })
-
- root.appendChild(baseLayerContainer);
-
- this.layerTree = new GeoExt.tree.LayerTree({
- border: false,
- split: true,
- rootVisible: false,
- title: "Layers",
- region: "center",
- autoScroll: true,
- root: root,
- bbar: [
- addLayerButton,
- new Ext.Button({
- text: "Remove selected",
- handler: function() {
- var nodes = layerTree.getSelectionModel().getSelectedNodes();
- for (var i = 0; i < nodes.length; i++){
- var layerName = nodes[i].text;
- for (var j = 0; j < map.layers.length; j++) {
- if (map.layers[j] instanceof OpenLayers.Layer.WMS) {
- if (layerName == map.layers[j].params.LAYERS) {
- map.layers[j].destroy();
- break;
- } }
- }
- }
- }
- })
- ]
- });
-
- this.layerTree.on("contextmenu", function(node, e){
- if (node.layer){
- var menuConfig = [{
- id: "zoomtobounds",
- text: "Zoom to layer bounds",
- handler: function(evt){
- this.map.zoomToExtent(node.layer.maxExtent);
- },
- scope: this
- }];
-
- if (node.layer.drakestyles && node.layer.drakestyles.length > 1){
- for (var i = 0; i < node.layer.drakestyles.length; i++){
- var style = node.layer.drakestyles[i];
- menuConfig.push({id: style.name,
- text: "Render by \"" + style.title + '"',
- handler: function(style){
- return function(evt){
- node.layer.params.STYLES = style.name;
- node.layer.redraw();
- };
- }(style),
- scope: this
- });
- }
- }
-
- var menu = new Ext.menu.Menu(menuConfig);
- menu.showAt(e.getPoint());
- }
- }, this);
-
- this.layerTree.on("layeractivated", this.activateLayer, this);
- },
-
- addLayerHandler: function() {
-
- },
-
- initLegendPanel: function() {
- this.legendPanel = new GeoExt.LegendPanel({
- map: this.map,
- region: "east",
- title: "Legend",
- width: 200,
- bodyStyle: "padding: 5px",
- collapsible: true,
- autoScroll: true
- });
- },
-
- getFullType: function() {
- return this.featurePrefix + ":" + this.featureType;
- },
-
- getWFSLayerURL: function(type) {
- return this.wfsUrl + "?request=DescribeFeatureType&typename=" + type;
- },
-
- activateLayer: function(layer) {
- this.filterBuilder.attributes = new GeoExt.data.AttributesStore({
- url: this.getWFSLayerURL(layer.name),
- ignore: {name: "the_geom"}
- });
- this.filterBuilder.setFilter(null);
-
- var typename = layer.params.LAYERS;
- // update fields
- var attributeStore = new GeoExt.data.AttributesStore({
- url: this.wfsUrl + "?typename=" + typename + "&request=describefeaturetype"
- });
-
- attributeStore.load({
- // TODO: Rename x to something meaningful.
- callback: function(x){
- this.fields = [];
-
- for (var i = 0; i < x.length; i++){
- this.fields.push(x[i].data);
- }
-
- this.finishActivating(attributeStore.reader.namespace, typename);
- },
- scope: this
- });
- },
-
- finishActivating: function(namespace, typename) {
- var parts = typename.split(':');
- this.featurePrefix = parts[0];
- this.featureType = parts[1];
-
- this.featureStore.proxy = this.createProxy({prefix: parts[0], type: parts[1], namespace: namespace});
- this.featureStore.reader = new GeoExt.data.FeatureReader({}, recordize(this.fields));
-
- this.grid.setTitle(typename + " - " + namespace);
- this.grid.colModel.setConfig(columnize(this.fields));
-
- this.reloadFeatureStore();
- },
-
- updateQueryFilter: function(builder){
- this.featureStore.proxy.setOGCFilter(builder.getFilter());
- this.reloadFeatureStore();
- },
-
- reloadFeatureStore: function() {
- this.featureStore.load({
- params: {
- start: 0,
- limit: this.featuresPerPage
- }
- });
- }
- };
-
- Ext.onReady(function() {
- GeoExt.Drake.load({
- featurePrefix: "topp",
- featureType: "states",
-
- geoserverUrl: "/geoserver",
- wmsUrl: "/geoserver/wms",
- wfsUrl: "/geoserver/wfs",
-
- maxFeatures: 300,
- featuresPerPage: 7
- });
- });
-
- </script>
-</head>
-<body>
-</body>
+ </script>
+ </head>
+ <body>
+ </body>
</html>
More information about the Commits
mailing list