[mapguide-users] switching to Maestro 5 API

mika at digikartta.net mika at digikartta.net
Tue Nov 26 12:54:41 PST 2013


IMutableFeature & IMutableRecord?

- mika -

mika at digikartta.net kirjoitti 2013-11-26 16:44:
> Thanks Jackie,
> that helped.
>
> Another question relating to the same field.
>
> Constructing features and inserting them into feature source. I'll
> try to cut irrelevant part out of this. I can't figure out how to do
> this. I guess the actual insert would go like this.
>
> IInsertFeatures ins =
> (IInsertFeatures)conn.CreateCommand((int)CommandType.InsertFeature);
>                                 ins.FeatureSourceId = "xxx";
>                                 ins.ClassName = "yyy";
>                                 ins.Execute();
>
> But how would I "bind" and construct the "propertycollection" for
> that? Any examples?
>
> This is a snippet from my old method.
> - mika -
>
>
>     public int insertRoutes(MgResourceIdentifier mri, List<Feature> 
> routes)
>     {
>         int inserted = 0;
>         MgFeatureCommandCollection commands = new 
> MgFeatureCommandCollection();
>         MgFeatureService mfs = this.featSrvc;
>         MgPropertyCollection insertedFeatures;
>         MgAgfReaderWriter agfRW = new MgAgfReaderWriter();
>         foreach (Feature route in routes)
>         {
>             MgPropertyCollection routeCol = new 
> MgPropertyCollection();
>             MgGeometryFactory geometryFactory = new 
> MgGeometryFactory();
>             if (route.geometry.type == "MultiPoint")
>             {
>                 MgPointCollection pointCol = new MgPointCollection();
>                 MgPoint uusipiste =
> 
> geometryFactory.CreatePoint(geometryFactory.CreateCoordinateXY((double)route.geometry.coordinates[0][0],
> (double)route.geometry.coordinates[0][1]));
>                 pointCol.Add(uusipiste);
>                 MgMultiPoint uudetpisteet =
> geometryFactory.CreateMultiPoint(pointCol);
>                 //MgPoint uusipiste =
> 
> geometryFactory.CreatePoint(geometryFactory.CreateCoordinateXY((double)route.geometry.coordinates[0][0],
> (double)route.geometry.coordinates[0][1]));
>                 MgByteReader agf = agfRW.Write(uudetpisteet);
>                 MgGeometryProperty geom = new 
> MgGeometryProperty("Geom", agf);
>                 MgInt32Property reitinid = new
> MgInt32Property("kohteetid", route.properties.routeid);
>                 MgInt32Property reitinosanid = new
> MgInt32Property("routepartid", route.properties.routepartid);
>                 MgStringProperty type = new MgStringProperty("type",
> route.properties.type);
>                 MgInt32Property angle = new MgInt32Property("angle",
> (int)Math.Round(route.properties.angle, 0));
>                 MgStringProperty symbol = new
> MgStringProperty("symbol", route.properties.symbol);
>                 routeCol.Add(geom);
>                 routeCol.Add(reitinid);
>                 routeCol.Add(reitinosanid);
>                 routeCol.Add(type);
>                 routeCol.Add(angle);
>                 routeCol.Add(symbol);
>                 string fclassName = 
> "schema_routelines:dim_routepoints";
>                 MgInsertFeatures insertFeatures = new
> MgInsertFeatures(fclassName, routeCol);
>                 commands.Add(insertFeatures);
>             }
>             else if (route.geometry.type == "LineString")
>             {
>
>             }
>         }
>         if (commands.Count > 0)
>         {
>             insertedFeatures = mfs.UpdateFeatures(mri, commands, 
> false);
>             inserted = insertedFeatures.Count;
>         }
>         return inserted;
>     }
>
>
>
> Jackie Ng kirjoitti 2013-11-25 06:52:
>> The Maestro SDK contains everything you need to build an application 
>> on top
>> of the Maestro API:
>>
>>  - The Maestro API assemblies
>>  - The full API reference + basic developer's guide in a CHM 
>> document
>>  - Some desktop/web sample applications using the Maestro API
>>  - A ProviderTemplate utility to build your own LocalNative 
>> connection
>> provider that wraps your specific version of the official .net 
>> MapGuide API.
>>
>> You can download the Maestro SDK from the same download page as 
>> Maestro
>> itself: http://trac.osgeo.org/mapguide/wiki/maestro/Downloads
>>
>> To answer your question specifically:
>>
>> Use the CreateCommand() of the IServerConnection to create a 
>> IDeleteFeatures
>> command:
>>
>>      public void ClearDataSource(IServerConnection conn, String
>> dataSourceId, String featureName)
>>      {
>>          IDeleteFeatures deleteCmd =
>> (IDeleteFeatures)conn.CreateCommand(CommandType.DeleteFeatures);
>>          deleteCmd.FeatureSourceId = dataSourceId;
>>          deleteCmd.ClassName = featureName;
>>          deleteCmd.Filter = "ID >= 0";
>>          int nDeleted = deleteCmd.Execute();
>>      }
>>
>> Note that support for IDeleteFeatures varies on the implementation 
>> of
>> IServerConnection. For example, the HTTP one that wraps the mapagent 
>> won't
>> support CRUD operations, but the ones that wrap the official 
>> MapGuide API
>> and mg-desktop do support CRUD operations. You can programmatically 
>> check
>> support for such commands via the capabilities of the 
>> IServerConnection
>>
>> - Jackie
>>
>>
>>
>> --
>> View this message in context:
>> 
>> http://osgeo-org.1560.x6.nabble.com/switching-to-Maestro-5-API-tp5090710p5090931.html
>> Sent from the MapGuide Users mailing list archive at Nabble.com.
>> _______________________________________________
>> mapguide-users mailing list
>> mapguide-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-users


More information about the mapguide-users mailing list