Mi publicación anterior en el blog, \/blogs\/tilting\/2017\/06\/10\/a-case-of-missing-prefixes-esris-geometries?sr=search&searchId=c6def5e0-70d7-4799-991e-cfbe7cafee76&searchIndex=0<\/A>, fue no planificada. Empecé a escribir esta publicación del blog y la siguiente, y me di cuenta de que la información de fondo que quería incluir no encajaba bien en ninguna de las dos, así que escribí la información de fondo por separado.<\/EM><\/P><\/P>A lo largo de los años, he encontrado que los constructores de ArcPy Geometry son peculiares, especialmente con casos límite o nicho como geometrías vacías. Como usuario comprometido, que cree que proporcionar retroalimentación a los desarrolladores es importante, he enviado varios errores y solicitudes de mejora a lo largo del tiempo relacionados con los constructores de geometría. De inmediato, no puedo decir cuántos han sido implementados, posiblemente solo uno, pero no estaba muy alto en mi lista de deseos.<\/P><\/P>Hace un par de años envié la idea Soporte para Geometrías Vacías con Constructores de la Clase ArcPy Geometry<\/A>. Viendo cuántos pocos usuarios trabajan con geometrías vacías, no puedo decir que me sorprenda con los impresionantes 2 votos que ha recibido hasta ahora. <\/EM>Como señala David Wynne<\/A> de Esri en los comentarios, las geometrías vacías en realidad son soportadas con los constructores de ArcPy Geometry, solo que la sintaxis no está documentada. Dado que las geometrías vacías son soportadas por los constructores, creo que mi idea original debería fusionarse bajo Pythonic ArcPy Geometries<\/A> ya que lo que realmente busco es una forma más intuitiva e idiomática de crear geometrías vacías usando los constructores de ArcPy Geometry. Fusionaría mis dos ideas si pudiera, pero no puedo hacerlo yo mismo, y no quiero simplemente eliminar la idea.<\/EM><\/P><\/P>Usando la clase ArcPy Polygon como ejemplo, echemos un vistazo a una variedad de formas en las que uno podría intentar construir una geometría vacía usando los constructores de ArcPy Geometry:<\/P><SPAN class="operator token">>><\/SPAN><SPAN class="operator token">><\/SPAN> ctor_stmts <SPAN class="operator token">=<\/SPAN> <SPAN class="punctuation token">(<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN> <SPAN class="string token">''<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN> <SPAN class="string token">'None'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN> <SPAN class="string token">'arcpy.Array()'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN> <SPAN class="string token">'arcpy.Array(None)'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/span> <span class="string token">'arcpy.Point()'<span class="punctuation token">,<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <span class="string token">'arcpy.Array([])'<span class="punctuation token">,<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <span class="string token">'arcpy.Array([None])'<span class="punctuation token">,<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <span class="string token">'arcpy.Array(arcpy.Array())'<span class="punctuation token">,<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <span class="string token">'arcpy.Array(arcpy.Array(None))'<span class="punctuation token">,<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <span class="string token">'arcpy.Array(arcpy.Array([]))'<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <spanclass= " punctuationtoken ">)< span > <spanclass= " punctuationtoken ">. . . <spanclass= " operatortoken "> > ; > ; </ span > < spanclass = " keywordtoken " > for </ span > i , stmt < spanclass = " keywordtoken " > in </ span > enumerate ( ctor_stmts ) : <spanclass= " punctuationtoken ">. . . stmt = "arcpy.Polygon({})".format(stmt) try : & nbsp ; & nbsp ; & nbsp ; & nbsp ; print ( "{:0>2}. {:<46}: {}".format(i+1 , stmt , eval(stmt).WKT) ) & nbsp ; & nbsp ; & nbsp ; & nbsp ; except Exception as err : & nbsp ; & nbsp ; & nbsp ; & nbsp ; print ( "{:0>2}. {:<46}: {}....".format(i+1 , stmt , err.message[:35]) ) & nbsp ; & nbsp ; & nbsp ; & nbsp ; 01. arcpy.Polygon() : Object: CreateObject cannot create .... 02. arcpy.Polygon(None) : Object: CreateObject cannot create .... 03. arcpy.Polygon(arcpy.Array()) : <SPAN class="punctuation token">:<\/SPAN> Object<SPAN class="punctuation token">:<\/SPAN> CreateObject no puede crear <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN> <SPAN class="number token">04<\/SPAN><SPAN class="punctuation token">.<\/SPAN> arcpy<SPAN class="punctuation token">.<\/SPAN>Polygon<SPAN class="punctuation token">(<\/SPAN>arcpy<SPAN class="punctuation token">.<\/SPAN>Array<SPAN class="punctuation token">(<\/SPAN>None<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">)<\/SPAN> <SPAN class="punctuation token">:<\/SPAN> MULTIPOLYGON EMPTY <SPAN class="number token">05<\/SPAN><SPAN class="punctuation token">.<\/SPAN> arcpy<SPAN class="punctuation token">.<\/SPAN>Polygon<SPAN class="punctuation token">(<\/SPAN>arcpy<SPAN class="punctuation token">.<\/SPAN>Point<SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">)<\/SPAN> <SPAN class="punctuation token">:<\/SPAN> MULTIPOLYGON EMPTY <SPAN class="number token">06<\/SPAN><SPAN class="punctuation token">.<\/SPAN> arcpy<SPAN class="punctuation token">.<\/span>Polygon<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span><span class="punctuation token">[<\/span><span class="punctuation token">]<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="punctuation token">:<\/span> Object<span class="punctuation token">:<\/span> CreateObject no puede crear <span class="punctuation token">.<\/span><span class="punctuation token">.<\/span><span class="punctuation token">.<\/span><span class="punctuation token">.<\/span> <span class="number token">07<\/span><span class="punctuation token">.<\/span> arcpy<span class="punctuation token">.<\/span>Polygon<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span><span class="punctuation token">[<\/span>None<span class="punctuation token">]<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="punctuation token">:<\/span> MULTIPOLYGON EMPTY <span class="number token">08<\/span><span class="punctuation token">.<\/span> arcpy<span class="punctuation token">.<\/span>Polygon<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="punctuation token">:<\/span> MULTIPOLYGON EMPTY <span class="number token">09<\/span><span class="punctuation token">.<\/span> arcpy<span class="punctuation token">.<\/span>Polygon<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span>None<span class="punctuation token">)<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="punctuation token">:<\/span> MULTIPOLYGON EMPTY <span class="number token">10<\/span><span class="punctuation token">.<\/span> arcpy<span class="punctuation token">.<\/span>Polygon<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\.spanspan>.Array<spanclass=\"puncutationtoken\"\>(\</spanspan>[\</spanspan>]\</spanspan>)\</spanspan>)\</spanspan>)\</spanspan>&nbpsp; &nbpsp; : MULTIPOLYGON EMPTY > > <SPAnclass=\"line-numbers-rows\"><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPan >< SPan << EMOJ I _31 >> < / SPan > < / SPAN > < / CODE > < / PRE > < P > < / P > < P > Antes de compartir cualquier pensamiento o comentario, creo que es importante refrescar exactamente lo que la documentación de <A href=\"http:\/desktop.arcgis.com/en/arcmap/latest/analyze/arcpy-classes/polygon.htm\" rel=\"nofollow noopener noreferrer\" target=\"_blank\" > ArcPy Polygon < / A > establece:< / P > < BLOCKQUOTEclass=\"jive_macro_quote jive-quote jive_text_macro\"><H2 style=\"margin: 0.63em 0px 0.63158em; font-family: 'Avenir LT W01 35 Light', Arial, Helvetica, sans-serif; font-style: normal; font-weight: 500; letter-spacing: 0.02em; font-size: 2rem; line-height: 1.2em; -webkit-font-smoothing: antialiased;\" id=\"toc-hId-1824851459\" id=\"toc-hId-1824851459\" > Sintaxis < / H2 > < DIVclass=\"\" style=\"-webkit-font-smoothing: antialiased;\"><PREclass=\"lia-code-sample line-numbers language-none\" > Polygon (inputs, {spatial_reference}, {has_z}, {has_m}) < / PRE > < / DIV > < DIVclass=\"\" style=\"-webkit-font-smoothing: antialiased;\"><TABLEstyle=\"width: 767.333px; margin-bottom: 1.5em; font-size: 0.875em; line-height: 1.71429em; font-family: 'Lucida Grande', 'Segoe UI', Arial, sans-serif; background-color: white; border-collapse: collapse; border-spacing: 0px; border: 1px solid #dddddd; text-align: left;\"><THEADstyle=\"background-color: #f4f4f4; border-bottom: 1px solid #dddddd; font-size: 0.9375em; line-height: 1.6em; font-weight: bold;\"><TRstyle=\"border-bottom: medium none; text-align: left; height: 39px;\"><TDclass=\"\" style=\"border-left: 1px solid #dddddd; border-right: 1px solid #dddddd; padding: 12px; height: 39px;\" > Parámetro < / TD ><TDclass=\"\" style=\"border-left: 1px solid #dddddd ; border-right : 1px solid #dddddd ; padding : 12px ; height : 39px ; \ " > Explicación < / TD ><TDclass= \ " \ " style = \ " border-left : 1px solid #dddddd ; border-right : 1px solid #dddddd ; padding : 12px ; height : 39px ; \ " > Tipo de dato < / TD >< / TR >< / THEAD >< TBODY >< TR style = \ " border-bottom : 1px solid #dddddd ; text-align : left ; height : 49px ; \ " >< TD style = \ " border-left : 1px solid #dddddd ; border-right : 1px solid #dddddd ; padding : 12px ; height : 49px ; \ " >< DIVclass = \ " \ " style = \ " -webkit-font-smoothing : antialiased ; \ " > inputs < / DIV >< / TD >< TD style = \ " border-left : 1px solid #dddddd ; border-right : 1px solid #dddddd ; padding : 12px ; height : 49px ; \ " >< P style = \ " font-size : 0.875rem ; line-height : 1.71429em ; margin-top : 0em ; margin-bottom : 0px ; -webkit-font-smoothing : antialiased ; \ " > Las coordenadas usadas para crear el objeto. El tipo de dato puede ser un objeto de tipo < spanclass = \ " \ " style = \ " -webkit-font-smoothing : antialiased ; font-family : Consolas , 'Andale Mono' , 'Lucida Console' , Monaco , 'Courier New' , Courier , monospace ; font-weight : bold ; \ " > Point < / span > < / P >< P style = \ " font-size : 0.875rem ; line-height : 1.71429em ; margin-top : 0em ; margin-bottom : 0px ; -webkit-font-smoothing : antialiased ; \ " > o objetos de tipo < spanclass = \ " \ " style = \ " -webkit-font-smoothing : antialiased ; font-family : Consolas , 'Andale Mono' , 'Lucida Console' , Monaco , 'Courier New' , Courier , monospace ; font-weight : bold ; \ " > Array < / span > . < / P >< / TD >< TD style = \ " border-left : 1px solid #dddddd ; border-right : 1px solid #dddddd ; padding : 12px ; height : 49px ; \ " > Object < / TD >< / TR >< / TBODY >< / TABLE >< / DIV >< / BLOCKQUOTE >< P >< / P >< P > Algunas observaciones antes de los comentarios:< / P >< UL >< LI > Ejemplos 01 y 02:< BR />< UL >< LI > La documentación establece que las entradas deben ser objetos Point o Array, lo cual ninguno de estos ejemplos proporciona. < / LI >< / UL >< / LI >< LI > Ejemplos 03 y 06:< UL >< LI > Estos dos ejemplos son iguales, por ejemplo, < spanstyle = \ " font-family:courier new,courier,monospace; \ " > repr(arcpy.Array()) == repr(arcpy.Array([])) < / span > .& nbsp;< EM > Dado que Esri no implementa equivalencia con ArcPy Arrays, usé el método __repr__ de los objetos para mostrar igualdad en este caso. < / EM >< / LI >< LI > Llamar a < spanstyle = \ " font-family:courier new,courier,monospace; \ " > arcpy.Array() < / span > crea un ArcPy Array vacío:& nbsp;< spanstyle = \ " font-family:courier new,courier,monospace; \ " ><Array []><\/SPAN>. Los Arrays vacíos de ArcPy son objetos válidos, y la documentación indica que los objetos ArcPy Array pueden pasarse al constructor ArcPy Polygon.<EM><BR \/><\/EM><\/LI><\/UL><\/LI><LI>Ejemplos 04 & 07:<UL><LI>Similar a los Ejemplos 03 & 06, estos dos ejemplos son iguales, por ejemplo, <SPAN style="font-family: courier new,courier,monospace;">repr(arcpy.Array(None)) == repr(arcpy.Array([None])).<\/SPAN><\/LI><LI>El Ejemplo 04 fue el método sugerido por <A href="https:\/\/community.esri.com\/migrated-users\/2582" target="_blank">David Wynne<\/A> en <A href="https:\/\/community.esri.com\/ideas\/10648?sr=search&searchId=d16b084d-001d-4dad-b5a6-7e4ae13606e0&searchIndex=4" target="_blank">Soporte para Geometrías Vacías con Constructores de la Clase ArcPy Geometry<\/A>.<\/LI><\/UL><\/LI><LI>Ejemplo 05:<UL><LI>La documentación indica que un objeto Point puede usarse como entrada.<\/LI><LI>Llamar a <SPAN style="font-family: courier new,courier,monospace;">arcpy.Point()<\/SPAN> no crea un punto vacío, como llamar a <SPAN style="font-family: courier new,courier,monospace;">arcpy.Array()<\/SPAN>, sino que crea un punto 0, 0:<SPAN style="font-family: courier new,courier,monospace;"> <Point (0.0, 0.0, #, #)><\/SPAN>. Aunque no se demostró arriba, pruebas adicionales muestran que cualquier punto funciona, por ejemplo, <SPAN style="font-family: courier new,courier,monospace;">arcpy.Polygon(arcpy.Point(10000.5, -4500.3))<\/SPAN> también crea un multi-polígono vacío.<\/LI><\/UL><\/LI><LI>Ejemplos 08 & 10:<UL><LI>Similar a los Ejemplos 03 & 06 y Ejemplos 04 & 07, estos dos ejemplos son iguales.<\/LI><LI>Llamar a <SPAN style="font-family: courier new,courier,monospace;">arcpy.Array(arcpy.Array())<\/SPAN> crea un ArcPy Array vacío anidado dentro de otro ArcPy Array. La documentación del <A href="http:\/\/desktop.arcgis.com\/en\/arcmap\/latest\/analyze\/arcpy-classes\/array.htm" rel="nofollow noopener noreferrer" target="_blank">ArcPy Array<\/A> indica que un ArcPy Array es una entrada válida para el constructor ArcPy Array.<\/LI><\/UL><\/LI><\/UL><P><\/P><P>Hay varias rarezas con los resultados de la prueba del constructor de polígono arriba. Creo que los Ejemplos 03 & 06 son los que más probablemente confundan a los usuarios. La documentación claramente indica que los objetos ArcPy Array son entradas válidas y que los Arrays vacíos de ArcPy son objetos válidos, entonces ¿por qué pasar un ArcPy Array vacío al constructor ArcPy Polygon genera un error? Aunque los Ejemplos 04 & 07 funcionan, parece extraño que un ArcPy Array que contiene un Python <SPAN style="font-family: courier new,courier,monospace;">None<\/SPAN> sea de alguna manera sustancialmente diferente a un ArcPy Array vacío al construir una geometría vacía.<\/P><P><\/P><P>El Ejemplo 05 es una sorpresa y tiene menos sentido para mí. La documentación claramente indica que un objeto Point es una entrada válida para el constructor ArcPy Polygon, pero ¿cómo se ve un polígono con un solo punto? Un multi-polígono vacío, según Esri. Lo que eleva la extrañeza para mí es que no existe un ArcPy Point vacío y que cualquier ArcPy Point pasado al constructor ArcPy Polygon crea una geometría vacía.<\/P><P><\/P><P style="padding-left: 30px;"><EM>Usando <A class="link-titled" href="https:\/\/docs.python.org\/2\/library\/dis.html" title="https:\/\/docs.python.org\/2\/library\/dis.html" rel="nofollow noopener noreferrer" target="_blank">dis Desensamblador para bytecode de Python<\/A> para observar el bytecode de cada una de las declaraciones del constructor arriba, parecía que el Ejemplo 05 sería la declaración del constructor con mejor rendimiento. Ejecutar <A class="link-titled" href="https:\/\/docs.python.org\/2\/library\/timeit.html" title="https:\/\/docs.python.org\/2\/library\/timeit.html" rel="nofollow noopener noreferrer" target="_blank">timeit Medir tiempo de ejecución de pequeños fragmentos de código<\/A> en las declaraciones del constructor mostró que el Ejemplo 05 fue el más rápido generando geometrías vacías, no por mucho, pero aún así el más rápido. Esto solo añade misterio al polígono de un solo punto.<\/EM><\/P><P><\/P><P>Los Ejemplos 08 & 10 serán tratados en una publicación posterior del blog, así que no profundizaré en mis pensamientos sobre ellos aquí.<\/P><P><\/P><P>1entonces cómo encajan los resultados de esta prueba en la idea\u00a0solicitud\u00a0súplica por más <A href="https:\/\/community.esri.com\/ideas\/10963?sr=search&searchId=97894fbc-b12d-4fd3-85e6-92946ebbb702&searchIndex=2" target="_blank">Geometrías Pythonicas de ArcPy<\/_a>1? Para mí, la respuesta es que el Ejemplo 01 debería ser la forma principal de crear geometrías vacías de ArcPy, es decir, pasar ningún argumento a un constructor de Geometría ArcPy debería generar el tipo equivalente de geometría vacía. Para objetos que soportan el concepto de vaciedad, es bastante común en Python que pasar ningún argumento al constructor cree un objeto vacío. Veamos algunos ejemplos:<\/_p><PRE class="lia-code-sample line-numbers language-none"><CODE><SPAN class="operator token">>><\/_span><span class="operator token">><\/_span> <span class="comment token"># Estructuras de datos integradas comunes<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> list<span class="punctuation token">(<\/_span><span class="punctuation token">)<\/_span> <span class="punctuation token">[<\/_span><span class="punctuation token">]<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> set<span class="punctuation token">(<\/_span><span class="punctuation token">)<\/_span> set<span class="punctuation token">(<\/_span><span class="punctuation token">[<\/_span><span class="punctuation token">]<\/_span><span class="punctuation token">)<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> dict<span class="punctuation token">(<\/_span><span class="punctuation token">)<\/_span> <span class="punctuation token">{<\/_span><span class="punctuation token">}<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> str<span class="punctuation token">(<\/_span><span class="punctuation token">)<\/_span> <span class="string token">''<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> <span class="comment token"># Algunas estructuras de datos SciPy ahora incluidas con ArcGIS<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> <span class="keyword token">import<\/_span> pandas <span class="operator token">>><\/_span><span class="operator token">><\/_span> pandas<span class="punctuation token">.<\/_span>DataFrame<span class="punctuation token">(<\/_span><span class="punctuation token">)<\/_span> Empty DataFrame Columns<span class="punctuation token">:<\/_span> <span class="punctuation token">[<\/_span><span class="punctuation token">]<\/_span> Index<span class="punctuation token">:<\/_span> <span class="punctuation token">[<\/_span><span class="punctuation token">]<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> <span class="keyword token">import<\/_spana> matplotlib<spanclass= "punctuationtoken ">.<2Fspana > pylab <spanclass= "operatorspan ">&g t ; &g t ; <2Fspana > matplotlib<punctuationtoken > . <2Fspana > pylab<punctuationtoken > . <2Fspana > plot<punctuationtoken > ( <2Fspana > ) <punctuationtoken > [ <2Fspana > ] <spanclass= "operatorspan ">&g t ; &g t ; <2Fspana ><<EMOJI_0 > >< spanclass = "line-numbers-rows " >< span >< < EMOJI_1 > >< / span >< span >< < EMOJI_2 > >< / span >< span >< < EMOJI_3 > >< / span >< span >< < EMOJI_4 > >< / span >< span >< < EMOJI_5 > >< / span >< span >< < EMOJI_6 > >< / span >< span >< < EMOJI_7 > >< / span >< span >< < EMOJI_8 > >< / span >< span >< < EMOJI_9 > >< / span >< span >< < EMOJI_10 > >< / span >< span >< < EMOJI_11 > >< / span >< span >< < EMOJI_12 > >< / span >< span >< < EMOJI_13 > >< / span >< span >< < EMOJI_14 > >< / span >< span >< < EMOJI_15 > >< / span >< span >< < EMOJI_16 > >< / span >< span >< < EMOJI_17 > >< / span >< span >< < EMOJI_18 > >< / span >< span >< < EMOJI_19 > >< / span >< span >< < EMOJI_20 > >< / span ></SPAN>
<\/P>
A lo largo de los años, he encontrado que los constructores de ArcPy Geometry son peculiares, especialmente con casos límite o nicho como geometrías vacías. Como usuario comprometido, que cree que proporcionar retroalimentación a los desarrolladores es importante, he enviado varios errores y solicitudes de mejora a lo largo del tiempo relacionados con los constructores de geometría. De inmediato, no puedo decir cuántos han sido implementados, posiblemente solo uno, pero no estaba muy alto en mi lista de deseos.<\/P>
Hace un par de años envié la idea
<SPAN class="operator token">>><\/SPAN><SPAN class="operator token">><\/SPAN> ctor_stmts <SPAN class="operator token">=<\/SPAN> <SPAN class="punctuation token">(<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN> <SPAN class="string token">''<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN> <SPAN class="string token">'None'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN> <SPAN class="string token">'arcpy.Array()'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN> <SPAN class="string token">'arcpy.Array(None)'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/span> <span class="string token">'arcpy.Point()'<span class="punctuation token">,<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <span class="string token">'arcpy.Array([])'<span class="punctuation token">,<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <span class="string token">'arcpy.Array([None])'<span class="punctuation token">,<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <span class="string token">'arcpy.Array(arcpy.Array())'<span class="punctuation token">,<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <span class="string token">'arcpy.Array(arcpy.Array(None))'<span class="punctuation token">,<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <span class="string token">'arcpy.Array(arcpy.Array([]))'<span> <span class="punctuation token">.<span class="punctuation token">.<span class="punctuation token">.<span> <spanclass= " punctuationtoken ">)< span > <spanclass= " punctuationtoken ">. . . <spanclass= " operatortoken "> > ; > ; </ span > < spanclass = " keywordtoken " > for </ span > i , stmt < spanclass = " keywordtoken " > in </ span > enumerate ( ctor_stmts ) : <spanclass= " punctuationtoken ">. . . stmt = "arcpy.Polygon({})".format(stmt) try : & nbsp ; & nbsp ; & nbsp ; & nbsp ; print ( "{:0>2}. {:<46}: {}".format(i+1 , stmt , eval(stmt).WKT) ) & nbsp ; & nbsp ; & nbsp ; & nbsp ; except Exception as err : & nbsp ; & nbsp ; & nbsp ; & nbsp ; print ( "{:0>2}. {:<46}: {}....".format(i+1 , stmt , err.message[:35]) ) & nbsp ; & nbsp ; & nbsp ; & nbsp ; 01. arcpy.Polygon() : Object: CreateObject cannot create .... 02. arcpy.Polygon(None) : Object: CreateObject cannot create .... 03. arcpy.Polygon(arcpy.Array()) : <SPAN class="punctuation token">:<\/SPAN> Object<SPAN class="punctuation token">:<\/SPAN> CreateObject no puede crear <SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN><SPAN class="punctuation token">.<\/SPAN> <SPAN class="number token">04<\/SPAN><SPAN class="punctuation token">.<\/SPAN> arcpy<SPAN class="punctuation token">.<\/SPAN>Polygon<SPAN class="punctuation token">(<\/SPAN>arcpy<SPAN class="punctuation token">.<\/SPAN>Array<SPAN class="punctuation token">(<\/SPAN>None<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">)<\/SPAN> <SPAN class="punctuation token">:<\/SPAN> MULTIPOLYGON EMPTY <SPAN class="number token">05<\/SPAN><SPAN class="punctuation token">.<\/SPAN> arcpy<SPAN class="punctuation token">.<\/SPAN>Polygon<SPAN class="punctuation token">(<\/SPAN>arcpy<SPAN class="punctuation token">.<\/SPAN>Point<SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">)<\/SPAN> <SPAN class="punctuation token">:<\/SPAN> MULTIPOLYGON EMPTY <SPAN class="number token">06<\/SPAN><SPAN class="punctuation token">.<\/SPAN> arcpy<SPAN class="punctuation token">.<\/span>Polygon<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span><span class="punctuation token">[<\/span><span class="punctuation token">]<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="punctuation token">:<\/span> Object<span class="punctuation token">:<\/span> CreateObject no puede crear <span class="punctuation token">.<\/span><span class="punctuation token">.<\/span><span class="punctuation token">.<\/span><span class="punctuation token">.<\/span> <span class="number token">07<\/span><span class="punctuation token">.<\/span> arcpy<span class="punctuation token">.<\/span>Polygon<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span><span class="punctuation token">[<\/span>None<span class="punctuation token">]<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="punctuation token">:<\/span> MULTIPOLYGON EMPTY <span class="number token">08<\/span><span class="punctuation token">.<\/span> arcpy<span class="punctuation token">.<\/span>Polygon<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="punctuation token">:<\/span> MULTIPOLYGON EMPTY <span class="number token">09<\/span><span class="punctuation token">.<\/span> arcpy<span class="punctuation token">.<\/span>Polygon<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span>None<span class="punctuation token">)<\/span><span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="punctuation token">:<\/span> MULTIPOLYGON EMPTY <span class="number token">10<\/span><span class="punctuation token">.<\/span> arcpy<span class="punctuation token">.<\/span>Polygon<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\/span>Array<span class="punctuation token">(<\/span>arcpy<span class="punctuation token">.<\.spanspan>.Array<spanclass=\"puncutationtoken\"\>(\</spanspan>[\</spanspan>]\</spanspan>)\</spanspan>)\</spanspan>)\</spanspan>&nbpsp; &nbpsp; : MULTIPOLYGON EMPTY > > <SPAnclass=\"line-numbers-rows\"><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPAn><SPAn </SPan >< SPan << EMOJ I _31 >> < / SPan > < / SPAN > < / CODE > < / PRE > < P > < / P > < P > Antes de compartir cualquier pensamiento o comentario, creo que es importante refrescar exactamente lo que la documentación de <A href=\"http:\/desktop.arcgis.com/en/arcmap/latest/analyze/arcpy-classes/polygon.htm\" rel=\"nofollow noopener noreferrer\" target=\"_blank\" > ArcPy Polygon < / A > establece:< / P > < BLOCKQUOTEclass=\"jive_macro_quote jive-quote jive_text_macro\"><H2 style=\"margin: 0.63em 0px 0.63158em; font-family: 'Avenir LT W01 35 Light', Arial, Helvetica, sans-serif; font-style: normal; font-weight: 500; letter-spacing: 0.02em; font-size: 2rem; line-height: 1.2em; -webkit-font-smoothing: antialiased;\" id=\"toc-hId-1824851459\" id=\"toc-hId-1824851459\" > Sintaxis < / H2 > < DIVclass=\"\" style=\"-webkit-font-smoothing: antialiased;\"><PREclass=\"lia-code-sample line-numbers language-none\" > Polygon (inputs, {spatial_reference}, {has_z}, {has_m}) < / PRE > < / DIV > < DIVclass=\"\" style=\"-webkit-font-smoothing: antialiased;\"><TABLEstyle=\"width: 767.333px; margin-bottom: 1.5em; font-size: 0.875em; line-height: 1.71429em; font-family: 'Lucida Grande', 'Segoe UI', Arial, sans-serif; background-color: white; border-collapse: collapse; border-spacing: 0px; border: 1px solid #dddddd; text-align: left;\"><THEADstyle=\"background-color: #f4f4f4; border-bottom: 1px solid #dddddd; font-size: 0.9375em; line-height: 1.6em; font-weight: bold;\"><TRstyle=\"border-bottom: medium none; text-align: left; height: 39px;\"><TDclass=\"\" style=\"border-left: 1px solid #dddddd; border-right: 1px solid #dddddd; padding: 12px; height: 39px;\" > Parámetro < / TD ><TDclass=\"\" style=\"border-left: 1px solid #dddddd ; border-right : 1px solid #dddddd ; padding : 12px ; height : 39px ; \ " > Explicación < / TD ><TDclass= \ " \ " style = \ " border-left : 1px solid #dddddd ; border-right : 1px solid #dddddd ; padding : 12px ; height : 39px ; \ " > Tipo de dato < / TD >< / TR >< / THEAD >< TBODY >< TR style = \ " border-bottom : 1px solid #dddddd ; text-align : left ; height : 49px ; \ " >< TD style = \ " border-left : 1px solid #dddddd ; border-right : 1px solid #dddddd ; padding : 12px ; height : 49px ; \ " >< DIVclass = \ " \ " style = \ " -webkit-font-smoothing : antialiased ; \ " > inputs < / DIV >< / TD >< TD style = \ " border-left : 1px solid #dddddd ; border-right : 1px solid #dddddd ; padding : 12px ; height : 49px ; \ " >< P style = \ " font-size : 0.875rem ; line-height : 1.71429em ; margin-top : 0em ; margin-bottom : 0px ; -webkit-font-smoothing : antialiased ; \ " > Las coordenadas usadas para crear el objeto. El tipo de dato puede ser un objeto de tipo < spanclass = \ " \ " style = \ " -webkit-font-smoothing : antialiased ; font-family : Consolas , 'Andale Mono' , 'Lucida Console' , Monaco , 'Courier New' , Courier , monospace ; font-weight : bold ; \ " > Point < / span > < / P >< P style = \ " font-size : 0.875rem ; line-height : 1.71429em ; margin-top : 0em ; margin-bottom : 0px ; -webkit-font-smoothing : antialiased ; \ " > o objetos de tipo < spanclass = \ " \ " style = \ " -webkit-font-smoothing : antialiased ; font-family : Consolas , 'Andale Mono' , 'Lucida Console' , Monaco , 'Courier New' , Courier , monospace ; font-weight : bold ; \ " > Array < / span > . < / P >< / TD >< TD style = \ " border-left : 1px solid #dddddd ; border-right : 1px solid #dddddd ; padding : 12px ; height : 49px ; \ " > Object < / TD >< / TR >< / TBODY >< / TABLE >< / DIV >< / BLOCKQUOTE >< P >< / P >< P > Algunas observaciones antes de los comentarios:< / P >< UL >< LI > Ejemplos 01 y 02:< BR />< UL >< LI > La documentación establece que las entradas deben ser objetos Point o Array, lo cual ninguno de estos ejemplos proporciona. < / LI >< / UL >< / LI >< LI > Ejemplos 03 y 06:< UL >< LI > Estos dos ejemplos son iguales, por ejemplo, < spanstyle = \ " font-family:courier new,courier,monospace; \ " > repr(arcpy.Array()) == repr(arcpy.Array([])) < / span > .& nbsp;< EM > Dado que Esri no implementa equivalencia con ArcPy Arrays, usé el método __repr__ de los objetos para mostrar igualdad en este caso. < / EM >< / LI >< LI > Llamar a < spanstyle = \ " font-family:courier new,courier,monospace; \ " > arcpy.Array() < / span > crea un ArcPy Array vacío:& nbsp;< spanstyle = \ " font-family:courier new,courier,monospace; \ " ><Array []><\/SPAN>. Los Arrays vacíos de ArcPy son objetos válidos, y la documentación indica que los objetos ArcPy Array pueden pasarse al constructor ArcPy Polygon.<EM><BR \/><\/EM><\/LI><\/UL><\/LI><LI>Ejemplos 04 & 07:<UL><LI>Similar a los Ejemplos 03 & 06, estos dos ejemplos son iguales, por ejemplo, <SPAN style="font-family: courier new,courier,monospace;">repr(arcpy.Array(None)) == repr(arcpy.Array([None])).<\/SPAN><\/LI><LI>El Ejemplo 04 fue el método sugerido por <A href="https:\/\/community.esri.com\/migrated-users\/2582" target="_blank">David Wynne<\/A> en <A href="https:\/\/community.esri.com\/ideas\/10648?sr=search&searchId=d16b084d-001d-4dad-b5a6-7e4ae13606e0&searchIndex=4" target="_blank">Soporte para Geometrías Vacías con Constructores de la Clase ArcPy Geometry<\/A>.<\/LI><\/UL><\/LI><LI>Ejemplo 05:<UL><LI>La documentación indica que un objeto Point puede usarse como entrada.<\/LI><LI>Llamar a <SPAN style="font-family: courier new,courier,monospace;">arcpy.Point()<\/SPAN> no crea un punto vacío, como llamar a <SPAN style="font-family: courier new,courier,monospace;">arcpy.Array()<\/SPAN>, sino que crea un punto 0, 0:<SPAN style="font-family: courier new,courier,monospace;"> <Point (0.0, 0.0, #, #)><\/SPAN>. Aunque no se demostró arriba, pruebas adicionales muestran que cualquier punto funciona, por ejemplo, <SPAN style="font-family: courier new,courier,monospace;">arcpy.Polygon(arcpy.Point(10000.5, -4500.3))<\/SPAN> también crea un multi-polígono vacío.<\/LI><\/UL><\/LI><LI>Ejemplos 08 & 10:<UL><LI>Similar a los Ejemplos 03 & 06 y Ejemplos 04 & 07, estos dos ejemplos son iguales.<\/LI><LI>Llamar a <SPAN style="font-family: courier new,courier,monospace;">arcpy.Array(arcpy.Array())<\/SPAN> crea un ArcPy Array vacío anidado dentro de otro ArcPy Array. La documentación del <A href="http:\/\/desktop.arcgis.com\/en\/arcmap\/latest\/analyze\/arcpy-classes\/array.htm" rel="nofollow noopener noreferrer" target="_blank">ArcPy Array<\/A> indica que un ArcPy Array es una entrada válida para el constructor ArcPy Array.<\/LI><\/UL><\/LI><\/UL><P><\/P><P>Hay varias rarezas con los resultados de la prueba del constructor de polígono arriba. Creo que los Ejemplos 03 & 06 son los que más probablemente confundan a los usuarios. La documentación claramente indica que los objetos ArcPy Array son entradas válidas y que los Arrays vacíos de ArcPy son objetos válidos, entonces ¿por qué pasar un ArcPy Array vacío al constructor ArcPy Polygon genera un error? Aunque los Ejemplos 04 & 07 funcionan, parece extraño que un ArcPy Array que contiene un Python <SPAN style="font-family: courier new,courier,monospace;">None<\/SPAN> sea de alguna manera sustancialmente diferente a un ArcPy Array vacío al construir una geometría vacía.<\/P><P><\/P><P>El Ejemplo 05 es una sorpresa y tiene menos sentido para mí. La documentación claramente indica que un objeto Point es una entrada válida para el constructor ArcPy Polygon, pero ¿cómo se ve un polígono con un solo punto? Un multi-polígono vacío, según Esri. Lo que eleva la extrañeza para mí es que no existe un ArcPy Point vacío y que cualquier ArcPy Point pasado al constructor ArcPy Polygon crea una geometría vacía.<\/P><P><\/P><P style="padding-left: 30px;"><EM>Usando <A class="link-titled" href="https:\/\/docs.python.org\/2\/library\/dis.html" title="https:\/\/docs.python.org\/2\/library\/dis.html" rel="nofollow noopener noreferrer" target="_blank">dis Desensamblador para bytecode de Python<\/A> para observar el bytecode de cada una de las declaraciones del constructor arriba, parecía que el Ejemplo 05 sería la declaración del constructor con mejor rendimiento. Ejecutar <A class="link-titled" href="https:\/\/docs.python.org\/2\/library\/timeit.html" title="https:\/\/docs.python.org\/2\/library\/timeit.html" rel="nofollow noopener noreferrer" target="_blank">timeit Medir tiempo de ejecución de pequeños fragmentos de código<\/A> en las declaraciones del constructor mostró que el Ejemplo 05 fue el más rápido generando geometrías vacías, no por mucho, pero aún así el más rápido. Esto solo añade misterio al polígono de un solo punto.<\/EM><\/P><P><\/P><P>Los Ejemplos 08 & 10 serán tratados en una publicación posterior del blog, así que no profundizaré en mis pensamientos sobre ellos aquí.<\/P><P><\/P><P>1entonces cómo encajan los resultados de esta prueba en la idea\u00a0solicitud\u00a0súplica por más <A href="https:\/\/community.esri.com\/ideas\/10963?sr=search&searchId=97894fbc-b12d-4fd3-85e6-92946ebbb702&searchIndex=2" target="_blank">Geometrías Pythonicas de ArcPy<\/_a>1? Para mí, la respuesta es que el Ejemplo 01 debería ser la forma principal de crear geometrías vacías de ArcPy, es decir, pasar ningún argumento a un constructor de Geometría ArcPy debería generar el tipo equivalente de geometría vacía. Para objetos que soportan el concepto de vaciedad, es bastante común en Python que pasar ningún argumento al constructor cree un objeto vacío. Veamos algunos ejemplos:<\/_p><PRE class="lia-code-sample line-numbers language-none"><CODE><SPAN class="operator token">>><\/_span><span class="operator token">><\/_span> <span class="comment token"># Estructuras de datos integradas comunes<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> list<span class="punctuation token">(<\/_span><span class="punctuation token">)<\/_span> <span class="punctuation token">[<\/_span><span class="punctuation token">]<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> set<span class="punctuation token">(<\/_span><span class="punctuation token">)<\/_span> set<span class="punctuation token">(<\/_span><span class="punctuation token">[<\/_span><span class="punctuation token">]<\/_span><span class="punctuation token">)<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> dict<span class="punctuation token">(<\/_span><span class="punctuation token">)<\/_span> <span class="punctuation token">{<\/_span><span class="punctuation token">}<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> str<span class="punctuation token">(<\/_span><span class="punctuation token">)<\/_span> <span class="string token">''<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> <span class="comment token"># Algunas estructuras de datos SciPy ahora incluidas con ArcGIS<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> <span class="keyword token">import<\/_span> pandas <span class="operator token">>><\/_span><span class="operator token">><\/_span> pandas<span class="punctuation token">.<\/_span>DataFrame<span class="punctuation token">(<\/_span><span class="punctuation token">)<\/_span> Empty DataFrame Columns<span class="punctuation token">:<\/_span> <span class="punctuation token">[<\/_span><span class="punctuation token">]<\/_span> Index<span class="punctuation token">:<\/_span> <span class="punctuation token">[<\/_span><span class="punctuation token">]<\/_span> <span class="operator token">>><\/_span><span class="operator token">><\/_span> <span class="keyword token">import<\/_spana> matplotlib<spanclass= "punctuationtoken ">.<2Fspana > pylab <spanclass= "operatorspan ">&g t ; &g t ; <2Fspana > matplotlib<punctuationtoken > . <2Fspana > pylab<punctuationtoken > . <2Fspana > plot<punctuationtoken > ( <2Fspana > ) <punctuationtoken > [ <2Fspana > ] <spanclass= "operatorspan ">&g t ; &g t ; <2Fspana ><<EMOJI_0 > >< spanclass = "line-numbers-rows " >< span >< < EMOJI_1 > >< / span >< span >< < EMOJI_2 > >< / span >< span >< < EMOJI_3 > >< / span >< span >< < EMOJI_4 > >< / span >< span >< < EMOJI_5 > >< / span >< span >< < EMOJI_6 > >< / span >< span >< < EMOJI_7 > >< / span >< span >< < EMOJI_8 > >< / span >< span >< < EMOJI_9 > >< / span >< span >< < EMOJI_10 > >< / span >< span >< < EMOJI_11 > >< / span >< span >< < EMOJI_12 > >< / span >< span >< < EMOJI_13 > >< / span >< span >< < EMOJI_14 > >< / span >< span >< < EMOJI_15 > >< / span >< span >< < EMOJI_16 > >< / span >< span >< < EMOJI_17 > >< / span >< span >< < EMOJI_18 > >< / span >< span >< < EMOJI_19 > >< / span >< span >< < EMOJI_20 > >< / span ></SPAN>
Nice job Joshua... sadly 'None' still isn't from previous discussions, nothing has changed
Joshua Bixby / Dan Patterson
Do you know how you would invoke the 'within' method? Been struggling with that one.
It's on the Geometry site, but, alas no good sample 😕 Geometry—Help | ArcGIS for Desktop
In the Pro help... still applies to ArcMap http://pro.arcgis.com/en/pro-app/arcpy/data-access/searchcursor-class.htm
Andrew Valenski, I responded in your cross post: Arcpy write geometry error. Instead of cross-posting the same question to slightly-related, existing discussions, it would have been better in this case to just post a new question with a bit more information. I see you started a new question: https://community.esri.com/thread/197968-re-how-to-use-arcpy-geometry-measureonline
In GeoNet, instead of cross posting you can post your question in one space/place and share that question in other spaces/places. That allows the question to get higher visibility without creating multiple, independent versions of the same question that can lead to confusion.
This is an excellent analysis @JoshuaBixby!
Most important thing is that technique for creation of empty geometries should be noted in the docs at least, and even better should be made consistent with other Pythonic methods of creating empties...
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.