Converteer polylijn met linker-ID en rechter-ID naar polygonen met ID

Ik heb een polyline-vormbestand met links-ID en rechter-ID-informatie en moeite om deze polylijnlaag om te zetten naar polygoon met ID via arcpy.

Ik gebruik de ArcGIS (editor) -licentie dus feature to polygon tool is niet beschikbaar voor mij. Ik weet ook dat er een aantal methoden beschikbaar zijn, zoals this en deze in ArcGIS als u een editorlicentie hebt maar ik wil arcpy gebruiken voor automatiseer mijn workflow.

Any ideas how i can do it using arcpy?enter image description here

5
Je diagram heeft polylijnen met pijlpunten aan beide uiteinden. Om te weten aan welke kant van de polylijn de genummerde polygoon valt, zouden deze niet unidirectioneel hoeven te zijn?
toegevoegd de auteur UnkwnTech, de bron
Zonder in staat te zijn om van het einde van een polylijn naar het begin van de volgende te gaan om de polygoon te bepalen die moet worden ingesloten, denk ik dat je een andere manier nodig hebt om de volgorde van polylijnen rond een veelhoek te bepalen.
toegevoegd de auteur UnkwnTech, de bron
Ik heb aan beide kanten pijlpunten gebruikt, ik vind het een slecht idee. De richting van polylijnen is gemengd, maar als we deze tabel doorzoeken, zullen "L_ID = 2 of R_ID = 2" alle polylijnen selecteren die vereist zijn om veelhoek met ID = 2 te construeren.
toegevoegd de auteur rptony, de bron

3 antwoord

Ik zie niet een strightforward manier om dit te doen in normale ArcPy-licenties zonder wielen opnieuw uit te vinden.

Lees net over Shapely (downloadlink) , een python-pakket , inclusief de "polygonize" -functie van vertrouwde JTS/GEOS-suites ..

Mijn idee is dat we het Shapely-pakket in ArcPy kunnen importeren en de WKT van de ESRI-polyline-geometrieën kunnen krijgen en deze aan de polygonizer kunnen doorgeven. Dit geeft de resulterende polygonen. Deze kunnen worden omgezet naar ESRI-polylinegeometrieën. Hoewel ik moet zeggen, mijn kennis van Python is verschrikkelijk .. dit is slechts een generiek idee ..

hier is een voorbeeld van een polygonizer ..

>>> from shapely.geometry import LineString, Point
    >>> from shapely.ops import polygonize
    >>> lines = [
    ... LineString(((0, 0), (1, 1))),
    ... LineString(((0, 0), (0, 1))),
    ... LineString(((0, 1), (1, 1))),
    ... LineString(((1, 1), (1, 0))),
    ... LineString(((1, 0), (0, 0))),
    ... LineString(((5, 5), (6, 6))),
    ... Point(0, 0),
    ... ]
    >>> result = polygonize(lines)
    >>> list(result)
    [, ]

    >>> lines2 = [
    ... ((0, 0), (1, 1)),
    ... ((0, 0), (0, 1)),
    ... ((0, 1), (1, 1)),
    ... ((1, 1), (1, 0)),
    ... ((1, 0), (0, 0)),
    ... ((5, 5), (6, 6)),
    ... ]
    >>> result2 = polygonize(lines2)
    >>> list(result2)
    [, ]

Ik weet ook niet zeker wat we kunnen doen met de LEFT_ID en RIGHT_ID. Ik denk dat deze niet relevant zijn. Update mij als ik het mis heb.

2
toegevoegd
Ik denk dat je hier op de goede weg bent. Er zijn 2 items die volgens mij moeten worden uitgewerkt. De eerste is de volgorde van de lijnen die in de polygonizerfunctie zouden worden ingevoerd. Ze moeten in de juiste volgorde staan ​​of de polygoon heeft waarschijnlijk problemen met draaien. Ik weet niet veel over die functie, dus het maakt misschien niet uit. De manier waarop de Left_ID en Right_ID handig kunnen zijn, is dat je op basis van de ID's kunt groeperen om te bepalen welke regels in een bepaalde polygoon moeten worden opgenomen.
toegevoegd de auteur SergV, de bron
nou dat zorgt voor het ordeprobleem. Ik denk dat de links en rechts ID's nog steeds kunnen worden gebruikt om ervoor te zorgen dat de polygonen worden toegewezen met de juiste ID-tag. Ik zou het de komende dagen misschien proberen om een ​​code samen te stellen om dit te doen.
toegevoegd de auteur SergV, de bron
@GetSpatial order is geen probleem in de polygonizerfunctie. Dit is wat wordt vermeld in de JTS-site. "Polygoniseert een set Geometrys die lijnwerk bevatten dat de randen van een vlakke grafiek weergeeft.Elke dimensie van geometrie wordt gehanteerd - het samenstellende lijnwerk is De randen moeten op de juiste manier zijn genaaid, dat wil zeggen dat ze alleen aan hun eindpunten moeten komen. De Polygonizer zal nog steeds op onjuist geknoopte invoer lopen maar geen polygonen vormen van onjuiste geknipte randen. " vividsolutions.com/jts/javadoc/com/ vividsolutions/jts/operat & zwnj; ion/& hellip;
toegevoegd de auteur Katherine Pitta, de bron
@GetSpatial - geweldig..ik heb het gedaan met een C# poort van JTS en arcobjects..maar python zou leuk zijn ..
toegevoegd de auteur Katherine Pitta, de bron

Als je Python en de GeoProcessor wilt gebruiken om polygonen van je lijnen te maken, moet je het Help-bestand bekijken en zoeken naar een pagina met de naam werken met geometrie in Python .

Je moet een cursor over je polylijnen maken en ze aan elkaar rijgen. Misschien moet je ze eerst "exploderen" in punten? Hoe dan ook, niet zeker hoe je het probleem kunt oplossen van de volgorde waarin je de polylijnen bezoekt. Ik weet het niet (zoals ik het nog nooit heb geprobeerd in Python) als de resulterende polygoongeometrie kan worden vereenvoudigd, dat wil zeggen dat de volgorde van de hoekpunten correct wordt gemaakt wanneer u de polygoon maakt.

1
toegevoegd

misschien kunt u arcpy.FeatureToRaster_conversion() gebruiken om een ​​raster van uw polylijnen te maken en vervolgens arcpy.RasterToPolygon_conversion() om de veelhoek te maken

1
toegevoegd