|
|
|
SSC Journeyman
      
Group: General Forum Members
Last Login: Today @ 3:06 AM
Points: 79,
Visits: 341
|
|
Hi All
I have converted a SQL 2007 database to a SQL 2008 as I need to use spatial data. I have written a ssis task that reads data from a text file and writes the text to a sql2008 table, the problem i am having is that the longitude and latitude data is in a DT_WSTR format and i am not sure how to that into a geography data type as cannot see any any data types that match the geography data type
|
|
|
|
|
SSC Veteran
      
Group: General Forum Members
Last Login: Today @ 5:31 AM
Points: 275,
Visits: 751
|
|
|
|
|
|
SSC Journeyman
      
Group: General Forum Members
Last Login: Today @ 3:06 AM
Points: 79,
Visits: 341
|
|
Being relatively new to SSIS 2008 could anybody help with transforming a text field to geography field, I have read the articles above and I still not sure (its also in c# and i am only have a bit of vb.net experience). I have 3 fields an identifier (1) and an easting coordinate(384405.00) and a northing coordinate(402283.00) and need them to be identifier and geography data type.
A bit of help would be much appreciated
|
|
|
|
|
SSC Veteran
      
Group: General Forum Members
Last Login: Today @ 5:31 AM
Points: 275,
Visits: 751
|
|
Ok, some more help:
I have created a sample SSIS package that can read data from a text file and write the data to a table containing a geometry column.
The package contains a flat file source, a script transform, and a OLE DB destination.
The flat file source extracts the Norting and Easting columns and feeds them into the script. The script adds a new column pt with datatype DT_IMAGE.
My destination table is created using:
create table geo1 (id int, pt geometry)
The script looks like this:
/* Microsoft SQL Server Integration Services Script Component * Write scripts using Microsoft Visual C# 2008. * ScriptMain is the entry point class of the script.*/
using System; using System.Data; using Microsoft.SqlServer.Dts.Pipeline.Wrapper; using Microsoft.SqlServer.Dts.Runtime.Wrapper; using Microsoft.SqlServer.Types; using System.Data.SqlTypes; using System.IO;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute] public class ScriptMain : UserComponent {
MemoryStream ms; BinaryWriter bw;
public override void PreExecute() { base.PreExecute();
// Only allocate these once ms = new MemoryStream(10000); bw = new BinaryWriter(ms); }
public override void Input0_ProcessInputRow(Input0Buffer Row) { // Create a SqlGeometry object representing the given data SqlGeometry g = SqlGeometry.STPointFromText(new SqlChars("POINT ("+Row.Northing+" "+Row.Easting+")"),0);
// Serialize to a memory stream ms.SetLength(0); g.Write(bw); bw.Flush();
// Copy data from memory stream to output column with DT_IMAGE format Row.pt.AddBlobData(ms.GetBuffer(), (int)ms.Length); }
}
Note that you need to add a reference to Microsoft.SqlServer.Types to the script.
In your application you might want to convert the northing and easting to geography (lat/long) but I have not done that to keep the sample simple.
I have included a SSIS 2008 project that you can use directly if desired.
Good luck
|
|
|
|
|
SSCarpal Tunnel
       
Group: General Forum Members
Last Login: Saturday, March 24, 2012 3:31 PM
Points: 4,232,
Visits: 207
|
|
| Sorry to jump in the middle of this but I needed somthing like this but thanks for the information.
|
|
|
|