[fdo-users] RE: RE: Defining SpatialContext - how and when?

Maksim Sestic max at geoinova.com
Mon Jul 9 11:50:56 EDT 2007


Now for the most intriguing part - even Autodesk Map 3D 2007 won't insert a
geometry into a datastore created using it's own Task Manager when it
involves spatial context different than the "Default" one. It reports either
"Error creating spatial context (null) (SRID=xxxx), the WKT provided does
not
match the catalog." or "Bad parameter to method." error.

Map's Task Manager has following procedure when establishing new DataStore:
1) creates DataStore
2) deletes "Default" CS
3) creates given CS under "Default" name
4) creates base class containig an identity and a geometric property
(associtaed to "Default" CS)
(just like what I did)

Inserting geometries (classes) based on given base class doesn't work in Map
either :-) So it must be some quirk within MS SQL Server FDO provider.

Regards,
Maksim Sestic


Maksim Sestic wrote:
> 
> Huh, funny thing but "Autodesk.SqlServer.3.1" provider connection
> capabilities on SpatialContext report following:
> 
> - SupportsCSysWKTFromCSysName: False
> - SupportsMultipleSpatialContexts: True
> 
> I guess I still need to set spatial context WKT by hand and this setting
> shouldn't affect geometries that will get inserted during next stage.
> 
> Anyway, I tried three different approaches and all of them failed, raising
> "Error
> creating spatial context (null) (SRID=486518961), the WKT provided does
> not
> match the catalog." exception:
> 
> 1) create DataStore, then insert new SpatialContext (with WKT string
> defined by hand) and associate schema class geometric properties with
> newly created CS (using SpatialContextAssociation).
> 
> 2) create DataStore, then insert new SpatialContext (without WKT string)
> and associate schema class geometric properties with newly created CS
> (using SpatialContextAssociation).
> 
> 3) create DataStore, then delete "Default" spatial context and create a
> new "Default" one with different precision and envelope (but without WKT
> string, as in it's original settings). Geometric properties, when
> instantiated within schema class, are set to "Default" CS by default so I
> don't need to manually set them.
> 
> The other solution is to convert any MGI coordinate to WGS84 and let them
> into the datastore using "Default" CS, but this is actually not a good one
> since certain coordinate conversions are "one way only" when talking about
> precision. My datastore is supposed to keep GPS-measured coordinates
> precise to a few millimeters, while coordinate conversion roundtrip (MGI
> -> WGS84 -> MGI) involves overall imprecision measured in meters :-) 
> 
> Regards,
> Maksim Sestic
> 
> 
> 
> Gavin Cramer wrote:
>> 
>> Ah, yes, the WKT...
>> 
>> WKT only needs to be manually set (using
>> FdoICreateSpatialContext::SetCoordinateSystemWkt() for FDO providers that
>> cannot generate WKT.  This is the case for most providers (because their
>> underlying datastores don't have native coordinate system support).
>> 
>> For those that do natively support coordinate systems (like Oracle), the
>> provider may also verify that the coordinate system name and WKT are in
>> the datastore's catalogue.  It's generally just a blind string
>> comparison, so minor variations may cause a failure in WKT.  To avoid
>> this, just omit setting the WKT attribute.
>> 
>> There is an FDO capability to let you know whether WKT generation is
>> supported:  FdoIConnectionCapabilities:: SupportsCSysWKTFromCSysName().
>> 
>> By the way, while your code for creating a LineString will work, the
>> FdoIDirectPosition type is not yet a pooled object, and will result in a
>> lot of heap activity.  I recommend looking at the other constructors that
>> are more efficient if you plan to use a lot of features.  For example,
>> there is one that takes an array of ordinates.  There are accessors that
>> tend to be much faster as well.  For example, GetItemByMembers() is the
>> fastest one that does all the ordinate reading for you, and
>> GetOrdinates() is the fastest if you want a raw ordinate array.
>> 
>> Gavin
>> 
>> 
>> 
>> 
>> -----Original Message-----
>> From:	fdo-users-bounces at lists.osgeo.org on behalf of Maksim Sestic
>> Sent:	Sat 07-Jul-07 10:28 AM
>> To:	fdo-users at lists.osgeo.org
>> Cc:	
>> Subject:	[fdo-users] RE: Defining SpatialContext - how and when?
>> 
>> 
>> Dear Gavin,
>> 
>> Thanks for the tip. It's still bugging me. Here's what I'm doing:
>> 
>> 1) create new DataStore named "GIS"
>> 
>> 2) create SpatialContext named "MGI" using following parameters:
>> - Name: MGI
>> - Description: MGI
>> - Coordinate System: MGI / Balkans zone 6
>> - Coordinate System WKT: PROJCS["MGI / Balkans zone 
>> 6",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 
>> 1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0.000000],UNIT["Decimal 
>> Degree",0.01745329251994330]],PROJECTION["Transverse_Mercator"],PARAMETER["Centr
>> al_Meridian",18],PARAMETER["Scale_Factor",0.9999],PARAMETER["False_Easting",6500
>> 000.000000],PARAMETER["False_Northing",0.000000],UNIT["Meter",1.000000000000]]
>> - XY Tolerance: 0.0001
>> - Z Tolerance: 0.0001
>> - Extents Type: SpatialContextExtentType_Static
>> - Extents range from 0,0 to 7000000,7000000
>> 
>> 3) create schema "TESTSCHEMA" containing one class "TESTCLASS" with
>> GeometryValue defined as:
>> geomProperty.GeometryTypes = 7
>> geomProperty.SpatialContextAssociation = "MGI"
>> 
>> -------------
>> 
>> Still, when I try to issue an Insert on some geometry ti throws "Error
>> creating spatial context (null) (SRID=486518961), the WKT provided does
>> not
>> match the catalog." again.
>> 
>> Here's the geometry definition (sitting within specified spatial context
>> extents):
>> 
>> Dim insertCommand As IInsert =
>> CType(m_Transaction.Connection.CreateCommand(CommandType.CommandType_Insert),
>> IInsert)
>> insertCommand.SetFeatureClassName("TESTSCHEMA:TESTCLASS")
>> 
>> Dim factory As AgfGeometryFactory = New AgfGeometryFactory()
>> Dim pcollection As DirectPositionCollection = New
>> DirectPositionCollection()
>> pcollection.Add(factory.CreatePositionXY(6500001, 4950001))
>> pcollection.Add(factory.CreatePositionXY(6534554.445, 4958445.342))
>> 
>> Dim line As ILineString = factory.CreateLineString(pcollection)
>> Dim geometryValue As GeometryValue = New
>> GeometryValue(factory.GetAgf(line))
>> insertCommand.PropertyValues.Add(New PropertyValue("geometry",
>> geometryValue))
>> insertCommand.Execute()
>> 
>> ---------------------------
>> 
>> Regards,
>> Maksim Sestic
>> 
>> 
>> 
>> 
>> Gavin Cramer wrote:
>>> 
>>> Hello, Maksim.  The "active" spatial context is a bit of a stale idea,
>>> and might become deprecated.  Any provider that currently cares about it
>>> actually sets it internally, based on the relevant geometric property's
>>> spatial context association.
>>> 
>>> The association can be set when creating a schema definition via
>>> FdoGeometricPropertyDefinition:: SetSpatialContextAssociation().
>>> 
>>> Gavin
>>> 
>>> 
>>> -----Original Message-----
>>> From: fdo-users-bounces at lists.osgeo.org
>>> [mailto:fdo-users-bounces at lists.osgeo.org] On Behalf Of Maksim Sestic
>>> Sent: Saturday, July 07, 2007 8:50 AM
>>> To: fdo-users at lists.osgeo.org
>>> Subject: [fdo-users] Defining SpatialContext - how and when?
>>> 
>>> 
>>> Autodesk Map 3D 2007 / MS SQL Server 2005
>>> 
>>> I have problems inserting a new GeometryValue due to the "Default"
>>> SpatialContext settings. "Default" SpatialContext has an envelope
>>> (extents)
>>> ranging from -2000000,-2000000 to 2000000,2000000, while my geometry
>>> lies
>>> way beyond default settings. Due to that fact, I keep receiving
>>> following
>>> error: "Error creating spatial context (null) (SRID=486518961), the WKT
>>> provided does not match the catalog."
>>> 
>>> I tried to update Extents value on "Default" spatial context using
>>> CreateSpatialContext command but it's not working (well, at least
>>> nothing
>>> changes in dbo.f_spatialcontextgroup table). Then I resorted to creating
>>> a
>>> new SC.
>>> 
>>> Now, I managed to create a new SpatialContext (named "MGI") with
>>> associated
>>> WKB string, proper extents settings, etc. Alas, I can not activate it
>>> :-)
>>> ActivateSpatialContext command does not affect present spatial contexts
>>> within DataStore - ISpatialContextReader always returns IsActive = False
>>> for
>>> every SC present.
>>> 
>>> I think I'm doing something wrong here, just can't figure out exactly
>>> what... :-) At what moment do I need to create custom SpatialContext
>>> (before
>>> or after creating feature schema?), and how do I apply newly established
>>> SC
>>> on present schema? How do I "force" my newly inserted geometric values
>>> "conformant" to present SC? 
>>> 
>>> Regards,
>>> Maksim Sestic
>>> 
>>> 
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/Defining-SpatialContext---how-and-when--tf4040281s
>>> 18162.html#a11478212
>>> Sent from the fdo-users mailing list archive at Nabble.com.
>>> 
>>> _______________________________________________
>>> fdo-users mailing list
>>> fdo-users at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/fdo-users
>>> 
>>> _______________________________________________
>>> fdo-users mailing list
>>> fdo-users at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/fdo-users
>>> 
>>> 
>> 
>> -- 
>> View this message in context:
>> http://www.nabble.com/Defining-SpatialContext---how-and-when--tf4040281s18162.html#a11478979
>> Sent from the fdo-users mailing list archive at Nabble.com.
>> 
>> _______________________________________________
>> fdo-users mailing list
>> fdo-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/fdo-users
>> 
>> 
>> 
>> _______________________________________________
>> fdo-users mailing list
>> fdo-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/fdo-users
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Defining-SpatialContext---how-and-when--tf4040281s18162.html#a11504392
Sent from the fdo-users mailing list archive at Nabble.com.



More information about the fdo-users mailing list