আমি বর্তমানে এমন একটি প্রকল্পে কাজ করছি যেখানে ব্যবহারকারীরা যখন তাদের সিস্টেমে তাদের মানচিত্র (এমএক্সডি) লোড করেন, আমরা তাদের জন্য বেশ কয়েকটি কাস্টম ফিচারুয়ার তৈরি করি। আমার সমস্যাটি হ'ল, আমি ইতিমধ্যে এই স্তরগুলি ইতিমধ্যে তৈরি করেছি কিনা তা যাচাই করার আমার কোনও ধারণা নেই (বলুন যে ব্যবহারকারীরা এমএক্সডি আপ করে, স্তর তৈরি করেছে, সংরক্ষণ করুন, এমএক্সডি পুনরায় লোড করুন, স্তরগুলি ইতিমধ্যে বিদ্যমান কিনা তা যাচাই করা উচিত)।
আরকিজেইনাইন 10-এ ফিচারুয়ারলায়ার ক্লাসের জন্য কী অনন্য আইডি রয়েছে, ফিচারলায়ারক্লাসে ফিচারক্লাসে ওআইডিএন, এবং অবজেক্টক্লাসিড রয়েছে, কিন্তু সেগুলি কাজ করে না বলে মনে হচ্ছে (অবজেক্টক্লাসআইডি বরাদ্দ করতে পারে না, এবং ওআইডিএনমে ইউনিক আইডি ব্যবহার করতে চায় না)?
আমি আমার লেয়ারটিকে এই জাতীয় ফিচারলেক্লাস বিজনেস অবজেক্ট হিসাবে তৈরি করেছি।
কোড:
/// <summary>
/// Unique Route LayerId
/// </summary>
public static Guid RouteFeatureLayerId
{
get { return Guid.Parse("ba25a332-0e48-4ce5-a4c5-38dc36c0700c"); }
}
/// <summary>
/// Feature class that stores info on the routes
/// </summary>
public FeatureLayerClass RouteFeatureLayer
{
get
{
if (_routeFeatureClass == null)
{
IPropertySet property = new PropertySetClass();
property.SetProperty("Id", RouteFeatureLayerId);
_routeFeatureClass = new FeatureLayerClass();
_routeFeatureClass.FeatureClass = CreateFeatureClass(Workspace, null, ShapeType.Polylines.ToString(), CreateFields(ShapeType.Polylines, FeatureLayerType.Routes), null, null, "");
_routeFeatureClass.Name = "Routes";
_routeFeatureClass.Visible = true;
_routeFeatureClass.Cached = true;
_routeFeatureClass.AddExtension(property);
CustomLayers.Add(_routeFeatureClass);
}
return _routeFeatureClass;
}
set
{
_routeFeatureClass = value;
}
}
ওয়ার্কস্পেস তৈরি করা হচ্ছে
/// <summary>
/// Create a workspace for the shapefile or geodatabase
/// </summary>
private IWorkspace CreateWorkspace(string workspaceType, string workspaceDirectory)
{
Type factoryType = null;
IWorkspaceFactory workspaceFactory = null;
switch (workspaceType)
{
case "Shapefile":
// Instantiate a Shapefile workspace factory
factoryType = Type.GetTypeFromProgID("esriDataSourcesFile.ShapefileWorkspaceFactory");
break;
case "PersonalGeodatabase":
// Instantiate an Access workspace factory
factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.AccessWorkspaceFactory");
break;
case "FileGeodatabase":
// Instantiate a file geodatabase workspace factory
factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
break;
}
workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
//Create a directory hierarchy to seperate out datasets created for Points, Polylines, and Polygons
Directory.CreateDirectory(workspaceDirectory);
IWorkspaceName workspaceName = workspaceFactory.Create(workspaceDirectory + "\\", workspaceType, null, 0);
IName Name = (IName)workspaceName;
IWorkspace workspace = (IWorkspace)(Name.Open());
return workspace;
}
ফিচারক্লাস তৈরি করা হচ্ছে
/// <summary>
/// Helper to create a Feature Class.
/// </summary>
private IFeatureClass CreateFeatureClass(IWorkspace workspace, IFeatureDataset featureDataset, string featureClassName, IFields fields, ESRI.ArcGIS.esriSystem.UID CLSID, ESRI.ArcGIS.esriSystem.UID CLSEXT, string configKeyword)
{
IFeatureClass featureClass = null;
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace; // Explicit Cast
string shapeFieldName = String.Empty;
try
{
if (featureClassName == "")
{
return null; // name was not passed in
}
//else if (((IWorkspace2)workspace).get_NameExists(esriDatasetType.esriDTFeatureClass, featureClassName))
//{
// featureClass = featureWorkspace.OpenFeatureClass(featureClassName); // feature class with that name already exists
// return featureClass;
//}
// assign the class id value if not assigned
if (CLSID == null)
{
CLSID = new ESRI.ArcGIS.esriSystem.UIDClass();
CLSID.Value = "esriGeoDatabase.Feature";
}
// locate the shape field
for (Int32 j = 0; j < fields.FieldCount; j++)
{
if (fields.get_Field(j).Type == esriFieldType.esriFieldTypeGeometry)
{
shapeFieldName = fields.get_Field(j).Name;
}
}
// finally create and return the feature class
if (featureDataset == null)
{
// if no feature dataset passed in, create at the workspace level
featureClass = featureWorkspace.CreateFeatureClass(featureClassName, fields, CLSID, CLSEXT, esriFeatureType.esriFTSimple, shapeFieldName, configKeyword);
}
else
{
featureClass = featureDataset.CreateFeatureClass(featureClassName, fields, CLSID, CLSEXT, esriFeatureType.esriFTSimple, shapeFieldName, configKeyword);
}
}
catch (Exception ex)
{
Debug.Assert(false, ex.ToString());
Logger.Log.Debug(ex);
}
return featureClass;
}
স্তর পেতে কোড
/// <summary>
/// Finds the layer
/// </summary>
/// <returns>the subcatchment layer</returns>
private IGeoFeatureLayer GetLayer(FeatureLayerClass featureLayer)
{
IGeoFeatureLayer layer = null;
ILayerExtensions layerExtension;
for (int x = 0; x < MapControl.LayerCount; x++)
{
layerExtension = ((ILayerExtensions)MapControl.get_Layer(x));
if (featureLayer.ExtensionCount > 0 && layerExtension.ExtensionCount > 0 &&
layerExtension.get_Extension(0) is PropertySetClass &&
featureLayer.get_Extension(0) is PropertySetClass &&
((PropertySetClass)layerExtension.get_Extension(0)).GetProperty("Id") == ((PropertySetClass)featureLayer.get_Extension(0)).GetProperty("Id"))
{
layer = MapControl.get_Layer(x) as IGeoFeatureLayer;
break;
}
}
return layer;
}
ধন্যবাদ এবং শুভেচ্ছা, কেভিন