13 votos

¿Identificar curvas/arcos verdaderos en ArcMap?

La única forma buena de crear círculos en ArcMap es usando arcos verdaderos, (curvas compuestas) pero necesito convertirlos en vértices (densificando) por un problema de compatibilidad. Necesito información para la base de datos geográfica y SDO_geometry (arcsde)

y sí hay una manera. Yo la uso:

UPDATE layer1 a SET arctype = 'compound' WHERE has_compound_curves(a.shape) <> 0;

y luego usar ET Geotools para densificar capa por capa.

Pero debe haber una manera más fácil de hacer esto directamente en Oracle o ArcMap, y sólo quiero densificar las características que tienen verdadero arco. No quiero vértices innecesarios en las líneas rectas y así sucesivamente.

¿Cómo puedo identificar los arcos verdaderos en ArcMap y cómo puedo densificarlos de la forma más rápida y sencilla posible?

Lo mismo para Oracle SQL.

8voto

Galbrezu Puntos 142

Hoy me hicieron esta pregunta ("¿Cómo identifico si una featureclass tiene curvas) y me dieron algunas arcpy sugerencias de código. Modifique el siguiente código como considere oportuno (una variable de bandera en lugar de un mensaje, por ejemplo)

geometries = arcpy.CopyFeatures_management("inputFeatures", arcpy.Geometry())
import json
for g in geometries:
    j = json.loads(g.JSON)
    if 'curve' in j: print "You have true curves!"
    else: print "No curves here"

No curves here
No curves here
You have true curves!
You have true curves!
No curves here
You have true curves!
No curves here
No curves here
You have true curves!
You have true curves!
You have true curves!
You have true curves!
You have true curves!

4voto

kwutchak Puntos 232

Utilizando Densificar Los segmentos de la curva se simplifican a través de la densificación mediante el parámetro Ángulo de desviación máximo o Desviación máxima.

Así, los segmentos de líneas rectas se mantendrán intactos.

2voto

saint_groceon Puntos 2696

Creo que una vez que los has seleccionado, puedes densificarlos. El código (no probado) de abajo podría adaptarse para hacer esto. (Asume que las curvas Bezier se califican como arcos).

public void SelectTrueArcFeatures()
{
    var editor = ArcMap.Application.FindExtensionByName("ESRI Object Editor") as IEditor;
    if (editor.EditState != esriEditState.esriStateEditing)
        throw new Exception("start editing first");
    var fLayer = ((IEditLayers)editor).CurrentLayer;
    if (fLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
        throw new Exception("current edit layer must have polylines or polygons");

    var fSel = fLayer as IFeatureSelection;
    fSel.Clear();
    var fCur = fLayer.FeatureClass.Search(null,false);
    IFeature feat;
    while ((feat = fCur.NextFeature()) != null)
    {
        if(HasAnArc(feat.Shape))    
            fSel.SelectionSet.Add(feat.OID);
    }
    fSel.SelectionChanged();
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(fCur);
    ArcMap.Document.ActiveView.Refresh();
}

private bool HasAnArc(IGeometry geom)
{
    var segcoll = geom as ISegmentCollection;
    if (segcoll == null)
        return false;
    for (int i = 0; i < segcoll.SegmentCount; i++)
    {
        if (segcoll.get_Segment(i) is ICircularArc 
          || segcoll.get_Segment(i) is IBezierCurve)
          return true;
    }
    return false;
}

2voto

andrerpena Puntos 178

Este complemento de Curvas y Líneas le permite seleccionar las formas que tienen curvas: http://www.arcgis.com/home/item.html?id=b59665cb906a435da3f8c45332d7cfdf

2voto

Tedy Puntos 46

Basándose en la respuesta de @KHibma, el cursor de acceso a los datos tiene el token SHAPE@JSON que puede utilizarse para comprobar las curvas sin importar el json módulo.

with arcpy.da.SearchCursor ("InputFeatures", ["OID@", "SHAPE@JSON"]) as curs:
    for oid, json in curs:
        if "curve" in json:
            print "{} is curved".format (oid)

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