long long msudf_disjoint(UDF_INIT *initid,UDF_ARGS *args,char *is_null, char *error)
{
	GEOSGeom geom1,geom2;
	long long result;

	DEBUG("msudf_disjoint");

	geom1 = msudf_getGeometry((unsigned char *)args->args[0],args->lengths[0]);		
	if (geom1 == NULL) {
		strcpy(error,"Invalid geometry.");
		*is_null = 1;
		return 0;
	}
	
	geom2 = msudf_getGeometry((unsigned char *)args->args[1],args->lengths[1]);	
	if (geom2 == NULL) {
		strcpy(error,"Invalid geometry.");
		*is_null = 1;
		return 0;
	}
		
	result = GEOSDisjoint(geom1,geom2);
	if (geom1 != NULL) GEOSGeom_destroy(geom1);
	if (geom2 != NULL) GEOSGeom_destroy(geom2);
	
	if (result >1) {
		*is_null = 1;
		return 0;
	} else {
		return result;
	}
}
Esempio n. 2
0
/*
** Are shape1 and shape2 disjoint, returns MS_TRUE/MS_FALSE or -1 for an error.
*/
int msGEOSDisjoint(shapeObj *shape1, shapeObj *shape2)
{
#ifdef USE_GEOS
  GEOSGeom g1, g2;
  int result;

  if(!shape1 || !shape2)
    return -1;

  if(!shape1->geometry) /* if no geometry for shape1 then build one */
    shape1->geometry = (GEOSGeom) msGEOSShape2Geometry(shape1);
  g1 = (GEOSGeom) shape1->geometry;
  if(!g1) return -1;

  if(!shape2->geometry) /* if no geometry for shape2 then build one */
    shape2->geometry = (GEOSGeom) msGEOSShape2Geometry(shape2);
  g2 = (GEOSGeom) shape2->geometry;
  if(!g2) return -1;

  result = GEOSDisjoint(g1, g2);  
  return ((result==2) ? -1 : result);
#else
  msSetError(MS_GEOSERR, "GEOS support is not available.", "msGEOSDisjoint()");
  return -1;
#endif
}
Esempio n. 3
0
static ERL_NIF_TERM
disjoint(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
    GEOSGeometry **geom1;
    GEOSGeometry **geom2;

    if(!enif_get_resource(env, argv[0], GEOSGEOM_RESOURCE, (void**)&geom1)) {
        return 0;
    }
    if(!enif_get_resource(env, argv[1], GEOSGEOM_RESOURCE, (void**)&geom2)) {
        return 0;
    }

    if (GEOSDisjoint(*geom1, *geom2)) {
        return enif_make_atom(env, "true");
    }
    else {
        return enif_make_atom(env, "false");
    }
}