Bir poligon tabakasının sınır (dış) çevresini döndürmek mümkün müdür?
ABD haritasına sahip olduğunuzu varsayalım, basitlik için, ilçe düzeyine ayrılmış olarak, tüm haritanın sınır haritasını bu haritadan döndürmek mümkün mü?
Bir poligon tabakasının sınır (dış) çevresini döndürmek mümkün müdür?
ABD haritasına sahip olduğunuzu varsayalım, basitlik için, ilçe düzeyine ayrılmış olarak, tüm haritanın sınır haritasını bu haritadan döndürmek mümkün mü?
Yanıtlar:
İlçe katmanında bir erime yapabilirsiniz (sadece eritmek istediğiniz ilçelerin seçili olduğundan emin olun).
Kendi projemi takmama izin ver ... Sınır Üreteci size her çokgenin hem iç hem de dış sınırlarını verecektir (çizgi özellikleri olarak).
İç sınırlar, o sınırı paylaşan iki çokgenin her biri için FID ile ilişkilendirilir. Dış sınırlar, bu ikisinden biri için sıfır FID değerine sahip olmalıdır, bu nedenle tüm sonuç arasından seçim yapmak kolaydır.
Çözülmeye karşı iyi bir şey, mükemmel olmayan verilerle başa çıkabilmek için hassasiyet üzerine birkaç düğme ekledim. (İki çokgen kenarlık paylaşılan bir kenarlık olarak ne kadar ayrı düşünülmelidir? Ne kadar açı sapması gerekir?)
Hala alfa ve bir güncellemeyle uğraştığımdan beri bir süre geçti; Senin için ne kadar iyi çalıştığını duymak isterim!
public static IPolygon getPolygonFromLayer(ILayer layer)
{
IFeatureLayer FLayer = layer as IFeatureLayer;
IFeatureClass FClass = FLayer.FeatureClass;
return polygonMerge(FClass);
}
private static IPolygon polygonMerge(IFeatureClass featureClass)
{
if (featureClass == null) return null;
IGeoDataset geoDataset = featureClass as IGeoDataset;
//You can use a spatial filter to create a subset of features to union together.
//To do that, uncomment the next line, and set the properties of the spatial filter here.
//Also, change the first parameter in the IFeatureCursor.Seach method.
//ISpatialFilter queryFilter = new SpatialFilterClass();
IGeometry geometryBag = new GeometryBagClass();
//Define the spatial reference of the bag before adding geometries to it.
geometryBag.SpatialReference = geoDataset.SpatialReference;
//Use a nonrecycling cursor so each returned geometry is a separate object.
IFeatureCursor featureCursor = featureClass.Search(null, false);
IGeometryCollection geometryCollection = geometryBag as IGeometryCollection;
IFeature currentFeature = featureCursor.NextFeature();
while (currentFeature != null)
{
//Add a reference to this feature's geometry to the bag.
//Since you don't specify the before or after geometry (missing),
//the currentFeature.Shape IGeometry is added to the end of the geometryCollection.
object missing = Type.Missing;
geometryCollection.AddGeometry(currentFeature.Shape, ref missing, ref missing);
currentFeature = featureCursor.NextFeature();
}
// Create the polygon that will be the union of the features returned from the search cursor.
// The spatial reference of this feature does not need to be set ahead of time. The
// ConstructUnion method defines the constructed polygon's spatial reference to be the
// same as the input geometry bag.
ITopologicalOperator unionedPolygon = new PolygonClass();
unionedPolygon.ConstructUnion(geometryBag as IEnumGeometry);
return unionedPolygon as IPolygon;
}
}
Çözüldüğünüzde elde ettiğiniz çizgiler, sınırlar sorunsuz olmadığı için.
Yazılım ürününden bağımsız olarak aşağıdakileri yapın:
Bir entegrasyon yapın .
Sonra çözün .
Gibi geliyor Sınırlandırma Konteynerleri örnek arcgis.com yayınlanan istediğini için çalışacaktır.
Bunun eski bir soru olduğunu biliyorum, ama sanırım bulduğum cevap burada öncekilerden beri tanıtıldı, bu yüzden bunu bir aramada bulan insanlar için paylaşıyorum.
QGIS (en az 2.14 sürümünden itibaren), İşleme araç kutusunda, QGIS geoalgoritmaları> Vectory geometri araçları altında bir "Dolgu Delikleri" vardır. Şekillerin çözülmesinin ve daha sonra Max area parametresi çok yüksek ayarlanmış olarak Doldurma Deliklerinin çalıştırılmasının bu sorunu çözdüğünü fark ettim.
Ayrıca eskiden DROPLINE işlevselliği olarak da biliniyor olabilirsiniz.
ArcInfo İş İstasyonundan ArcGIS Masaüstü geçişine geçemese de, şu anda geri yüklenmesi için bir ArcGIS Fikri var:
Belirtilen bir alan için aynı değerlere sahip çokgenler arasında satır bırakma seçeneğine sahip olmak güzel olurdu. Bu işlevsellik ArcPlot'ta DROPLINE komutu olarak mevcuttu ve dissolve komutuyla yeni bir veri kümesi oluşturmaktan kaçınmanın bir yolu olarak yaygın olarak kullanılıyordu.
ST_UNION
Katmandaki tüm çokgenleri (veya birçok çokgen grubunu daha büyük çokgenler halinde) toplamak için QGIS DB Manager'dan PostGIS'deki işlevi kullanabilirsiniz . Belgelerden:
Varyant 2, bir dizi geometri alıp bunları tek bir ST_Geometriye birleştiren ve kesişen bölgelere neden olmayan bir toplama işlevidir