6 votos

Seleccionar que atributos el 90%

Tengo un shapefile (.shp) de 180 k carreteras con información de nombre de la calle.

Necesito hacer una Dissolve en una carretera de la red para realizar una sola función por su nombre.

Pero tengo un problema al hacer la tarea porque me haya casos en que el nombre se diferencia sólo por uno de los personajes.

Por ejemplo:

Rua do servidor pÚblico y la Rua do servidor pUblico

o

Rua do SouZa & Rua do SouSa

Yo estaba pensando en hacer algo como seleccionar todos los atributos que coinciden con el 99% de la cadena para encontrar que de los casos.

No sé cómo lo hacen, tal vez una de python o VB script hará. Por favor, dame una luz, y voy a seguir.


He encontrado algo parecido a la COINCIDENCIA APROXIMADA...voy a investigar sobre ello.

2voto

Mister Smith Puntos 133

Yo tendría como objetivo hacer una asignación entre los nombres de las calles y su id de objeto. No sé cuál es el programa que va a utilizar para entrar en el shapefile, pero aquí es un básico de la secuencia de comandos de Python que podría ser de ayuda. Lo bucle a través de la shapefile y registro de cada nombre, y el Oid que coinciden (dado mi parámetros). Usted probablemente tendrá que trabajar en más parámetros para que coincida con ellos mejor. Aquí va:

def IsCloseMatch(name1,name2):
"""If the number of characters is different, returns False.
   If more than 95% of the characters are different, returns False.
   Otherwise, returns True"""
  if not len(name1) == len(name2):
    return False
  enum1 = enumerate(name1)
  enum2 = enumerate(name2)
  numberofmatches = 0
  for index, char in enum1: # Loop through string character by character
    if enum2[index] == char:
      numberofmatches += 1
  if numberofmatches/len(name1) > .95: # Looking for 95% character match
    return True
  else:
    return False

matches = {} # {name1:[oid1,oid2...], name2:[oid1,oid2...], ...} 

for feature in shapefile:
  if matches.has_key(feature.streetname):
    matches[feature.streetname].append(feature.oid)
  else:
    for name in matches.keys():
      if IsCloseMatch(name,feature.streetname): 
        matches[name].append(feature.oid) # if matches, add oid
      else:
        matches[feature.streetname] = [feature.oid] # if not, add new street name

No he añadido ningún capturas si hay uno o dos más cartas, pero es un comienzo. Lo que debe hacer después de la coincidencia de los nombres de las calles y las características que deben ser disuelto depende de las herramientas que está utilizando, pero tal vez esto ayude

1voto

Jack Witherell Puntos 21

He encontrado una manera de hacer esa tarea de emparejar borroso en mi red de la calle.

No sé como hacerlo en ArcGIS, pero exportan mi red calle a CSV y había abierto en Excel.

Luego he utilizado esta impresionante-gratis-herramienta:

Búsqueda borrosa Add-In para Excel

Es fácil de usar y realmente hacer el trabajo.

Gracias a todos los que me han ayudado.

Nos vemos.

Yuri Cavazin

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