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?


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).


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.


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ê!


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;
        }

    }

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


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.


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.


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.