আমি এর অনুরূপ একটি প্রকল্পে কাজ করেছি, আমি আরকোবজেক্টস ব্যবহার করেছি। আমার লক্ষ্যটি দুটি সংলগ্ন পলিনগুলিকে সংযুক্ত করছিল যদি এর একের শেষ বিন্দুতে অন্য একটির একের প্রথম বিন্দুতে দুটি সংক্ষিপ্ত পলিনগুলিকে একক পললিনে পরিণত করা হয়। আমার প্রক্রিয়াটি ছিল:
1. Dictionary<PointKey, FeatureDataList> polylineDictionary;
- পয়েন্টকি একটি শ্রেণি যা একটি বিন্দু ধারণ করে।
- ফিচারডাটালিস্ট এমন একটি শ্রেণি যা আইফাইচারগুলির তালিকা অন্তর্ভুক্ত করে।
উভয় শ্রেণি "সমান" এবং "গেটহ্যাশকোড" পদ্ধতিগুলিকে ওভাররাইড করে।
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;
}