Extrair limites de camadas detalhadas no ArcGIS Desktop ou QGIS?

10

É possível retornar o perímetro do limite (externo) de uma camada de polígono?

Digamos que você tenha o mapa dos EUA, para simplificar, discriminado no nível do condado, é possível retornar o mapa de fronteira de todo o país a partir desse mapa?

dassouki
fonte
Então, no caso de exemplo dos EUA, você quer dizer, na verdade, o esboço dos estados, NÃO a caixa delimitadora, certo? Se sim, que tal uma dissolução da camada de condados?
Chad Cooper
@ Chad Cooper - quando eu dissolvo a camada, ainda recebo algumas linhas aparecendo para condados e estados.
dassouki

Respostas:

6

Você pode apenas fazer uma dissolução na camada do condado (não deixe de selecionar apenas os municípios que deseja dissolver).

Tac194
fonte
Estou recebendo algumas linhas internas ainda aparecendo em dissolução.
dassouki
3
Você pode armazenar em buffer duas vezes para eliminar as linhas internas? Fora, para "comer" as linhas, depois volte para dentro, para restaurar o tamanho original.
mwalker
por alguma razão isso funcionou. Eu sei que é o "hackiest" de soluções, mas esta foi a única solução que se livrou das linhas
dassouki
1
+1 Esta é realmente uma ótima solução. Ele funciona acomodando pequenas lascas e sobreposições nos polígonos do componente (e também supera muitos bugs inerentes ao software).
whuber
1
Eu usei o conselho de mwalker para me proteger. Espero que você possa incluí-lo em sua resposta.
dassouki
4

Você pode usar o módulo GRASS: v.dissolve Você só precisa importar seus dados para o GRASS. Aqui está uma tela de transferência de dados para o Grass a partir do QGis.

dimitris
fonte
3

Permita-me conectar meu próprio projeto ... O Boundary Generator fornecerá limites externos e internos de cada polígono (como recursos de linha).

Os limites internos são atribuídos com o FID para cada um dos dois polígonos que compartilham essa borda. Os limites externos devem ter um FID zero para um desses dois, para facilitar a seleção do resultado completo.

O bom de fazer vs dissolver é que adicionei alguns botões sobre a precisão para que ele possa lidar com dados não muito perfeitos. (Qual a distância entre duas bordas poligonais a ser considerada uma borda compartilhada? Quanto desvio angular é necessário?)

Ainda está em alfa e já faz um tempo desde que eu lidei com uma atualização; Eu adoraria ouvir como isso funciona para você!

Dan S.
fonte
2
 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;
        }

    }
patrick
fonte
2

Você recebe linhas quando dissolve porque os limites não são perfeitos.

Independentemente do produto de software, faça o seguinte:

Faça uma integração . texto alternativo

Então faça uma dissolução . texto alternativo

Simon
fonte
Eu tentei isso várias vezes, e não funcionou :(, eu continuo perdendo alguns polígonos, eu usei uma tolerância muito pequena e uma muito grande bem
dassouki
1

Parece que o exemplo de Bounding Containers publicado em arcgis.com funcionará para o que você deseja.

Derek Swingley
fonte
Este é um bom pensamento, mas é improvável que essa solução funcione dessa maneira. O objetivo é fornecer informações geométricas adicionais sobre os recursos, localizando o menor membro de uma classe de formas que contém os recursos, como um retângulo, círculo, elipse ou polígono convexo. O resultado é sempre um daqueles que contêm formas. Em geral, ele não coincide exatamente com a forma original, a menos que esse limite já tenha a forma desejada.
whuber
1

Sei que essa é uma pergunta antiga, mas acho que a resposta que acabei de encontrar foi apresentada desde as anteriores aqui, por isso estou compartilhando-a com as pessoas que a encontrarem em uma pesquisa.

O QGIS (a partir da versão 2.14, pelo menos) possui um "Preencher furos" na caixa de ferramentas Processamento, em QGIS geoalgoritmos> Ferramentas de geometria vetorial. Acho que a dissolução de formas e a execução de Fill Holes com o parâmetro Max area set muito alto resolve esse problema.

Eldan Goldenberg
fonte
0

Você também pode estar procurando o que costumava ser chamado de funcionalidade DROPLINE.

Embora não tenha sobrevivido à transição da Estação de Trabalho ArcInfo para ArcGIS Desktop, atualmente existe uma idéia do ArcGIS para restaurá-lo:

Seria bom ter a opção de eliminar as linhas entre polígonos que têm os mesmos valores para um campo especificado. Essa funcionalidade costumava estar disponível no ArcPlot como o comando DROPLINE e era amplamente usada como uma maneira de evitar a criação de um novo conjunto de dados com o comando dissolve.

PolyGeo
fonte
0

Você pode usar a ST_UNIONfunção no PostGIS do QGIS DB Manager para agregar todos os polígonos da camada (ou muitos grupos de polígonos em polígonos maiores). A partir da documentação:

A variante 2 é uma função agregada que pega um conjunto de geometrias e as une em uma única ST_Geometry, resultando em nenhuma região que se cruza

até
fonte