मैंने इसी तरह की एक परियोजना में काम किया, मैंने आर्कोबजेक्ट्स का उपयोग किया। मेरा लक्ष्य दो आसन्न पॉलीलाइनों को जोड़ रहा था यदि इसका एक अंतिम बिंदु एक पॉलीलाइन में दो छोटे पॉलीलाइन बनाने के लिए एक और एक प्रारंभिक बिंदु है। मेरी प्रक्रिया थी:
1. Dictionary<PointKey, FeatureDataList> polylineDictionary;
- पॉइंटके एक ऐसा वर्ग है जिसमें एक बिंदु होता है।
- FeatureDataList एक ऐसा वर्ग है जिसमें IFeatures की सूची है।
दोनों कक्षाएं "बराबर" और "गेटहैशकोड" तरीकों से आगे निकल जाती हैं।
Dictionary<PointKey, FeatureDataList> ToPointDictionary;
Dictionary<PointKey, FeatureDataList> FromPointDictionary;
public void CreateDictionary(IFeatureLayer featureLayer)
{
var featureFunctionality = new FeatureFunctionality();
List<IFeature> features = GetAllFeatures(featureLayer.FeatureClass);
foreach (var feature in features)
{
IPolyline polyline = GetPolylineFromFeature(feature);
AddFeatureInDictionary(ToPointDictionary, feature, polyline.ToPoint);
AddFeatureInDictionary(FromPointDictionary, feature, polyline.FromPoint);
}
}
void AddFeatureInDictionary(Dictionary<PointKey, FeatureDataList> polylineDictionary, IFeature feature, IPoint point)
{
FeatureDataList featureDataList;
PointKey key = PointKey.GetKey(point);
if (!polylineDictionary.ContainsKey(key))
{
featureDataList = new FeatureDataList();
featureDataList.Add(feature);
polylineDictionary.Add(key, featureDataList);
}
else
{
featureDataList = polylineDictionary[key];
featureDataList.Add(feature);
}
}
इन प्रक्रियाओं से मैंने दो शब्दकोष बनाए। शब्दकोश बनाने के बाद, मैं जांचता हूं कि क्या दोनों शब्दकोशों में एक ही बिंदु है और दोनों शब्दकोशों में, उस कुंजी में सुविधा सूची में केवल एक ही विशेषता है, तो मैंने उन दो पॉलीलाइनों के साथ एक नई पॉलीलाइन बनाई और दो लघु पॉलीलाइनों को हटा दिया।
एक में दो पॉलीलाइन को मिलाने के लिए:
private IPolyline GetJoinedPolylineFromFeatures(List<IFeature> features)
{
IPolyline newPolyline = null;
if (features.Count == 2)
{
IPolyline polyline1 = feature1.Shape as IPolyline;
IPolyline polyline2 = feature2.Shape as IPolyline;
if (PointKey.GetKey(polyline1.ToPoint).Equals(PointKey.GetKey(polyline2.FromPoint)))
{
var topoOperator2 = polyline1 as ITopologicalOperator2;
if (topoOperator2 != null)
newPolyline = topoOperator2.Union(polyline2) as IPolyline;
}
else if (PointKey.GetKey(polyline1.FromPoint).Equals(PointKey.GetKey(polyline2.ToPoint)))
{
var topoOperator2 = polyline2 as ITopologicalOperator2;
if (topoOperator2 != null)
newPolyline = topoOperator2.Union(polyline1) as IPolyline;
}
}
return newPolyline;
}