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]);' 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; } } -- View this message in context: http://n2.nabble.com/Split-a-line-feature-with-a-MultiLineString-tp4165167p4165167.html Sent from the OpenLayers Users mailing list archive at Nabble.com. _______________________________________________ Users mailing list [email protected] http://openlayers.org/mailman/listinfo/users
