Acho que este post no blog complementa bem o post recente de Dan Patterson<\/A>, ...That empty feeling...<\/A> A conversa sobre geometria nula e vazia no ArcGIS não é nova, mas realmente exige algum entendimento.<\/EM><\/P><\/P>Quando se trata de criar novas classes de feição, tenho certeza que a maioria das pessoas está bastante familiarizada com a seguinte tela do assistente Nova Classe de Feição:<\/P><\/P><\/P>Ao criar uma nova classe de feição usando o ArcGIS Desktop, seja pela GUI ou ArcPy, as configurações padrão permitem valores NULL no campo SHAPE (veja o destaque amarelo acima). Independentemente de NULLs no campo SHAPE serem uma boa ou má ideia, eles são suportados e permitidos por padrão, então é bom entender o que acontece ou pode acontecer quando as geometrias não são preenchidas junto com o restante do registro nas classes de feição.<\/P><\/P>Após solucionar vários casos onde NULL não era NULL, decidi analisar mais profundamente o que realmente acontece quando as geometrias não são preenchidas nas classes de feição. Descobri que a resposta depende tanto da ferramenta quanto do tipo de geodatabase usado para inserir, armazenar e recuperar registros. Aqui estão os resultados para algumas das ferramentas e tipos de geodatabases mais comuns.<\/P><\/P>A Tabela 1 mostra o que realmente é preenchido no campo SHAPE quando nada, None<\/SPAN>, uma geometria vazia e uma geometria não vazia são inseridos em uma classe de feição poligonal usando três métodos diferentes.<\/P><\/P>TABELA 1: Valores do Campo SHAPE na Classe de Feição<\/TD><\/TR>Tipo de Armazenamento<\/P><\/P><\/TH>Método de Inserção<\/P><\/P><\/TH>NADA<\/STRONG><\/TH>NONE<\/STRONG><\/TH>VAZIO<\/STRONG><\/TH>POLYGON<\/STRONG><\/TH><\/TR>PGDB<\/P><\/TD>Editor ArcMap<\/P><\/TD>Nulo<\/TD>N/A<\/TD>N/A<\/TD>Polígono<\/TD><\/TR>PGDB<\/TD>arcpy.InsertCursor<\/TD>Nulo<\/TD>Erro<\/TD>Vazio<\/TD>Polígono<\/TD><\/TR>PGDB<\/TD>arcpy.da.InsertCursor<\/TD>Nulo<\/TD>Nulo<\/TD>Nulo<\/TD>Polígono<\/TD><\/TR>FGDB<\/TD>Editor ArcMap<\/TD>Vazio<\/TD>N/A<\/TD>N/A<\/TD>Polígono<\/TD><\/TR> < TD style= " padding : 6 px ; " > FGDB < / TD > < TD style= " padding : 6 px ; " > arcpy.InsertCursor < / TD > < TD style= " padding : 6 px ; " > Nulo < / TD > < TD style= " padding : 6 px ; color : # f49697 ; " > Erro < / TD > < TD style= " padding : 6 px ; " > Vazio < / TD > < TD style= " padding : 6 px ; " > Polígono < / TD > </ TR > < TR > < TD style= " padding : 6 px ; " > FGDB < / TD > < TD style= " padding : 6 px ; " > arcpy.da.InsertCursor < / TD > < TD style= " padding : 6 px ; " > Nulo < / TD > < TD style= " padding : 6 px ; " > Nulo < / TD > < TD style= " padding : 6 px ; " > Nulo < / TD > < TD style= " padding : 6 px ; " > Polígono < / TD > </ TR > < TD style= " padding : 6 px ; " > SDE(SQL) < / TD > < TD style= " padding : 6 px ; " > Editor ArcMap < / TD > < TD style= " padding : 6 px ; " > Vazio < / TD > < TD style= " padding : 6 px ; color : # dadada ; " > N/A < / TD > < TD style= " padding : 6 px ; color : # dadada ; " > N/A < / TD > < TD style= " padding : 6 px ; " > Polígono < / TD > </ TR > < TD style= " padding : 6 px ; " > SDE(SQL) < / TD > < TD style= " padding : 6 px ; " > arcpy.InsertCursor < / TD > < TD style= " padding : 6 px ; " > Nulo < / TD > < TD style= " padding : 6 px ; color : # f49697 ; " > Erro < / TD > < TD style= " padding : 6 px ; " > Vazio < / TD > < TD style= " padding : 6 px ; " > Polígono < / TD > </ TR > ... (continua) style="padding: 6px; text-align: center; color: #505050; vertical-align: bottom; background-color: #f2f2f2;" valign="middle">ArmazenamentoTipoMétodode RecuperaçãoNULLEMPTYPOLYGONPGDBarcpy.SearchCursorNoneEmptyPolygonPGDBarcpy.da.SearchCursorNoneNonePolygonFGDBarcpy.SearchCursorNoneEmptyPolygonFGDBarcpy.da.SearchCursorNoneNonePolygonSDE(SQL)arcpy.SearchCursorNoneEmptyPolygonSDE(SQL)arcpy.da.SearchCursorNoneNonePolygonSDE(ORA)arcpy.SearchCursorNoneEmptyPolygonSDE(ORA)arcpy.da.SearchCursorNoneNonePolygonNOTA:Tipo de Armazenamento:PGDB := geodatabase pessoalFGDB := geodatabase de arquivoSDE(SQL) := geodatabase empresarial SQL ServerSDE(ORA) := geodatabase empresarial OracleMétodo de Recuperação:arcpy.SearchCursor := cursor de busca ArcPy original/antigoarcpy.da.SearchCursor := cursor de busca ArcPy Data AccessValor SHAPE:NULL := valor/marcador NULL no campo SHAPEEMPTY := polígono vazio ou coleção vazia no campo SHAPEPOLYGON := polígono não vazio no campo SHAPERecuperar Geometria:None := objeto Python NoneEmpty := polígono vazio ou coleção vaziaPolygon := polígono não vazio
<\/P>
Quando se trata de criar novas classes de feição, tenho certeza que a maioria das pessoas está bastante familiarizada com a seguinte tela do assistente Nova Classe de Feição:<\/P>
Ao criar uma nova classe de feição usando o ArcGIS Desktop, seja pela GUI ou ArcPy, as configurações padrão permitem valores NULL no campo SHAPE (veja o destaque amarelo acima). Independentemente de NULLs no campo SHAPE serem uma boa ou má ideia, eles são suportados e permitidos por padrão, então é bom entender o que acontece ou pode acontecer quando as geometrias não são preenchidas junto com o restante do registro nas classes de feição.<\/P>
Após solucionar vários casos onde NULL não era NULL, decidi analisar mais profundamente o que realmente acontece quando as geometrias não são preenchidas nas classes de feição. Descobri que a resposta depende tanto da ferramenta quanto do tipo de geodatabase usado para inserir, armazenar e recuperar registros. Aqui estão os resultados para algumas das ferramentas e tipos de geodatabases mais comuns.<\/P>
A Tabela 1 mostra o que realmente é preenchido no campo SHAPE quando nada, None<\/SPAN>, uma geometria vazia e uma geometria não vazia são inseridos em uma classe de feição poligonal usando três métodos diferentes.<\/P><\/P>TABELA 1: Valores do Campo SHAPE na Classe de Feição<\/TD><\/TR>Tipo de Armazenamento<\/P><\/P><\/TH>Método de Inserção<\/P><\/P><\/TH>NADA<\/STRONG><\/TH>NONE<\/STRONG><\/TH>VAZIO<\/STRONG><\/TH>POLYGON<\/STRONG><\/TH><\/TR>PGDB<\/P><\/TD>Editor ArcMap<\/P><\/TD>Nulo<\/TD>N/A<\/TD>N/A<\/TD>Polígono<\/TD><\/TR>PGDB<\/TD>arcpy.InsertCursor<\/TD>Nulo<\/TD>Erro<\/TD>Vazio<\/TD>Polígono<\/TD><\/TR>PGDB<\/TD>arcpy.da.InsertCursor<\/TD>Nulo<\/TD>Nulo<\/TD>Nulo<\/TD>Polígono<\/TD><\/TR>FGDB<\/TD>Editor ArcMap<\/TD>Vazio<\/TD>N/A<\/TD>N/A<\/TD>Polígono<\/TD><\/TR> < TD style= " padding : 6 px ; " > FGDB < / TD > < TD style= " padding : 6 px ; " > arcpy.InsertCursor < / TD > < TD style= " padding : 6 px ; " > Nulo < / TD > < TD style= " padding : 6 px ; color : # f49697 ; " > Erro < / TD > < TD style= " padding : 6 px ; " > Vazio < / TD > < TD style= " padding : 6 px ; " > Polígono < / TD > </ TR > < TR > < TD style= " padding : 6 px ; " > FGDB < / TD > < TD style= " padding : 6 px ; " > arcpy.da.InsertCursor < / TD > < TD style= " padding : 6 px ; " > Nulo < / TD > < TD style= " padding : 6 px ; " > Nulo < / TD > < TD style= " padding : 6 px ; " > Nulo < / TD > < TD style= " padding : 6 px ; " > Polígono < / TD > </ TR > < TD style= " padding : 6 px ; " > SDE(SQL) < / TD > < TD style= " padding : 6 px ; " > Editor ArcMap < / TD > < TD style= " padding : 6 px ; " > Vazio < / TD > < TD style= " padding : 6 px ; color : # dadada ; " > N/A < / TD > < TD style= " padding : 6 px ; color : # dadada ; " > N/A < / TD > < TD style= " padding : 6 px ; " > Polígono < / TD > </ TR > < TD style= " padding : 6 px ; " > SDE(SQL) < / TD > < TD style= " padding : 6 px ; " > arcpy.InsertCursor < / TD > < TD style= " padding : 6 px ; " > Nulo < / TD > < TD style= " padding : 6 px ; color : # f49697 ; " > Erro < / TD > < TD style= " padding : 6 px ; " > Vazio < / TD > < TD style= " padding : 6 px ; " > Polígono < / TD > </ TR > ... (continua) style="padding: 6px; text-align: center; color: #505050; vertical-align: bottom; background-color: #f2f2f2;" valign="middle">Armazenamento
Tipo
Método
de Recuperação
NOTA:
Está claro que existem algumas diferenças, inconsistências pode-se dizer, em como diferentes ferramentas inserem nada ou geometrias vazias em uma classe de feição que permite valores NULL. Mesmo com a mesma ferramenta, há situações onde nada ou geometrias vazias são tratadas de forma diferente entre diferentes tipos de geodatabases. Também existem diferenças em como diferentes cursores de busca, e provavelmente cursores de atualização, recuperam geometrias vazias das classes de feição.
Não posso dizer o que tudo isso significa, mas há alguns pontos que me chamaram atenção.
Membros conectados podem postar, seguir atualizações e mais. Novo aqui? Registre uma conta gratuita.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.