Esempio n. 1
0
def create_square_polygon(xoffset,yoffset,side):
    outer = create_square_linearring(xoffset,yoffset,side)
    inner = create_square_linearring(xoffset+(side/3.),yoffset+(side/3.),(side/3.))

    holes = geos.vector_GeometryP()
    holes.push_back(inner)

    poly = global_factory.createPolygon(outer,holes)
    return poly
Esempio n. 2
0
def create_square_polygon(xoffset, yoffset, side):
    outer = create_square_linearring(xoffset, yoffset, side)
    inner = create_square_linearring(xoffset + (side / 3.),
                                     yoffset + (side / 3.), (side / 3.))

    holes = geos.vector_GeometryP()
    holes.push_back(inner)

    poly = global_factory.createPolygon(outer, holes)
    return poly
Esempio n. 3
0
def create_simple_collection(geoms):
    collect = geos.vector_GeometryP()
    for i in geoms:
        collect.push_back(i)
    return global_factory.createGeometryCollection(collect)
Esempio n. 4
0
def do_all():
    geoms = []

    geoms.append(create_point(150, 350))
    geoms.append(create_ushaped_linestring(60, 60, 100))
    geoms.append(create_square_linearring(0, 0, 100))
    geoms.append(create_square_polygon(0, 200, 300))
    geoms.append(create_square_polygon(0, 250, 300))
    geoms.append(create_simple_collection(geoms))

    # These ones use a GeometricShapeFactory
    geoms.append(create_circle(0, 0, 10))
    geoms.append(create_ellipse(0, 0, 8, 12))
    geoms.append(create_rectangle(-5, -5, 10, 10))  # a square
    geoms.append(create_rectangle(-5, -5, 10, 20))  # a rectangle

    # The upper-right quarter of a vertical ellipse
    geoms.append(create_arc(0, 0, 10, 20, 0, math.pi / 2))

    print "--------HERE ARE THE BASE GEOMS ----------"
    wkt_print_geoms(geoms)

    ####################
    # UNARY OPERATIONS                 #
    ####################

    ################
    #CENTROID                        #
    ################
    # Find centroid of each base geometry
    newgeoms = []
    for i in range(len(geoms)):
        newgeoms.append(geoms[i].getCentroid())

    print "\n", "------- AND HERE ARE THEIR CENTROIDS -----"
    wkt_print_geoms(newgeoms)

    ################
    # BUFFER                           #
    ################
    newgeoms = []
    for i in range(len(geoms)):
        try:
            newgeoms.append(geoms[i].buffer(10))
        except geos.GEOSException():
            exc = geos.GEOSException()
            print "GEOS Exception: geometry ", geoms[
                i], "->buffer(10): ", exc.toString()

    print "\n", "--------HERE COMES THE BUFFERED GEOMS ----------"
    wkt_print_geoms(newgeoms)

    ################
    # CONVEX HULL                 #
    ################
    newgeoms = []
    for i in range(len(geoms)):
        newgeoms.append(geoms[i].convexHull())

    print "\n", "--------HERE COMES THE HULLS----------"
    wkt_print_geoms(newgeoms)

    ####################
    # RELATIONAL OPERATORS        #
    ####################

    print "-------------------------------------------------------------------------------"
    print "RELATIONAL OPERATORS"
    print "-------------------------------------------------------------------------------"

    size = len(geoms)
    ################
    # DISJOINT                          #
    ################

    print
    print "\t".join(["   DISJOINT   "] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].disjoint(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # TOUCHES                         #
    ################

    print
    print "\t".join(["    TOUCHES   "] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].touches(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # INTERSECTS                   #
    ################

    print
    print "\t".join([" INTERSECTS   "] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].intersects(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # CROSSES                        #
    ################

    print
    print "\t".join(["    CROSSES   "] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].crosses(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # WITHIN                        #
    ################

    print
    print "\t".join(["     WITHIN   "] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].within(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # CONTAINS                        #
    ################

    print
    print "\t".join(["   CONTAINS   "] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].contains(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # OVERLAPS                        #
    ################

    print
    print "\t".join(["   OVERLAPS   "] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].overlaps(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # RELATE                            #
    ################

    print
    print "\t".join(["     RELATE   "] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            im = geos.IntersectionMatrix('')
            try:
                if geoms[i].relate(geoms[j], "212101212"):
                    print " 1\t",
                else:
                    print " 0\t",
                im = geoms[i].relate(geoms[j])
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # EQUALS                        #
    ################

    print
    print "\t".join(["     EQUALS   "] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].equals(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # EQUALS_EXACT             #
    ################

    print
    print "\t".join(["EQUALS_EXACT  "] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].equalsExact(geoms[j], 0.5):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # IS_WITHIN_DISTANCE     #
    ################

    print
    print "\t".join(["IS_WITHIN_DIST"] + ["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].isWithinDistance(geoms[j], 2):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print


####################
# COMBINATIONS
####################

    print
    print "-------------------------------------------------------------------------------"
    print "COMBINATIONS"
    print "-------------------------------------------------------------------------------"

    ################
    # UNION
    ################

    newgeoms = []
    for i in range(size - 1):
        for j in range(i + 1, size):
            try:
                newgeoms.append(geoms[i].Union(geoms[j]))
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                pass

    print "\n", "----- AND HERE ARE SOME UNION COMBINATIONS ------"
    wkt_print_geoms(newgeoms)

    ################
    # INTERSECTION
    ################

    newgeoms = []
    for i in range(size - 1):
        for j in range(i + 1, size):
            try:
                newgeoms.append(geoms[i].intersection(geoms[j]))
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                pass

    print "\n", "----- HERE ARE SOME INTERSECTIONS COMBINATIONS ------"
    wkt_print_geoms(newgeoms)

    ################
    # DIFFERENCE
    ################

    newgeoms = []
    for i in range(size - 1):
        for j in range(i + 1, size):
            try:
                newgeoms.append(geoms[i].difference(geoms[j]))
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                pass

    print "\n", "----- HERE ARE SOME DIFFERENCE COMBINATIONS ------"
    wkt_print_geoms(newgeoms)

    ################
    # SYMMETRIC DIFFERENCE
    ################

    newgeoms = []
    for i in range(size - 1):
        for j in range(i + 1, size):
            try:
                newgeoms.append(geoms[i].symDifference(geoms[j]))
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                pass

    print "\n", "----- HERE ARE SYMMETRIC DIFFERENCES ------"
    wkt_print_geoms(newgeoms)

    ################
    # LINEMERGE
    ################
    temp = geos.vector_GeometryP()
    for g in geoms:
        temp.push_back(g)
    lm = geos.LineMerger()
    lm.add(temp)
    mls = lm.getMergedLineStrings()
    newgeoms = []
    for i in range(mls.size()):
        newgeoms.append(mls[i])
    del mls

    print "\n", "----- HERE IS THE LINEMERGE OUTPUT ------"
    wkt_print_geoms(newgeoms)

    ################
    # POLYGONIZE
    ################
    temp = geos.vector_GeometryP()
    for g in geoms:
        temp.push_back(g)
    plgnzr = geos.Polygonizer()
    plgnzr.add(temp)
    polys = plgnzr.getPolygons()
    newgeoms = []
    for i in range(polys.size()):
        newgeoms.append(polys[i])
    del polys

    print "\n", "----- HERE IS POLYGONIZE OUTPUT ------"
    wkt_print_geoms(newgeoms)
Esempio n. 5
0
def do_all():
    geoms = []

    geoms.append(create_point(150, 350))
    geoms.append(create_ushaped_linestring(60,60,100))
    geoms.append(create_square_linearring(0,0,100))
    geoms.append(create_square_polygon(0,200,300))
    geoms.append(create_square_polygon(0,250,300))
    geoms.append(create_simple_collection(geoms))

    # These ones use a GeometricShapeFactory
    geoms.append(create_circle(0, 0, 10))
    geoms.append(create_ellipse(0, 0, 8, 12))
    geoms.append(create_rectangle(-5, -5, 10, 10)) # a square
    geoms.append(create_rectangle(-5, -5, 10, 20)) # a rectangle

    # The upper-right quarter of a vertical ellipse
    geoms.append(create_arc(0, 0, 10, 20, 0, math.pi/2))

    print "--------HERE ARE THE BASE GEOMS ----------"
    wkt_print_geoms(geoms)


####################
# UNARY OPERATIONS                 #
####################

    ################
    #CENTROID                        #
    ################
    # Find centroid of each base geometry
    newgeoms = []
    for i in range(len(geoms)):
        newgeoms.append(geoms[i].getCentroid())

    print "\n","------- AND HERE ARE THEIR CENTROIDS -----"
    wkt_print_geoms(newgeoms)

    ################
    # BUFFER                           #
    ################
    newgeoms = []
    for i in range(len(geoms)):
        try:
            newgeoms.append(geoms[i].buffer(10))
        except geos.GEOSException():
            exc = geos.GEOSException()
            print "GEOS Exception: geometry ",geoms[i],"->buffer(10): ",exc.toString()

    print "\n","--------HERE COMES THE BUFFERED GEOMS ----------"
    wkt_print_geoms(newgeoms)

    ################
    # CONVEX HULL                 #
    ################
    newgeoms = []
    for i in range(len(geoms)):
        newgeoms.append(geoms[i].convexHull())

    print "\n","--------HERE COMES THE HULLS----------"
    wkt_print_geoms(newgeoms)

####################
# RELATIONAL OPERATORS        #
####################

    print "-------------------------------------------------------------------------------"
    print "RELATIONAL OPERATORS"
    print "-------------------------------------------------------------------------------"

    size = len(geoms)
    ################
    # DISJOINT                          #
    ################

    print
    print "\t".join(["   DISJOINT   "]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].disjoint(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # TOUCHES                         #
    ################

    print
    print "\t".join(["    TOUCHES   "]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].touches(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # INTERSECTS                   #
    ################

    print
    print "\t".join([" INTERSECTS   "]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].intersects(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # CROSSES                        #
    ################

    print
    print "\t".join(["    CROSSES   "]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].crosses(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # WITHIN                        #
    ################

    print
    print "\t".join(["     WITHIN   "]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].within(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # CONTAINS                        #
    ################

    print
    print "\t".join(["   CONTAINS   "]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].contains(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # OVERLAPS                        #
    ################

    print
    print "\t".join(["   OVERLAPS   "]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].overlaps(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # RELATE                            #
    ################

    print
    print "\t".join(["     RELATE   "]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            im = geos.IntersectionMatrix('')
            try:
                if geoms[i].relate(geoms[j],"212101212"):
                    print " 1\t",
                else:
                    print " 0\t",
                im=geoms[i].relate(geoms[j])
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # EQUALS                        #
    ################

    print
    print "\t".join(["     EQUALS   "]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].equals(geoms[j]):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # EQUALS_EXACT             #
    ################

    print
    print "\t".join(["EQUALS_EXACT  "]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].equalsExact(geoms[j],0.5):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

    ################
    # IS_WITHIN_DISTANCE     #
    ################

    print
    print "\t".join(["IS_WITHIN_DIST"]+["[%d]" % i for i in range(size)])

    for i in range(size):
        print "      [%d]\t" % i,
        for j in range(size):
            try:
                if geoms[i].isWithinDistance(geoms[j],2):
                    print " 1\t",
                else:
                    print " 0\t",
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                print " X\t",
        print

####################
# COMBINATIONS
####################

    print
    print "-------------------------------------------------------------------------------"
    print "COMBINATIONS"
    print "-------------------------------------------------------------------------------"

    ################
    # UNION
    ################

    newgeoms = []
    for i in range(size-1):
        for j in range(i+1,size):
            try:
                newgeoms.append(geoms[i].Union(geoms[j]))
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                pass

    print "\n", "----- AND HERE ARE SOME UNION COMBINATIONS ------"
    wkt_print_geoms(newgeoms)

    ################
    # INTERSECTION
    ################

    newgeoms = []
    for i in range(size-1):
        for j in range(i+1,size):
            try:
                newgeoms.append(geoms[i].intersection(geoms[j]))
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                pass

    print "\n", "----- HERE ARE SOME INTERSECTIONS COMBINATIONS ------"
    wkt_print_geoms(newgeoms)

    ################
    # DIFFERENCE
    ################

    newgeoms = []
    for i in range(size-1):
        for j in range(i+1,size):
            try:
                newgeoms.append(geoms[i].difference(geoms[j]))
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                pass

    print "\n", "----- HERE ARE SOME DIFFERENCE COMBINATIONS ------"
    wkt_print_geoms(newgeoms)

    ################
    # SYMMETRIC DIFFERENCE
    ################

    newgeoms = []
    for i in range(size-1):
        for j in range(i+1,size):
            try:
                newgeoms.append(geoms[i].symDifference(geoms[j]))
            except geos.GEOSException():
                exc = geos.GEOSException()
                print exc.toString()
            except:
                pass

    print "\n", "----- HERE ARE SYMMETRIC DIFFERENCES ------"
    wkt_print_geoms(newgeoms)

    ################
    # LINEMERGE
    ################
    temp = geos.vector_GeometryP()
    for g in geoms:
        temp.push_back(g)
    lm = geos.LineMerger()
    lm.add(temp)
    mls = lm.getMergedLineStrings()
    newgeoms = []
    for i in range(mls.size()):
        newgeoms.append(mls[i])
    del mls

    print "\n", "----- HERE IS THE LINEMERGE OUTPUT ------"
    wkt_print_geoms(newgeoms)
    
    ################
    # POLYGONIZE
    ################
    temp = geos.vector_GeometryP()
    for g in geoms:
        temp.push_back(g)
    plgnzr = geos.Polygonizer()
    plgnzr.add(temp)
    polys = plgnzr.getPolygons()
    newgeoms = []
    for i in range(polys.size()):
        newgeoms.append(polys[i])
    del polys

    print "\n", "----- HERE IS POLYGONIZE OUTPUT ------"
    wkt_print_geoms(newgeoms)
Esempio n. 6
0
def create_simple_collection(geoms):
    collect = geos.vector_GeometryP()
    for i in geoms:
        collect.push_back(i)
    return global_factory.createGeometryCollection(collect)