Just realised that I excluded the wider from the group accidentally - so added them back in .
> I looked a bit more into the mongodb driver. I think I would prefer not using GDAL for saving into the database directly. And only using GDAL for > importing different formats and transforming between projections. Makes sense. I must admit - since at the end you are deserializing the GeoJSON into a FeatureCollection object I personally would avoid all of this and just write the features directly to the FeatureCollection object. But .. I found this earlier today and got the same exception as him at the > Marshal.Copy line (the Python version uses VSIFReadL). > https://lists.osgeo.org/pipermail/gdal-dev/2018-July/048838.html > > * var bufPtr = Gdal.VSIFOpenL(outputRasterFileName, "rb"); > //outputRasterFileName is now "/vsimem/file.tiff" > Gdal.VSIFSeekL(bufPtr, 0, 2); // seek to end > var size = Gdal.VSIFTellL(bufPtr); > Gdal.VSIFSeekL(bufPtr, 0, 0); // seek to beginning > Gdal.VSIFCloseL(bufPtr); > var data = new byte[size]; > Marshal.Copy(bufPtr, data, 0, size); > Gdal.Unlink(outputRasterFileName);* > > Could that be because you are closing the buffer with `Gdal.VSIFCloseL(bufPtr)`? Why close it before you read it? Did you get a valid pointer before closing it? What was the value of size? > > > > > > Den ons 11 nov. 2020 kl 14:44 skrev Paul Harwood <rune...@gmail.com>: > >> The MongoDB driver is definitely the way to go if you can :) >> >> Or - since you seem to have a FeatureCollection class in the last line - >> just right the Features directly to that? >> >> But if all of that fails - I am not sure you are right about VSIFOpenL - >> did you actually try it? It is passing a pointer to the buffer. That >> suggest that it expects you to read from the pointer yourself - in the c# >> code. I am not sure why you would pass a pointer from the open method and >> then require a "read" - that is only going to return a pointer to the same >> thing again? >> >> On Wed, 11 Nov 2020 at 12:36, Christian Sörensen < >> christ...@uxproductions.se> wrote: >> >>> I looked at VSIFOpenL, but the C# version seems to lack VSIFReadL, which >>> is required for actually reading from the unmanaged virtual file memory >>> after opening it. >>> >>> The last tip looked promising, I will have to take a look at the MongoDB >>> driver. If it works it could be a good solution. >>> >>> Den ons 11 nov. 2020 kl 12:55 skrev Paul Harwood <rune...@gmail.com>: >>> >>>> Customers! What can you say about Customers! :) Seems the worst of all >>>> possible worlds to me - but who are we to argue :) >>>> >>>> However - there does appear to be `IntPtr Gdal.VSIFOpenL(utf8_path, >>>> pszMode )` >>>> >>>> I have never used it - so I don't know what it does but the name does >>>> suggest that it is what you are looking for. You would probably have to do >>>> something like: >>>> >>>> I have no guarantee that this would work or provide anything you want. >>>> >>>> BTW -I am bit confused that at the end you then deserialize the JSON - >>>> which would surely turn it back from a string into objects? Are you sure >>>> you need to do this? Are you sure something like >>>> https://gdal.org/drivers/vector/mongodbv3.html#vector-mongodbv3 won't >>>> do the job? >>>> >>>> using System.Runtime.InteropServices; >>>> >>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> * private FeatureCollection ImportShapeFile(IEnumerable<ImportFile> >>>>>> files) { var tempJsonFilename = $"/vsimem/temp.json"; >>>>>> GdalConfiguration.ConfigureGdal(); >>>>>> GdalConfiguration.ConfigureOgr(); try {* >>>>>> >>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> * // Load shape Driver shpDriver = >>>>>> Ogr.GetDriverByName("ESRI Shapefile"); var shpFile = >>>>>> files.First(f => f.Filename.EndsWith(".shp")); Datasource >>>>>> shpDatasource = Ogr.Open($"/vsimem/{shpFile.Filename}", 0); >>>>>> if (shpDatasource == null) return null; >>>>>> Layer shpLayer = shpDatasource.GetLayerByIndex(0); // >>>>>> Setup >>>>>> projection transform to WGS84 SpatialReference >>>>>> srcProjection >>>>>> = shpLayer.GetSpatialRef(); SpatialReference >>>>>> destProjection >>>>>> = new SpatialReference(""); >>>>>> destProjection.ImportFromEPSG(4326); CoordinateTransform >>>>>> transform = new CoordinateTransformation(srcProjection, destProjection); >>>>>> // Copy layer to geo json Driver jsonDriver = >>>>>> Ogr.GetDriverByName("GeoJSON"); DataSource jsonDataSource >>>>>> = >>>>>> jsonDriver.CreateDataSource(tempJsonFilename, new string[] { }); >>>>>> Layer jsonLayer = jsonDataSource.CreateLayer(shpLayer.GetName(), >>>>>> destProjection, shpLayer.GetGeomType(), new string[] { }); >>>>>> Feature shpFeature = shpLayer.GetNextFeature(); while >>>>>> (shpFeature != null) { // Transform >>>>>> geometry Geometry geometry = >>>>>> shpFeature.GetGeometryRef(); >>>>>> geometry.Transform(transform); // Save feature to new >>>>>> layer jsonLayer.CreateFeature(shpFeature); >>>>>> shpFeature = shpLayer.GetNextFeature(); } >>>>>> IntPtr buffer = Gdal.VSIFOpenL(tempJsonFilename, {some Mode value});* >>>>>> >>>>> string result = Marshall.PtrToStringAnsi(buffer); >>>> >>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> * // Close all GDAL stuff >>>>>> jsonLayer.Dispose(); jsonDataSource.Dispose(); >>>>>> jsonDriver.Dispose(); shpLayer.Dispose(); >>>>>> shpDatasource.Dispose(); shpDriver.Dispose(); >>>>>> // Read json from buffer var jsonText = >>>>>> Encoding.UTF8.GetString(jsonBuffer, 0, jsonBuffer.Length); ; >>>>>> var json = JsonConvert.DeserializeObject<FeatureCollection>(jsonText); >>>>>> return json; } catch (Exception >>>>>> exception) >>>>>> { throw exception; } >>>>>> finally { // Clear files from GDAL >>>>>> Gdal.Unlink(tempJsonFilename); foreach (var file in files) >>>>>> { >>>>>> Gdal.Unlink($"/vsimem/{file.Filename}"); } } >>>>>> }* >>>>>> >>>>>> >>>>>> Best Regards >>>>>> Christian >>>>>> >>>>>> -- >>>>>> >>>>>> *Christian Sörensen* >>>>>> *UX Productions AB* >>>>>> www.uxproductions.se | christ...@uxproductions.se | +46 (0)70 26 77 >>>>>> 212 >>>>>> P Överväg miljöpåverkan innan du skriver ut detta e-postmeddelande >>>>>> _______________________________________________ >>>>>> gdal-dev mailing list >>>>>> gdal-dev@lists.osgeo.org >>>>>> https://lists.osgeo.org/mailman/listinfo/gdal-dev >>>>> >>>>> >>> >>> -- >>> >>> *Christian Sörensen* >>> *UX Productions AB* >>> www.uxproductions.se | christ...@uxproductions.se | +46 (0)70 26 77 212 >>> P Överväg miljöpåverkan innan du skriver ut detta e-postmeddelande >>> >> > > -- > > *Christian Sörensen* > *UX Productions AB* > www.uxproductions.se | christ...@uxproductions.se | +46 (0)70 26 77 212 > P Överväg miljöpåverkan innan du skriver ut detta e-postmeddelande >
_______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/gdal-dev