def inpolygon(x, y, polygon): ''' Check if x/y points are inside a polygon or not. :param x: (*array_like*) X coordinate of the points. :param y: (*array_like*) Y coordinate of the points. :param polygon: (*PolygonShape list*) The polygon list. :returns: (*boolean array*) Inside or not. ''' if isinstance(x, numbers.Number): return GeoComputation.pointInPolygon(polygon, x, y) if isinstance(x, (list, tuple)): x = minum.array(x) if isinstance(y, (list, tuple)): y = minum.array(y) if isinstance(polygon, tuple): x_p = polygon[0] y_p = polygon[1] if isinstance(x_p, (list, tuple)): x_p = minum.array(x_p) if isinstance(y_p, (list, tuple)): y_p = minum.array(y_p) return MIArray(ArrayMath.inPolygon(x.array, y.array, x_p.array, y_p.array)) else: if isinstance(polygon, MILayer): polygon = polygon.shapes() elif isinstance(polygon, PolygonShape): polygon = [polygon] return MIArray(ArrayMath.inPolygon(x.array, y.array, polygon))
def inpolygon(x, y, polygon): ''' Judge if a point is inside a polygon or not. :param x: (*float*) X coordinate of the point. :param y: (*float*) Y coordinate of the point. :param polygon: (*PolygonShape*) The polygon. :returns: (*boolean*) Inside or not. ''' return GeoComputation.pointInPolygon(polygon, x, y)
def distance(*args, **kwargs): """ Get distance of a line. :param args: LineString or x, y coordinate arrays. :param islonlat: (*boolean*) x/y is longitude/latitude or not. :returns: Distance, meters for lon/lat. """ islonlat = kwargs.pop('islonlat', False) if len(args) == 1: r = GeoComputation.getDistance(args[0].getPoints(), islonlat) else: x = args[0] y = args[1] if isinstance(x, (NDArray, DimArray)): x = x.aslist() if isinstance(y, (NDArray, DimArray)): y = y.aslist() r = GeoComputation.getDistance(x, y, islonlat) return r
def gridarea(x_orig, x_cell, x_num, y_orig, y_cell, y_num, islonlat=False, allcell=True, earth_radius=None): """ Calculate area of grid cells. :param x_orig: (*float*) X origin. :param x_cell: (*float*) X cell spacing. :param x_num: (*int*) Cell number in x direction. :param y_orig: (*float*) Y origin. :param y_cell: (*float*) Y cell spacing. :param y_num: (*int*) Cell number in y direction. :param islonlat: (*bool*) Lonlat projection or not. :param allcell: (*bool*) Calculate all grid cells or not. :param earth_radius: (*float*) Earth radius in meters. :return: (*array*) Grid cell areas. """ if earth_radius is None: a = GeoComputation.getGridArea(x_orig, x_cell, x_num, y_orig, y_cell, y_num, islonlat, allcell) else: a = GeoComputation.getGridArea(x_orig, x_cell, x_num, y_orig, y_cell, y_num, islonlat, allcell, earth_radius) return NDArray(a)
def distance(x, y, islonlat=False): """ Get distance of a line. :param x: (*array_like*) X coordinates. :param y: (*array_like*) Y coordinates. :param islonlat: (*boolean*) x/y is longitude/latitude or not. :returns: Distance, meters for lon/lat. """ if isinstance(x, (MIArray, DimArray)): x = x.aslist() if isinstance(y, (MIArray, DimArray)): y = y.aslist() r = GeoComputation.getDistance(x, y, islonlat) return r
def polyarea(*args, **kwargs): ''' Calculate area of polygon. Parameter is a polygon object or x, y coordinate arrays. :return: The area of the polygon. ''' islonlat = kwargs.pop('islonlat', False) if len(args) == 1: if islonlat: r = args[0].getSphericalArea() else: r = args[0].getArea() else: x = args[0] y = args[1] if isinstance(x, MIArray): x = x.aslist() if isinstance(y, MIArray): y = y.aslist() r = GeoComputation.getArea(x, y, islonlat) return r
print 'The points inside Tibet are:' tibetArea = countryLayer.getShapes()[107] sLon = 110.05 sLat = 35.85 delt = 0.1 print 'x y long lat' for i in range(0, 120): lon = sLon + i * delt for j in range(0, 70): aPS = PointShape() lat = sLat + j * delt #print lon, lat aPoint = PointD(lon, lat) aPS.setPoint( aPoint) shapeNum = nLayer.getShapeNum() #print "Shape Number: %d" % (shapeNum) nLayer.editInsertShape(aPS, shapeNum) if GeoComputation.pointInPolygon(tibetArea, aPoint): nLayer.editCellValue(fieldName, shapeNum, "Y") print i+1, ' ', j+1, ' ', "%5.2f %5.2f" % (lon, lat) else: nLayer.editCellValue(fieldName, shapeNum, "N") #print "Layer Name: %s" % (nLayer.getLayerName()) mapFrame.addLayer(nLayer) #nLayer.saveFile() #print 'Finished!'