Hello, sendeman wrote: > Hi All, > > I have an OpenLayers application that in which I have an XYZ-subsurface > model residing in a MySQL database table. The model has a record for each > voxel that has an X, Y and Z value and a value that indicates the soil type > (e.g. 1 for clay, 2 for loam, etcetera). > > Using php, jQuery and OpenLayers I am able to retrieve all the relevant > records for a location when a user clicks on the map. The php script returns > a column with all the soillayers. > > Now what I also want to do is create the possibility for a user to draw a > section line on the map and then get a vertical cross-section from the > XYZ-model. To do this I mean to let the user draw a line and using the > featureadded event I want to split the drawn line at every intersection with > the grid of the XYZ model. > > I thought this should be possible with the > http://dev.openlayers.org/docs/files/OpenLayers/Geometry/MultiLineString-js.html#OpenLayers.Geometry.MultiLineString.split > split function for the MultiLineString . I built a WKT-string to create a > MultiLineString for the grid. I have added the cell size as a variable to > the script, so it will be reusable for models with different cell sizes. I > want to intersect the drawn line with the created grid. This doesn't work. I > get an error in Firebug: > > SectionGridFeature.split is not a function > http://localhost/geoviewer/javascript/crosssection.js > Line 75 ed. This would be the line stating: > 'SectionGridFeature.split(varSections.features[0]);'
If you have build of the library that includes OpenLayers.Geometry.MultiLineString, I'd say that your SectionGridFeature is not a valid MultiLineString. If you're still working through this problem, I'd recommend dumping your well-known text into this example and make sure it parses: http://openlayers.org/dev/examples/vector-formats.html (select WKT) Tim > > > For the script I made, see below. This doesn't include the entire openlayers > script I built, but just the section I'm using for the creation of the > cross-section. > > My question is: how can I make the split function work? I fear something may > be wrong with the MultiLineString... > > Best regards, > Martijn Senden. > > > // JavaScript Document for drawing profile lines that are used for drawing > // cross-sections through the Rockworks XYZ-model in the MWH Geoviewer > // V. 1.0 By Martijn Senden, MWH B.V., The Netherlands > > // Project parameters > var CellSize = 10; //Size of the grid cells in the XYZ-model > > // Stylemap for Cross-section line > function initCrossSection() { > var StyleCustomCrossSectionLine = new OpenLayers.StyleMap({ > "default": new OpenLayers.Style({ > strokeColor: "#ffff00", > strokeWidth: 2.5 > }) > }); > var StyleCustomGrid = new OpenLayers.StyleMap({ > "default": new OpenLayers.Style({ > strokeColor: "#ffff00", > fillColor: "#ffbb00", > strokeWidth: 2.5 > }) > }); > > // Addition of cross-section layer to map and enter drawing mode > var varSections = new OpenLayers.Layer.Vector("Section Line", { > visibility: true, styleMap: StyleCustomCrossSectionLine}); > map.addLayer(varSections); > var varSection = new OpenLayers.Control.DrawFeature( > varSections, > OpenLayers.Handler.Path, > {displayClass: 'olControlDrawFeaturePolygon'} > ); > varSections.events.on({ > //Delete previous line before new feature is added > "beforefeatureadded": function(evt) { > var i, len, toDestroy = [] > for(i=0,len=varSections.features.length; i<len; i++) { > if(varSections.features[i] != evt.feature) { > toDestroy.push(varSections.features[i]); > } > } > varSections.destroyFeatures(toDestroy); > }, > //When new feature is added: > "featureadded": function(evt) { > > //Get Xmin, Xmax, Ymin and Ymax for the new grid used for intersection > var SectionBounds = > varSections.features[0].geometry.getBounds().clone(); > var vXmin = RoundToGrid(SectionBounds.left,CellSize,"Up"); > var vXmax = RoundToGrid(SectionBounds.right,CellSize,"Down"); > var vYmin = RoundToGrid(SectionBounds.bottom,CellSize,"Up"); > var vYmax = RoundToGrid(SectionBounds.top,CellSize,"Down"); > > //Create intersection polygon grid > var varSectionGrid = new OpenLayers.Layer.Vector("Section Gridpunten", > {visibility: true, styleMap: StyleCustomGrid}); > parser = new OpenLayers.Format.WKT(); > > var wkt = " MULTILINESTRING("; > > //Draw vertical lines > for (y = vYmin; y < vYmax; y = y + CellSize) { > wkt = wkt+"("+vXmin+" "+y+")("+vXmax+" "+y+")"; > } > //Draw horizontal lines > for (x = vXmin; x < vXmax; x = x + CellSize) { > wkt = wkt+"("+x+" "+vYmin+")("+x+" "+vYmax+")"; > } > var SectionGridGeometry = parser.read(wkt); > var SectionGridFeature = new > OpenLayers.Feature.Vector(SectionGridGeometry); > varSectionGrid.addFeatures(SectionGridFeature); > > //Split the Section line with the temporary grid > SectionGridFeature.split(varSections.features[0]); > varSectionGrid.features[0].geometry.split(varSections.features[0]); > > //Construct Json-string from the coordinates of the vertices of the > drawn section line > varSectionCoords = '{'; > for (var i = 0; i < varSections.features[0].geometry.components.length > - 1; i++) { > varSectionCoords = varSectionCoords + '"point' + '":{"x":"' + > varSections.features[0].geometry.components[i].x + '","y":"' + > varSections.features[0].geometry.components[i].y + '"},'; > } > varSectionCoords = varSectionCoords + '"point' + '":{"x":"' + > varSections.features[0].geometry.components[varSections.features[0].geometry.components.length > - 1].x + '","y":"' + > varSections.features[0].geometry.components[varSections.features[0].geometry.components.length > - 1].y + '"}}'; > } > }); > map.addControl(varSection); > varSection.activate(); > } > > function RoundToGrid(Value, GridResolution, Type) { > switch (Type) { > case "Up": > return Math.ceil(Value / GridResolution)*GridResolution; > break; > case "Down": > return Math.floor(Value / GridResolution)*GridResolution; > break; > case "Round": > return Math.round(Value / GridResolution)*GridResolution; > break; > } > } > -- Tim Schaub OpenGeo - http://opengeo.org Expert service straight from the developers. _______________________________________________ Users mailing list [email protected] http://openlayers.org/mailman/listinfo/users
