เป็นไปได้ไหมที่จะส่งคืนขอบเขต (นอก) ขอบเขตของชั้นรูปหลายเหลี่ยม?
สมมติว่าคุณมีแผนที่ของสหรัฐอเมริกาสำหรับความเรียบง่ายแบ่งออกเป็นระดับเขตเป็นไปได้หรือไม่ที่จะส่งคืนแผนที่ขอบเขตของทั้งประเทศจากแผนที่นั้น
เป็นไปได้ไหมที่จะส่งคืนขอบเขต (นอก) ขอบเขตของชั้นรูปหลายเหลี่ยม?
สมมติว่าคุณมีแผนที่ของสหรัฐอเมริกาสำหรับความเรียบง่ายแบ่งออกเป็นระดับเขตเป็นไปได้หรือไม่ที่จะส่งคืนแผนที่ขอบเขตของทั้งประเทศจากแผนที่นั้น
คำตอบ:
คุณสามารถทำการยุบบนเลเยอร์เขต (ต้องแน่ใจว่ามีเพียงมณฑลที่คุณต้องการยุบที่เลือกไว้)
คุณสามารถใช้โมดูล GRASS: v.dissolve
คุณจะต้องนำเข้าข้อมูลของคุณไปยัง GRASS เท่านั้น นี่คือการส่งข้อมูลของคุณไปยัง Grass จากหน้าจอ QGis
อนุญาตให้ฉันเสียบโปรเจคของฉันเอง ... Boundary Generatorจะให้ทั้งขอบเขตภายนอกและภายในของรูปหลายเหลี่ยมทุกรูปแบบ
ขอบเขตภายในมีการระบุด้วย FID สำหรับรูปหลายเหลี่ยมสองรูปแต่ละรูปที่ใช้เส้นขอบนั้น ขอบเขตภายนอกควรมี FID เป็นศูนย์สำหรับหนึ่งในสองแห่งนั้นจึงง่ายต่อการเลือกจากผลลัพธ์เต็มรูปแบบ
สิ่งที่ดีเกี่ยวกับมันและการสลายตัวคือฉันได้เพิ่มลูกบิดสองสามอันเพื่อความแม่นยำเพื่อให้สามารถจัดการกับข้อมูลที่ไม่สมบูรณ์แบบได้ (เส้นขอบรูปหลายเหลี่ยมสองอันที่ห่างกันควรพิจารณาเป็นเส้นแบ่งที่ใช้ร่วมกันต้องเบี่ยงเบนมุมเท่าไหร่)
มันยังอยู่ในอัลฟาและไม่นานหลังจากที่ฉันได้ทำการอัพเดท ฉันชอบที่จะได้ยินว่ามันทำงานได้ดีสำหรับคุณ!
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;
}
}
เส้นที่คุณได้รับเมื่อคุณยุบเพราะขอบเขตไม่ราบรื่น
โดยไม่คำนึงถึงผลิตภัณฑ์ซอฟต์แวร์ให้ทำดังต่อไปนี้:
ดูเหมือนว่าตัวอย่างของBounding Containers ที่โพสต์บน arcgis.comจะใช้ได้กับสิ่งที่คุณต้องการ
ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันคิดว่าคำตอบที่ฉันเพิ่งค้นพบได้รับการแนะนำมาตั้งแต่ก่อนหน้านี้ดังนั้นฉันจึงแบ่งปันให้กับผู้ที่พบสิ่งนี้ในการค้นหา
QGIS (ตั้งแต่รุ่น 2.14 เป็นอย่างน้อย) มี "Fill Holes" ในกล่องเครื่องมือการประมวลผลภายใต้วิธีการทางภูมิศาสตร์ของ QGIS> เครื่องมือเรขาคณิต Vectory ฉันพบว่ารูปร่างที่ละลายแล้วเรียกใช้ Fill Holes ด้วยพารามิเตอร์พื้นที่สูงสุดตั้งค่าที่สูงมากแก้ปัญหานี้
คุณอาจกำลังมองหาสิ่งที่เคยเรียกว่าฟังก์ชั่น DROPLINE
แม้ว่าจะไม่รอดจากการเปลี่ยน ArcInfo Workstation เป็น ArcGIS Desktop แต่ขณะนี้มีแนวคิด ArcGIS ที่จะกู้คืน:
มันจะดีถ้ามีตัวเลือกในการดรอปบรรทัดระหว่างรูปหลายเหลี่ยมที่มีค่าเดียวกันสำหรับเขตข้อมูลที่ระบุ ฟังก์ชั่นนี้เคยใช้งานได้ใน ArcPlot เป็นคำสั่ง DROPLINE และใช้กันอย่างแพร่หลายเพื่อหลีกเลี่ยงการสร้างชุดข้อมูลใหม่ด้วยคำสั่ง dissolve
คุณสามารถใช้ST_UNION
ฟังก์ชันใน PostGIS จาก QGIS DB Manager เพื่อรวมรูปหลายเหลี่ยมทั้งหมดในเลเยอร์ (หรือหลาย ๆ กลุ่มของรูปหลายเหลี่ยมเป็นรูปหลายเหลี่ยมขนาดใหญ่) จากเอกสารประกอบ:
Variant 2 เป็นฟังก์ชั่นรวมที่ใช้ชุดของรูปทรงเรขาคณิตและสหภาพใน ST_Geometry เดียวทำให้ไม่เกิดการตัดกัน