1 votos

Como restringir el `-dissolve` de Mapshaper para fusionar solo ciertas características especificadas en una capa

Estoy tratando de fusionar algunas características especificadas en un mapa topojson usando Mapshaper. Para este ejemplo, estoy tratando de fusionar Somalia, Somalilandia y Puntlandia para que coincidan con un conjunto de datos que no los separa.

Mapshaper tiene comandos de características, -dissolve y -dissolve2, que parecen hacer lo que quiero. Sin embargo, parecen aplicarse a todas las características en la capa seleccionada, y no puedo ver ninguna forma obvia en la documentación de Mapshaper para seleccionar solo ciertas características dentro de una capa a las que aplicar.

Las opciones name y target se aplican a archivos y capas respectivamente, no a características. Del mismo modo, todos los ejemplos de uso que puedo encontrar no seleccionan características específicas para fusionar.

Hay una característica para limitarlo por campo:

Nombre de un campo de datos en el que disolver.

... pero no puedo encontrar ninguna forma de ingresar una lista de valores de campo. Puedo especificar el campo de nombre, pero no puedo encontrar una forma de especificar que el campo de nombre debería ser "Somalia" o "Somalilandia".

Si es posible, preferiría no mover las características a una capa temporal ficticia y luego volver a moverlas.

Lo ideal sería usar algo similar a cómo -each y -filter permiten hacer coincidir por una expresión, pero eso no parece existir para -dissolve. Por ejemplo, esto, que funciona perfectamente para -filter, no funciona:

 -dissolve '(NAME == "Somalilandia" || NAME == "Puntlandia" || NAME == "Somalia")'

... porque ese parámetro debe ser un nombre de campo y no puede ser una expresión:

Tabla de datos falta el campo: (NAME == "Somalilandia" || NAME == "Puntlandia" || NAME == "Somalia")

1voto

shane22 Puntos 21

Esto funciona para -dissolve, pero no fusiona las características seleccionadas con -dissolve2.


Esencialmente, puedes editar o crear un campo utilizando -each para que cada característica tenga un valor diferente, excepto las que deseas fusionar, luego, disolver en ese campo. Esto se complica un poco por dos cosas:

  • Tu campo ficticio debe estar definido para todas las características en esta capa, de lo contrario -dissolve fallará:

    La tabla de datos está faltando el campo: someFieldName

  • Disolver borra todos los campos de datos de características excepto el que disuelves, incluido FID, a menos que le indiques expresamente que no lo haga.


Así que hay algunos pasos:

  1. Elige un campo donde cada característica tenga un valor único diferente, donde puedas sobrescribirlo para las características que se van a resolver. Por ejemplo, en mis datos, digamos que cada característica tiene un NAMEúnico y estoy fusionando NAME=Somaliland y NAME=Puntland en NAME=Somalia

    • Si por alguna razón dicho campo no existe ya, puedes crear uno ficticio y usar el ID incorporado de MapShaper para darle un valor único. Entonces, por ejemplo, si no hay un campo adecuado y NAME está sin definir:

      -each 'NAME=this.id'
  2. Ejecuta un comando -each para darle el mismo valor a las características que deseas apuntar:

    -each 'NAME="Somalia"' where='(NAME == "Puntland" || NAME == "Somaliland")'
    • O si no existía tal campo antes y creaste un campo ficticio, en la interfaz de usuario de Mapshaper puedes encontrar los números de ID haciendo clic en el botón i y luego haciendo clic en las características de interés para buscar sus números de ID y apuntarlos de esa manera:

      -each 'NAME="Somalia"' where='(NAME == "5" || NAME == "8" || NAME == "9")'
  3. Ejecuta un -dissolve especificando este campo y especificando qué datos de campo mantener.

    -dissolve NAME copy-fields='some,field,names,here'

    El campo utilizado para disolverse se copia automáticamente. No parece haber una "opción de copia total". Además, ten en cuenta que:

    copy-fields= Campos a copiar al disolver (lista separada por comas). Copia los valores de la primera característica en cada grupo de características disueltas.

    ...así que verifica que los valores sean los que deseas y si no lo son, es posible que necesites hacer más -each para asegurarte de que los valores de campo correctos sean los que reciba la característica fusionada final.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X